Un sistema multi agente è un sistema composto da più Agenti AI che interagiscono tra loro e con l’ambiente circostante.
Un Agente AI è un sistema software progettato per interagire autonomamente con l’ambiente al fine di raggiungere obiettivi predeterminati, prendendo decisioni indipendenti su quali azioni intraprendere. Gli agenti sono in grado di raccogliere e analizzare dati, eseguire attività complesse, e adattarsi dinamicamente a nuove informazioni o contesti.

A seconda della complessità, un agente può essere un singolo sistema che opera in modo autonomo o far parte di un sistema multi-agente, dove più agenti specializzati, con ruoli e responsabilità definite collaborano per risolvere compiti specifici o interi processi.
Gli agenti all’interno di un sistema multi-agente possono essere specializzati in compiti specifici e possono comunicare o collaborare tra loro per gestire flussi di lavoro più complessi rispetto a quelli che un singolo agente potrebbe affrontare da solo.
Gli agenti possono essere progettati per seguire flussi di un processo o più processi (Workflow), oppure eseguire una singola attività o gruppo di attività (Task) e operare in modo completamente indipendente, utilizzando vari strumenti (Tools) e risorse, a volte con la possibilità di richiedere feedback umano per ottimizzare i risultati.
La loro autonomia e capacità di adattamento li rendono particolarmente adatti a compiti che richiedono ragionamento, pianificazione e recupero delle informazioni, estrazione, trasformazioni di testo, codifica e gestione degli errori durante l’esecuzione.
A differenza di un singolo programma che esegue istruzioni predefinite, un sistema multiagente è caratterizzato da:
- Autonomia: Ogni agente opera in modo indipendente, prendendo decisioni senza un controllo centralizzato diretto al fine di eseguire un intero flusso di un un processo (Workflow) o un singola attività (Task)
- Reattività: Gli agenti percepiscono i cambiamenti dell’ambiente (Context) e reagiscono di conseguenza.
- Proattività: Gli agenti non si limitano a reagire agli eventi, ma possono anche intraprendere azioni per raggiungere i propri obiettivi.
- Interazione: Gli agenti comunicano e cooperano tra loro per raggiungere obiettivi comuni o per risolvere problemi complessi e possono richiamare servizi esterni o essere integrati in sistemi software se progettati come micro servizi.
I vantaggi principali di un sistema multi-agente includono:
- Modularità: la separazione degli agenti semplifica lo sviluppo, la manutenzione e la scalabilità del sistema.
- Specializzazione: ogni agente può essere focalizzato su un dominio specifico, migliorando l’efficienza e le prestazioni complessive.
- Controllo: la comunicazione e l’interazione tra gli agenti possono essere gestite in modo esplicito, permettendo una maggiore flessibilità e una gestione più precisa del flusso di lavoro.
I sistemi multi-agente possono essere implementati per affrontare situazioni in cui la complessità aumenta, come la gestione di contesti dinamici o la necessità di coordinare l’uso di strumenti e risorse multiple risulta particolarmente gravosa o ripetitiva.
Come in uno sciame di api: ogni ape è un agente che agisce in modo relativamente indipendente, ma l’intero sciame mostra un comportamento complesso e coordinato per un obiettivo comune come costruire l’alveare, cercare cibo e proteggere la colonia. Un sistema multiagente cerca di replicare questo tipo di comportamento emergente nel mondo digitale.
Differenza tra workflow e sistema multiagente:
È importante distinguere tra workflow e sistemi multiagente. Un workflow è una sequenza predefinita di passaggi o attività, con un flusso di lavoro rigido e prevedibile. Ad esempio, un processo di approvazione di un documento segue un workflow: viene inviato, revisionato, approvato o rifiutato. Un sistema multiagente, invece, è molto più dinamico. Gli agenti possono interagire in modi diversi a seconda della situazione, adattando il loro comportamento per raggiungere gli obiettivi. In altre parole, un workflow è deterministico, mentre un sistema multiagente è più adattivo e può gestire situazioni impreviste. Un sistema multiagente può implementare un workflow, ma non è limitato a esso.
Un agente può gestire un workflow composto da singoli task, dove ogni task è una parte autonomamente eseguibile di un compito più ampio. In questo caso, l’agente può essere responsabile di eseguire un singolo task o un tutti i task di un processo in modo indipendente, prendendo decisioni basate sul contesto e sugli obiettivi predeterminati dall’utente, utilizzando strumenti o risorse per completare il lavoro.
Un sistema multi-agente, invece, è in grado di gestire processi complessi costituiti da più task, che possono essere gerarchici, sequenziali o paralleli. I task possono essere suddivisi tra vari agenti, ciascuno dei quali è responsabile per una parte specifica del processo. La gestione di tali task può avvenire in modo coordinato, dove ogni agente o gruppo di agenti esegue il proprio compito in base alle necessità del flusso di lavoro complessivo.
In entrambi i casi, ogni singolo task può essere eseguito da un singolo agente o da un sistema multi-agente, a seconda della complessità e delle esigenze del processo o del sistema progettato.
Mentre un singolo agente può gestire un processo composto da task indipendenti, un sistema multi-agente è più adatto a gestire processi complessi con task che richiedono coordinamento, sequenzialità o esecuzione parallela. Ogni Attore / Agente agisce in modo indipendente ed è alimentato da modelli linguistici (LLM) connessi e configurati in un modo specifico .
Architetture Multi-Agente

Rete (Network)
In questa architettura, ogni agente è un nodo che può comunicare con ogni altro agente. Ogni agente decide autonomamente quale altro agente chiamare successivamente, in base al proprio stato o al contesto.
È una rete a connettività molti-a-molti, senza una gerarchia fissa, e si adatta a sistemi in cui non c’è un ordine rigido o un flusso di controllo determinato.
Questo approccio è utile quando gli agenti devono collaborare in modo decentralizzato, senza che esista un agente principale che gestisce il flusso di controllo.
Supervisore
In un sistema con supervisore, ogni agente comunica con un singolo agente supervisore. Il supervisore ha il compito di determinare quale agente deve essere chiamato successivamente.
Questo approccio è utile quando c’è una logica centralizzata che gestisce l’ordine di esecuzione degli agenti.
Può essere impiegato per l’esecuzione di agenti in parallelo o in una logica di tipo map-reduce, in cui il supervisore indirizza l’esecuzione verso diversi agenti per elaborare i dati in modo efficiente.
Una variante flusso basato un Supervisor, è la supervisione basata su chiamate di strumenti (Tool-Calling) che offre flessibilità nel gestire il flusso di controllo attraverso gli strumenti progettati per l’agnete.
In questa variante l’agente supervisore è responsabile di chiamare strumenti o agire come un “tool-calling agent” decidendo quali strumenti chiamare e con quali argomenti.
Gerarchico
In un sistema gerarchico (Hierarchical), un supervisore di livello superiore controlla il flusso di lavoro di altri supervisori (di livello inferiore) e dei loro agenti. Ogni supervisore di livello inferiore gestisce un gruppo di agenti, creando una struttura a più livelli.
Questo approccio è utile quando il numero di agenti diventa troppo elevato per essere gestito efficacemente da un singolo supervisore, o quando è necessario suddividere il lavoro in team specializzati. Il supervisore di livello superiore ha il compito di coordinare i team e dirigere le operazioni generali.
Sistemi multi agente con processi personalizzati
In questa architettura, ogni agente comunica solo con un sottoinsieme specifico di agenti. Inoltre, l’ordine in cui gli agenti vengono attivati può essere sia deterministico che dinamico.
Può esserci una sequenza predefinita (flusso di controllo esplicito) o una logica che permette agli agenti di decidere dinamicamente quale agente chiamare successivamente, a seconda delle necessità del contesto.
Questo tipo di architettura è utile quando si ha un flusso di lavoro complesso che non è completamente deterministico, ma che deve comunque seguire certe regole o priorità.
Passaggi di Mano
I passaggi di mano (Hand-off) tra agenti, ovvero quando un agente trasferisce il controllo a un altro, sono un elemento comune nelle interazioni multi-agente. Ogni agente decide se proseguire l’esecuzione o trasferire il controllo a un altro agente. Questo processo di passaggio di mano è cruciale per determinare la direzione del flusso di lavoro.
- Destinazione: L’agente verso il quale il controllo deve essere trasferito (ad esempio, un altro agente o la fine del processo).
- Payload: I dati o le informazioni che vengono passate all’agente successivo, come aggiornamenti di stato o risultati parziali.
Questo approccio permette di gestire flussi di lavoro dinamici e di indirizzare l’esecuzione in base alle decisioni prese durante l’esecuzione.
Comunicazione tra Agenti
Una delle sfide principali quando si progettano sistemi multi-agente è la gestione della comunicazione tra gli agenti. Gli agenti possono comunicare attraverso vari meccanismi:
- Grafo vs Chiamate degli Strumenti:
- Gli agenti possono comunicare come in un Grafo (quando ogni agente è un nodo di di un grafo e trasmette lo stato attraverso la catena / collegamneti del Grafo) o tramite chiamate di strumenti (quando un agente invoca strumenti specifici come parte della sua esecuzione).
- Diversi Schemi di Stato:
- Gli agenti potrebbero richiedere schemi di stato diversi, cioè strutture di dati diverse per memorizzare e condividere informazioni. Un agente potrebbe avere bisogno solo di tracciare determinate informazioni, come le query di ricerca o le risposte, mentre un altro potrebbe avere bisogno di uno stato più complesso.
- Esistono due principali approcci per gestire questo:
- Sottografi con stato separato: Ogni gruppo di agenti o ogni sottoinsieme di agenti ha uno schema di stato proprio.
- Funzioni nodo con stato di input privato: Ogni agente ha uno schema di stato separato che viene utilizzato esclusivamente per la propria esecuzione.
- Elenco di Messaggi Condiviso:
- Un approccio comune per la comunicazione tra agenti è l’uso di un canale di messaggi condiviso. Gli agenti possono comunicare inviando messaggi a un elenco condiviso, permettendo una forma di comunicazione centralizzata.
- Una domanda importante riguarda se gli agenti devono condividere la cronologia completa del loro processo di pensiero (come un blocco note), o solo il risultato finale. La condivisione della cronologia completa può aiutare gli agenti a prendere decisioni migliori, ma aumenta la complessità, mentre la condivisione solo del risultato finale è più efficiente ma potrebbe non sfruttare appieno la collaborazione tra agenti.
In generale, la progettazione di un sistema multi-agente è fortemente influenzata dalla natura del problema che si intende risolvere o del processo che si desidera ottimizzare, nonché dalla necessità di coordinamento tra gli agenti. Ogni architettura presenta specifici vantaggi e svantaggi, e la scelta di quella più appropriata dipende da diversi fattori, tra cui la dimensione del sistema, la complessità del flusso di lavoro e il livello di autonomia richiesto per ciascun agente.
Elementi Costitutivi dei Workflow nei Sistemi Multi-Agente:
I workflow che alimentano i sistemi multi-agente sono costruiti su una serie di componenti fondamentali, che possiamo considerare come i “building blocks” che permettono di creare architetture complesse e sofisticate. Partendo dal concetto di “LLM aumentato”, possiamo identificare i seguenti elementi chiave:
- LLM Aumentato (Potenziato): il componente di base è un LLM (Large Language Model) arricchito con diverse capacità. Non si tratta quindi di un LLM “puro”, ma di un motore inferenziale potenziato per interagire con il mondo esterno e gestire informazioni in modo più efficace. I potenziamenti principali includono:
- Recupero (Retrieval): La capacità di accedere a informazioni esterne, come database, archivi di documenti, risultati di ricerca sul web o la memoria del sistema stesso. Questo permette all’LLM di basare le sue risposte e azioni su dati concreti e aggiornati, superando i limiti della sua conoscenza statica.
- Strumenti (Tools): L’accesso a strumenti specifici, come API, funzioni di calcolo, strumenti di analisi dati o interfacce con altri software. Questo permette all’LLM di eseguire azioni concrete nel mondo reale, automatizzando compiti e interagendo con sistemi esterni.
- Memoria: La capacità di memorizzare informazioni rilevanti per il contesto corrente o per interazioni future. Questa memoria può essere a breve termine (per il contesto di un singolo Task) o a lungo termine (per conservare informazioni tra diverse interazioni).
- Task (Compiti): Rappresentano le unità di lavoro discrete che compongono un workflow. Ogni Task definisce un’azione specifica da compiere, con input, output e una logica di esecuzione ben definita. I Task possono essere semplici (es. “recupera informazioni da X”) o complessi (es. “analizza i dati Y e genera un report”).
- Agenti: Sono le entità che eseguono i Task. Un agente può essere associato a uno o più Task e può utilizzare l’LLM aumentato per prendere decisioni e interagire con l’ambiente. Gli agenti possono essere specializzati in determinati compiti o avere capacità più generali.
- Flussi (Flows/Workflow): Definiscono la sequenza di esecuzione dei Task e le interazioni tra gli agenti. Un Flusso specifica l’ordine in cui i Task vengono eseguiti, le dipendenze tra di essi e la logica condizionale che determina il percorso del workflow.
- Comunicazione Inter-Agente: I sistemi multi-agente prevedono meccanismi di comunicazione tra gli agenti, che permettono loro di scambiarsi informazioni, coordinare le proprie azioni e collaborare per raggiungere un obiettivo comune. Questa comunicazione può avvenire tramite messaggi, condivisione di dati in memoria o altri meccanismi di interazione.
Costruire Workflow Complessi:
Partendo da questi elementi costitutivi, è possibile creare workflow sempre più complessi:
- Flussi di lavoro compositi: Si tratta di sequenze di Task eseguiti in un ordine predefinito. L’output di un Task diventa l’input del successivo, creando una catena di elaborazione.
- Agenti autonomi: Agenti in grado di prendere decisioni in modo autonomo, scegliendo quali Task eseguire e in quale ordine, in base alla situazione e agli obiettivi da raggiungere. Questi agenti possono utilizzare l’LLM aumentato per valutare le informazioni, pianificare le proprie azioni e adattare il proprio comportamento nel tempo.
- Sistemi Multi-Agente: In questo caso, più agenti interagiscono tra loro, coordinandosi per risolvere problemi complessi che non potrebbero essere affrontati da un singolo agente. Ogni agente può avere un ruolo specifico e contribuire al raggiungimento dell’obiettivo comune.
Struttura di un Agente

L’immagine rappresenta un agente AI, visualizzato secondo la logica BPM (Business Process Mangamnet), incaricato di eseguire un Task, con una struttura chiara che include contesti, esempi, formati di risposta, chiamate a LLM e strumenti dedicati.
Per progettare questo agente in modo efficace, utilizzeremo una griglia di attributi chiara, dettagliata ma agile, ottimizzata per una rapida implementazione.
Attributi per l’Agente
| Attributo | Descrizione | Esempio |
|---|---|---|
| ID Agente | Identificativo univoco dell’agente AI. | A001 |
| Nome Agente | Nome descrittivo dell’agente. | Agente AI 1 |
| Descrizione | Obiettivo generale dell’agente nel sistema. | Eseguire Task 2 basato su contesti specifici, esempi e strumenti forniti. |
| Task Principale | Obiettivo chiave dell’agente. | Esecuzione di Task 2 |
| Context | Attività o informazioni specifiche per completare ed eseguire il task | Context Task 1, Context Task 2, Esempi, Formati |
| Contesto | Informazioni contestuali necessarie per eseguire il task. | Dati da Document Retrieval |
| Automatizzabile | Livello di automazione del task (Sì/Parzialmente/No). | Sì |
| Tipo di Agente | Categoria dell’agente (es. Raccolta Dati, Elaborazione, Interazione). | Agente di Elaborazione |
| Modello LLM | Modello linguistico utilizzato per il task. | GPT-4 Turbo |
| Prompt di Sistema | Istruzioni globali che guidano il comportamento generale dell’agente. | Sei un agente AI incaricato di [Inserire il ruolo] eseguire Task 2 [Inserire la descrizione del task] elaborando i contesti ed esempi forniti. |
| Prompt Specifici | Prompt dedicati per ogni sotto-task. | Task 2: “Elabora i dati nel contesto di Context Task 1 e 2 e produci una risposta formattata.”…….. |
| Chiamate Esterne (LLM/API) | Chiamate a modelli esterni o API necessarie per eseguire il task. | Call LLM 2 |
| Strumenti (Tools) | Strumenti specifici utilizzati per supportare l’agente nell’esecuzione dei task. | Tools Task 2 |
| Formato Risposta | Struttura predefinita per l’output generato dall’agente. | JSON: { “Risultato”: “…”, “Errore”: null } |
| Output Atteso | Risultato previsto alla fine del processo. | Risposta validata e strutturata inviata in “Prompt Completion”. |
| Feedback Loop | Processo di feedback per migliorare l’esecuzione in caso di errori o incompletezza. | Se il risultato non è valido, ripeti Task 2 con contesto aggiornato. |
| Retrieval | Informazioni da cui dipende la specializzazione e il funzionamento di questo agente, per completare o risolvere il task specifico. | Document Retrieval |
| Priorità | Livello di importanza nell’esecuzione (Alta, Media, Bassa). | Alta |
| Note | Osservazioni o dettagli aggiuntivi. | L’agente deve garantire la conformità dei dati in entrata prima di procedere con la risposta. |
Componenti chiave dell’Agente
Task principale e configurazione
- Task Principale: Descrizione per eseguire con precisione il Task 2 utilizzando dati contestuali, esempi di riferimento, strumenti dedicati e chiamate a modelli LLM.
Configurazione del messaggio da inviare al modello
- Prompt di sistema: Prompt per configurare l’agente.
- Prompt del task: Prompt per configurare l’esecuzione del task.
- Context Task 1: Acquisizione di informazioni contestuali preliminari (Concatenazione di output).
- Context Task 2: Informazioni contestuali da analizzare nel task.
- Esempi: Utilizzo di esempi di riferimento per orientare l’elaborazione.
- Format Risposta: Strutturazione dei risultati nel formato predefinito.
- Call LLM 2: Interazione con modelli LLM esterni per elaborazioni avanzate.
- Tools Task 2: Utilizzo di strumenti dedicati per validare e ottimizzare il risultato finale.
Prompt di sistema e task
Prompt di Sistema
Sei un agente AI incaricato di eseguire il seguente Task: {TARSK_2}.
La il tuo ruolo è il seguente :{RUOLO_AGENTE_1}
La tua specializzazione è: {EXPERTISE AGENTE_1}
# ISTRUZIONI PER LA RISPOSTA:
Utilizza le informazioni fornite descritte nel CONTEXT, gli esempi, e i seguiti TOOOLS per produrre una risposta chiara e validata
......
# DESCRIZIONE DEI TOOLS
{TOOSL_DESCRICPTIONS}
Prompt specifico per IL Task 2
# ISTRUZIONI PER IL TASK "
Sulla base dei dati e delle "Informazioni di contesto" elabora una risposta strutturata come segue: ["risultato": "dati elaborati", "errori": null].
## Informazioni di contesto:
Output Task: 1
{CONTEXT_TASK_1}Context Task_2:
{CONTEX_TASK_2},
## Esempi:
{{ESEMPIO_1}
{{ESEMPIO_2}}
## Elabora i dati utilizzando i tools seguenti:{TOOLS_DATI}
## Elabora la risposta utilizzando i tools seguenti:
{TOOSL_OUTPUT}
## Se rilevi anomalie, richiedi una revisione.
## Altre specifiche [da definire]
...
Strumenti e Risorse
- Modello Utilizzato: GPT-4 Turbo
- Capacità Richieste:
- Elaborazione avanzata di contesti complessi.
- Generazione di risposte strutturate secondo formati predefiniti.
- Capacità di richiamare esempi come riferimento.
Strumenti e Risorse
- API di Supporto: Strumenti per la validazione e il controllo dei dati elaborati.
- Tools: Descrizione della dotazione degli strumenti dell’agente.
Strumenti e Risorse
- Formato Risposta: JSON
- Schema di esempio:
Schema JSON:{ "risultato": "Elaborazione completata con successo", "errori": null }
Feedback Loop
Se il risultato finale non soddisfa i requisiti, l’agente eseguirà i seguenti passaggi:
- Rivalutazione del contesto: Ri-analisi dei dati contestuali.
- Riesecuzione del task: Applicazione delle correzioni necessarie.
- Segnalazione di errore: In caso di insuccesso ripetuto, inviare un report dettagliato.
Flusso operativo
- Input Dati: Ricezione dei dati da “Document Retrieval”.
- Context Task 1 & 2: Analisi preliminare e avanzata dei contesti.
- Esempi: Utilizzo degli esempi predefiniti come linee guida.
- Format Risposta: Strutturazione dell’output.
- Call LLM 2: Elaborazione con modelli avanzati LLM.
- Tools Task 2: Validazione con strumenti dedicati.
- Output Finale: Invio dei risultati al sistema di Prompt Completion.
- Feedback Loop: Iterazione in caso di risultati incompleti o errori.
Monitoraggio e ottimizzazione
- Metriche Chiave: Accuratezza, tempo di risposta, tasso di errori.
- Registro Attività: Tracciamento delle chiamate API, stato dei sotto-task, risultati finali.
- Miglioramento Continuo: Aggiornamento dei prompt e ottimizzazione degli strumenti utilizzati.
Il Modello di pensiero ReAct. Creare una Agente capace di pensare.
Gli agenti AI basati sul paradigma ReAct (Reasoning + Acting) rappresentano una delle architetture più avanzate nell’ambito dell’automazione intelligente, coniugando capacità di ragionamento logico, azione mirata e adattamento iterativo. Grazie a strumenti come LangChain, questi agenti possono affrontare compiti complessi in autonomia, interpretando contesti dinamici e prendendo decisioni basate su cicli di feedback.
Un agente ReAct segue un ciclo iterativo strutturato in quattro fasi fondamentali: Pensiero, Azione, Input Azione e Osservazione. Ogni fase è strettamente correlata alla successiva e costituisce un passo essenziale per il raggiungimento dell’obiettivo.

Pensiero (Thinking)
In questa fase, l’agente elabora un ragionamento logico basato sul contesto a disposizione, utilizzando le capacità inferenziali del modello LLM (Large Language Model). L’obiettivo è stabilire il miglior corso d’azione per raggiungere il risultato desiderato.
Attributi Chiave:
- Input: Contesto attuale, osservazioni precedenti.
- Output: Decisione su quale azione intraprendere.
- Strumento: Modello LLM.
Template di Prompt di Pensiero:
Context: [Descrizione del contesto attuale]
Previous Observation: [Risultati delle fasi precedenti, se presenti]
Thought: Sulla base del contesto e delle osservazioni, quale azione logica devo intraprendere?
Azione (Acting)
Dopo aver formulato un ragionamento chiaro, l’agente seleziona un’azione appropriata da un insieme di azioni predefinite. Ogni azione rappresenta un metodo concreto, come una query API, una ricerca online o un’elaborazione di dati.
Attributi Chiave:
- Input: Decisione derivata dalla fase di pensiero.
- Output: Comando per un’azione specifica.
- Strumento: Libreria di azioni definite.
Template di Prompt di Azione:
Action: [Descrizione chiara dell'azione scelta]
Action Type: [Tipo di azione, es. Ricerca Web, Analisi Dati]
Purpose: [Obiettivo specifico dell'azione]
Input Azione (Action Input)
Ogni azione richiede un input strutturato per essere eseguita correttamente. Questo input viene definito dall’agente in base al contesto e al risultato della fase precedente.
Attributi Chiave:
- Input: Parametri dettagliati richiesti per l’azione.
- Output: Input strutturato per l’azione (es. query, parametri API).
- Strumento: Formati standardizzati (JSON, XML).
Template di Prompt per Input Azione:
Action: [Tipo di azione scelta]
Input Parameters:
- Query: [Stringa di ricerca o parametro chiave]
- Filters: [Eventuali filtri specifici]
- Context: [Ulteriori dettagli contestuali]
Osservazione (Observation)
Una volta completata l’azione, l’agente raccoglie l’osservazione risultante, che rappresenta il feedback ottenuto dall’ambiente esterno (es. risultato API, risposta di una query).
Attributi Chiave:
- Input: Risultato dell’azione eseguita.
- Output: Osservazione chiara e strutturata.
- Strumento: Logging, API di risposta.
Template di Prompt per Osservazione:
Observation Result:
- Outcome: [Descrizione dei risultati ottenuti]
- Errors: [Eventuali errori riscontrati]
- Next Step: [Decisione sul prossimo passo basata sull'osservazione]
Iterazione (Iteration)
Dopo aver raccolto l’osservazione, l’agente aggiorna il contesto corrente e valuta se:
- Ha raggiunto l’obiettivo: Il task può essere considerato concluso.
- Necessita di ulteriori azioni: Il ciclo riparte dalla fase di pensiero.
Attributi Chiave:
- Input: Contesto aggiornato con l’osservazione corrente.
- Output: Nuovo ciclo di Pensiero → Azione → Input Azione → Osservazione.
- Condizione di Uscita: Obiettivo raggiunto o task completato.
Template di Prompt Iterativo:
Context: [Contesto aggiornato con osservazioni precedenti]
Iteration Step: [Pensiero, Azione, Input Azione, Osservazione]
Condition: ["Task completato" o "Necessita di ulteriori azioni"]
Struttura del Ciclo ReAct
| Fase | Input | Output | Strumento Chiave |
|---|---|---|---|
| Pensiero | Contesto, osservazioni | Decisione sull’azione | Modello LLM |
| Azione | Decisione logica | Comando per azione | Libreria di funzioni |
| Input Azione | Parametri di input | Input formattato | Formati API (JSON, XML) |
| Osservazione | Risultato dell’azione | Feedback contestuale | Logging, API Responses |
| Iterazione | Contesto aggiornato | Nuova iterazione o risultato finale | Modello LLM (valutazione) |
L’architettura ReAct permette agli agenti di affrontare task complessi e dinamici attraverso un ciclo iterativo chiaro. Questo modello garantisce:
- Adattamento dinamico a contesti variabili.
- Efficienza operativa attraverso iterazioni controllate.
- Scalabilità, consentendo di affrontare task di diversa complessità.
Adottare questo approccio significa abilitare sistemi AI che non si limitano a seguire istruzioni statiche, ma che pensano, agiscono e imparano iterativamente fino al raggiungimento dell’obiettivo.
È importante tenere presente che gli Agenti ReAct lavorano in modo ciclico: ripetono le istruzioni ricevute (prompt della catena di pensiero) finché non ritengono di aver completato il loro compito. Ogni volta che “pensano” a un nuovo passo, consultano un potente modello linguistico (LLM) tramite una chiamata API.
Attenzione però: se gli agenti si passano continuamente il lavoro l’un l’altro senza regole precise, rischiano di generare un numero eccessivo di chiamate API, con conseguenti costi elevati.
Per questo, è fondamentale:
- Definire un sistema di monitoraggio per tenere traccia di tutte le azioni degli agenti e del numero di chiamate API che effettuano.
- Stabilire regole chiare per assicurarsi che ogni agente abbia un ruolo specifico, limiti le deleghe definiti e una di way out chiara in modo da uscire dal ciclo quando si si verificano determinati eventi.
Prima di effettuare il deploying degli agenti in un ambiente di produzione è importante analizza attentamente il loro comportamento e i costi che generano. Questo ti permetterà di ottimizzare le risorse e valutare la fattibilità del sistema multi agente.
La progettazione di sistemi avanzati, come quelli basati su Agenti ReAct, richiede un’attenta fase di progettazione e prototipazione. Non si tratta solo di definire le istruzioni (prompt) e gli obiettivi di ogni Agente per ogni Task del Workflow, ma di prevedere il comportamento degli agenti e ottimizzarne l’interazione.
Nella progettazione di sistemi multi-agente, la prototipazione rapida è fondamentale per creare soluzioni robuste, scalabili e pronte per la produzione. Senza una fase di prototipazione accurata, si rischia di incorrere in errori costosi, riprogettazioni e ritardi.
Prototipare significa sperimentare, testare e affinare il sistema prima del suo rilascio, permettendo di:
- Simulare il flusso di lavoro: osservare come gli agenti interagiscono tra loro e con l’LLM, identificando eventuali colli di bottiglia o inefficienze.
- Valutare i costi: stimare il numero di chiamate API e il consumo di risorse (Token di Input e Output) cosumate, prevenendo sprechi e ottimizzando il budget.
- Sperimentare diverse configurazioni: testare diverse strategie di delega, prompt e parametri per individuare la soluzione più efficace ed efficiente.
- Verificare la scalabilità: assicurarsi che il sistema funzioni correttamente anche con un aumento del carico di lavoro e del numero di agenti.
- Ottimizzare le performance: migliorare l’efficienza del sistema, riducendo i costi e massimizzando i risultati.
- Mitigare i rischi: ridurre l’incertezza e aumentare le probabilità di successo del progetto.
Tecnologie per la prototipazione
Per una prototipazione agile ed efficace, è consigliabile utilizzare strumenti come:
- Notebook Jupyter o Google Colab: offrono un ambiente di sviluppo collaborativo, ideale per la sperimentazione e la condivisione di modelli.
- Framework dedicati: LangChain, LangGrath, CrewAI, AutoGen, LlamaIndex e altri semplificano la creazione di agenti e la gestione dell’interazione con l’LLM.
Queste tecnologie permettono di:
- Simulare il flusso di lavoro degli agenti.
- Valutare i costi e il consumo di risorse.
- Sperimentare diverse configurazioni di agenti e prompt.
- Verificare la scalabilità del sistema.
- Creare sistemi di monitoraggio per tracciare costi e performance.
La combinazione di una solida metodologia di prototipazione e di strumenti tecnologici adeguati è la chiave per progettare sistemi multi-agente di successo.
Tipologia di workflow
Concatenamento di prompt

Gli agenti AI sono progettati per interagire con gli utenti in modo strutturato, guidandoli attraverso flussi di conversazione predefiniti. Il concatenamento di prompt permette di creare esperienze utente altamente personalizzate, adattando le risposte dell’agente alle specifiche esigenze del cliente. Ad esempio, un agente AI per il customer service potrebbe utilizzare il concatenamento di prompt per identificare il problema del cliente, suggerire soluzioni e infine fornire un feedback sulla risoluzione del problema.
Ogni passo del processo coinvolge la generazione di un prompt, che viene inviato a un modello linguistico di grandi dimensioni (LLM). L’LLM elabora il prompt e genera un output, che diventa l’input per il passo successivo. I “gate” consentono di verificare la correttezza dei risultati intermedi e di apportare eventuali correzioni.
Il processo è suddiviso in più task, ciascuno dei quali è eseguito da un agente o assistente AI. Il processo può essere iterativo, con la possibilità di ripetere alcuni task o di eseguire azioni diverse in base ai risultati ottenuti. Ogni task prevede una chiamata a un Large Language Model (LLM) per generare del testo. Nel flusso possono essere inseriti dei punti di controllo (gate) per valutare i risultati ottenuti e decidere se proseguire con il processo o meno. Il processo si conclude con la generazione di un output finale, che può essere un testo, una risposta a una domanda o un altro tipo di risultato.
Il concatenamento di prompt è particolarmente utile per:
- Crea esperienze utente su misura.
- Genera contenuti originali e coinvolgenti.
- Creare catene di pensiero complesse.
- Progettare processi di analisi personalizzati
- Digitalizzare i processi e aumenta l’efficienza.
- Adattarsi a una vasta gamma di applicazioni si semplificazione e ottimizzazione di processi.
Routing

Il routing è un meccanismo fondamentale nei workflow basati su LLM che permette di classificare un input e di indirizzarlo verso il processo più adatto a gestirlo. In combinazione con il concatenamento di prompt, il routing crea una struttura modulare e scalabile, ottimizzando l’elaborazione delle informazioni.
Senza il routing, un singolo modello LLM dovrebbe essere in grado di gestire una vasta gamma di richieste, compromettendo le prestazioni. Il routing permette di separare le preoccupazioni, creando task più specifici e consentendo di sviluppare prompt altamente specializzati per ciascuna categoria di input. Questo approccio porta a una maggiore accuratezza e efficienza nel trattamento delle informazioni.
Il processo inizia con la ricezione di un input, che può essere di varia natura (testo, immagine, ecc.). L’input viene sottoposto a un primo livello di classificazione per determinare il percorso ottimale all’interno del sistema. L’input viene quindi elaborato da una serie di agenti AI, ciascuno dei quali esegue un task specifico. Ogni agente utilizza un modello linguistico di grandi dimensioni (LLM) specializzato nel compito per generare un output basato sull’input ricevuto e sul contesto del task. In diversi punti del processo, sono presenti dei “gate” che valutano i risultati intermedi e decidono il percorso successivo da seguire, in base a criteri predefiniti.Al termine del processo, viene generato un output finale, che può essere una risposta a una domanda, una decisione, o un altro tipo di risultato.
Il routing è particolarmente utile quando:
- Sono presenti diverse categorie di input che richiedono trattamenti differenti.
- È possibile identificare e classificare con precisione la categoria di appartenenza di un input, utilizzando LLM o altre tecniche di classificazione.
- Si desidera ottimizzare le risorse. Agenti con modelli LLM più piccoli e specializzati possono essere utilizzati per gestire task semplici, mentre Agenti con modelli LLM più grandi e complessi possono essere riservati per compiti più impegnativi.
Parallelizzazione

Oltre al routing, un altro potente strumento per ottimizzare le prestazioni degli LLM è la parallelizzazione. Questa tecnica consiste nel suddividere un’attività complessa in sotto-attività più semplici che possono essere eseguite contemporaneamente, sfruttando così al massimo le risorse e la capacità di Agenti AI per ogni task progettato.
La parallelizzazione si manifesta in due forme principali:
- Sezionamento: L’attività viene suddivisa in sotto-attività indipendenti, ognuna delle quali viene assegnata a un LLM diverso. Questo approccio è particolarmente efficace quando si vogliono gestire compiti complessi che richiedono una focalizzazione su aspetti specifici, come ad esempio l’implementazione di guardrail di sicurezza o la valutazione delle prestazioni di un modello.
- Votazione: Si eseguono più volte la stessa attività con parametri leggermente diversi, per ottenere una maggiore diversità di risposte e migliorare l’affidabilità dei risultati. Questa tecnica è utile quando si vogliono mitigare i rischi associati a un singolo modello, come ad esempio nell’individuazione di contenuti inappropriati o nella valutazione della qualità del codice.
L’input viene distribuito a diversi agenti AI in parallelo. Ogni agente esegue i task assegnati, utilizzando i modelli linguistici e gli strumenti a disposizione. I risultati degli agenti vengono combinati dal gate o dall’agente aggregatore. Viene prodotto un output finale, che è il risultato dell’elaborazione congiunta di tutti gli agenti.
La parallelizzazione è particolarmente utile quando:
- Le sotto-attività sono indipendenti e possono essere eseguite in parallelo senza influenzare l’esito delle altre.
- Si desidera accelerare l’elaborazione di attività complesse.
- Si vogliono ottenere risultati più robusti e affidabili, mitigando i rischi associati a un singolo modello.
- Si vogliono ridurre i tempi di risposta del sistema mettendo in parallelo task non vincolati da un flusso consecutivo
- Si vuole combinare i risultati di più agenti, per ottenere un risultato più accurato e completo.
In combinazione con il routing, la parallelizzazione può creare un sistema ancora più potente e flessibile. Ad esempio, è possibile suddividere una richiesta complessa in sotto-attività più semplici, instradare ciascuna sotto-attività verso un agente AI specializzato e poi combinare i risultati finali.
Orchestrazione

In questo modello, un agente centrale agisce come un direttore d’orchestra, suddividendo un compito complesso in sotto-compiti più gestibili e assegnandoli a diversi LLM / agenti “lavoratori specializzati”. A differenza di approcci più rigidi, questo metodo offre una grande flessibilità, adattandosi dinamicamente alle esigenze del compito e generando soluzioni personalizzate.
In questo flusso di lavoro l’agente orchestratore assume il compito di coordinamento supervisione e programmazione:
- Valutare la natura e la complessità del task assegnato dell’utente.
- Creare un progetto o una programmazione per risolvere
- Decomporre il task in sotto-task più semplici e gestibili.
- Distribuire i sotto-task a diversi agenti LLM specializzati,
- Coordinare e monitorare lo svolgimento dei sotto-task e gestire eventuali dipendenze tra di essi.
Alla fine dei del flusso un agente sintetizzatore si occuperà di combinare i risultati prodotti dagli agenti specializzati per ottenere una soluzione completa al task iniziale o dell’intero processo.
Parallelizzazione Vs Orchestrazione
| Caratteristica | Parallelizzazione | Orchestrazione |
|---|---|---|
| Suddivisione del task | Statica, predefinita | Dinamica, adattativa |
| Flessibilità | Limitata | Elevata |
| Complessità di implementazione | Relativamente bassa | Più elevata |
| Scenari di utilizzo | Task ben definiti e ripetitivi | Task complessi e variabili |
Ottimizzazione

Questo flusso si basa sul framework valutatore-ottimizzatore, una metodologia iterativa di ottimizzazione, particolarmente adatta per problemi che richiedono una raffinamento progressivo della soluzione. Questo approccio, tipico dell’apprendimento automatico, si basa sull’interazione continua tra due o più agenti configurati con LLM generalmente più grandi e performanti, con il fine di produrre risposte sempre più accurate e pertinenti.
In questo processo, l’agente valutatore analizza la risposta generata dall’agente ottimizzatore, confrontandola con un insieme di criteri predefiniti o con un modello di riferimento, e fornisce un feedback all’ottimizzatore per migliorare le successive iterazioni.
- Analizza la risposta, confronta con criteri, fornisce feedback.
- Suggerisce una valutazione accurata e suggerisce azioni di analisi e raffinamenti successivi.
- Ripete il processo di generazione e valutazione fino a raggiungere un livello di qualità soddisfacente
- Mira a raggiungere un livello di performance paragonabile a quella di un esperto umano
Controllo umano nel flusso

L’apprendimento rinforzato da feedback umani (RLHF) è una tecnica fondamentale per affinare i modelli di intelligenza artificiale generativa, rendendoli in grado di produrre output sempre più coerenti, pertinenti e allineati alle aspettative umane. In questo contesto, il feedback umano agisce come una sorta di “istruttore”, guidando il modello verso la generazione di contenuti di alta qualità.
In questo flusso di lavoro (Human in the loop) il modello genera un contenuto (testo, immagine, codice, ecc.) in risposta a un prompt o una richiesta specifica. Un gruppo di valutatori umani esamina l’output generato e fornisce un feedback, indicando quanto è soddisfacente rispetto a determinati criteri (ad esempio, coerenza, originalità, pertinenza). Il modello utilizza il feedback ricevuto come un segnale di “ricompensa” o “punizione”, aggiornando i propri parametri interni per aumentare la probabilità di generare output simili a quelli valutati positivamente e diminuire quella di generare output valutati negativamente. Questo processo si ripete in modo iterativo, con il modello che impara gradualmente a produrre output sempre più allineati alle preferenze umane.
Il flusso basato su feedback umano (RLHF) risulta particolarmente utile per
- Allineare gli output con i valori umani. I modelli addestrati con RLHF sono più propensi a generare contenuti che rispecchiano i valori e le preferenze umane.
- Migliorare la qualità delle risposte del modello. Il feedback umano consente di ottenere output di qualità superiore, più coerenti e pertinenti.
- Personalizzare le risposte del modello. L’RLHF può essere utilizzato per creare modelli personalizzati che si adattano alle esigenze specifiche di diversi utenti e facilitare il Fine Tuning dei modelli più piccoli o distillati.
