Nessun argomento si sviluppa attualmente più rapidamente dell'intelligenza artificiale basata su agenti. A differenza dei chatbot tradizionali, gli agenti di intelligenza artificiale lavorano autonomamente per conto dei loro utenti. Essi effettuano acquisti online, sviluppano software, analizzano mercati o prenotano viaggi. In questo modo, l'IA generativa abbandona lo spazio protetto dell'interfaccia di chat e interagisce direttamente con il mondo reale.

Gli agenti AI agiscono autonomamente su incarico dei loro utenti ed eseguono compiti complessi come ricerche online, sviluppo di software o prenotazioni di viaggi. Ma come funzionano questi sistemi basati su agenti? Questo contributo spiega le sette componenti fondamentali da cui è generalmente composto un sistema basato su agenti. Mostriamo anche come queste componenti interagiscono tra loro, dall'esecuzione del modello alle chiamate agli strumenti, fino alla memoria a breve e lungo termine.

Lo sviluppo procede a ritmo serrato: il Model Context Protocol (MCP), ad esempio, uno dei blocchi centrali degli agenti odierni, ha appena un anno. Motivo sufficiente per dare un'occhiata alle basi tecniche: quali componenti chiave sono necessarie per un sistema AI basato su agenti e come si intersecano tra loro? Infatti, in questo settore ci sono ancora molte discussioni, malintesi e affermazioni.

Definizione e Funzionamento

Il programmatore britannico Simon Willison ha formulato una definizione precisa di agente, che è anche la base per questo articolo: un agente esegue modelli AI e strumenti in un ciclo per raggiungere un obiettivo. Questo significa che l'utente assegna un compito a un Large Language Model (LLM) – ad esempio, prenotare un tavolo in un ristorante vicino a un cinema. Il modello riceve inoltre un elenco di strumenti disponibili, come un database con le posizioni dei ristoranti o le preferenze utente memorizzate.

Ora, il modello pianifica come raggiungere questo obiettivo e inizia con un primo passo: richiama uno degli strumenti. Questo risponde e, in base a tale risposta, il modello seleziona lo strumento successivo. Attraverso questa sequenza ripetuta, l'agente progredisce passo dopo passo verso il raggiungimento dell'obiettivo. Talvolta, un codice imperativo aggiuntivo supporta le decisioni di orchestrazione del modello.

Le Sette Componenti Chiave di un Sistema Agente

Un sistema basato su agenti è composto da diverse componenti che devono interagire in modo fluido e sinergico. La loro integrazione è cruciale per il funzionamento autonomo e l'efficacia dell'agente. Di seguito, elenchiamo e spieghiamo ciascuna di queste componenti essenziali:

  • 1. Ambiente di sviluppo: In primo luogo, è necessario un ambiente di sviluppo con cui sia possibile costruire agenti senza partire da zero. I framework appropriati sollevano gli sviluppatori da gran parte del lavoro, fornendo strutture e librerie predefinite.
  • 2. Ambiente di runtime per il modello AI: Altrettanto importante è un ambiente di runtime per il modello di intelligenza artificiale stesso. Scaricare e rendere operativi gli LLM open-weight richiede non solo una significativa esperienza, ma anche hardware costoso che, con un utilizzo medio, è spesso sottoutilizzato.
  • 3. Ambiente di runtime per il codice basato su agenti: Inoltre, è necessario un ambiente di runtime per il codice basato su agenti. La maggior parte degli agenti viene eseguita nel cloud. Questo perché devono continuare a funzionare anche quando i laptop sono chiusi e devono essere in grado di scalare in base alle necessità.
  • 4. Traduttore tra LLM testuale e chiamate a tool: Un altro blocco costruttivo traduce tra l'LLM basato su testo e le chiamate concrete agli strumenti. Questo componente è fondamentale per permettere all'LLM di interagire con il mondo esterno.
  • 5. Memoria a breve termine: A ciò si aggiungono due tipi di memoria. La memoria a breve termine è utilizzata per l'interazione corrente e serve a conservare le informazioni rilevanti per la sessione in corso.
  • 6. Memoria a lungo termine: La memoria a lungo termine è quella in cui vengono conservate le preferenze dell'utente e i fatti appena appresi, persistendo attraverso più sessioni. Questo permette all'agente di "ricordare" le interazioni passate.
  • 7. Sistema di monitoraggio e tracciamento: E, infine, è necessario un sistema per il monitoraggio e il tracciamento dei passaggi eseguiti, al fine di valutare e ottimizzare le prestazioni dell'agente.

Sviluppo degli Agenti e il Modello ReAct

I Large Language Models (LLM) funzionano meglio se prima spiegano come intendono affrontare un compito. Questo "Chain-of-Thought-Reasoning" è ormai uno standard. Nei sistemi basati su agenti, il suo equivalente si chiama modello ReAct ("Reasoning and Action"): l'agente formula un pensiero, esegue un'azione appropriata e osserva il risultato. Ad esempio, il pensiero potrebbe essere quello di utilizzare una funzione di mappa per trovare ristoranti nelle vicinanze. L'azione è la chiamata API di questa mappa. L'osservazione mostra quindi quali ristoranti si trovano concretamente nelle vicinanze.

Sebbene il modello ReAct sia uno dei più riusciti, non è l'unico metodo di lavoro degli agenti moderni. Tuttavia, tipicamente, i modelli odierni attraversano cicli sulla sequenza Pensiero-Azione-Osservazione. Gli strumenti disponibili vanno da strumenti locali a risorse esterne come database, microservizi o Software-as-a-Service. Per ogni strumento è quindi necessaria una specifica, composta da una spiegazione in linguaggio naturale su come può essere utilizzato questo strumento e dalla sintassi delle chiamate API per poterlo richiamare concretamente. Gli sviluppatori possono inoltre istruire gli agenti a creare i propri strumenti quando necessario.

Un esempio pratico chiarisce ulteriormente questo concetto: supponiamo che un tool recuperi una tabella presentata come testo separato da virgole e che l'agente debba ordinarla. Passare l'intera tabella all'LLM per l'ordinamento sarebbe uno spreco di risorse e tempo. Invece, lo sviluppatore istruisce l'agente a generare il proprio codice Python per compiti semplici e ripetitivi come questo. Questi snippet di codice vengono poi eseguiti localmente o in un tool dedicato all'interprete di codice, garantendo efficienza e specificità del compito.

Runtime e Isolamento

Esistono due modi per isolare il codice su server condivisi. La containerizzazione è efficiente, ma offre meno sicurezza, poiché i singoli container non sono strettamente schermati tra loro. Le macchine virtuali sono più sicure sotto questo aspetto, ma causano un elevato carico computazionale. Le tecnologie moderne combinano entrambi i vantaggi. Esse creano MicroVMs con isolamento hardware e kernel Linux propri, richiedendo però solo pochi megabyte di overhead e avviandosi in millisecondi.

Poiché un agente necessita di un LLM e di risorse di memoria, i sistemi moderni si basano sull'isolamento basato su sessione. Ogni sessione riceve la propria MicroVM. Al termine della sessione, le informazioni di stato dell'LLM vengono riepilogate e trasferite nella memoria a lungo termine, e la MicroVM viene distrutta. In questo modo è possibile gestire numerosi agenti in modo sicuro ed efficiente, massimizzando l'utilizzo delle risorse e garantendo la protezione dei dati.

Comunicazione tra Strumenti e Protocolli

Per la comunicazione tra agenti e strumenti esistono diversi standard. Il più diffuso è il già menzionato Model Context Protocol (MCP). L'MCP definisce un formato standard per il trasferimento dei dati tra un LLM e un server che fornisce gli strumenti, e stabilisce come il server può comunicare all'agente quali strumenti sono offerti e quali dati sono disponibili. Questo protocollo è fondamentale per garantire che gli agenti possano scoprire e utilizzare in modo efficace le capacità degli strumenti esterni.

Tuttavia, a volte lo strumento necessario non dispone di un'API pubblica. In questi casi, l'unica via è attraverso l'interfaccia utente: l'agente "clicca" attraverso il sito web. Queste funzioni di "Computer Use" trasformano i siti web in potenziali strumenti e aprono l'accesso a decenni di contenuti che finora non erano accessibili tramite API. Questa capacità estende notevolmente il raggio d'azione degli agenti, permettendo loro di interagire con quasi ogni risorsa digitale disponibile.

Memoria a Breve e Lungo Termine

Gli LLM predicono la parola successiva basandosi su lunghe sequenze di parole che già conoscono: il contesto. Si tratta di una sorta di memoria, ma non l'unica di cui un sistema basato su agenti ha bisogno. Supponiamo che un agente abbia recuperato alcune decine di ristoranti da uno strumento di mappe. Caricare tutte le informazioni nel contesto sarebbe inefficiente e supererebbe rapidamente le sue capacità. Invece, l'agente deposita l'elenco nella memoria a breve termine e recupera solo uno o due record alla volta – filtrati in base alle preferenze dell'utente. Se questi ristoranti non sono adatti, l'agente accede nuovamente alla memoria a breve termine, invece di avviare una nuova chiamata allo strumento. Questo approccio ottimizza l'uso delle risorse e migliora la reattività dell'agente.

Gli agenti devono anche ricordare le interazioni precedenti. Se un utente ha comunicato le sue preferenze alimentari la settimana scorsa, non dovrebbe doverle ripetere questa settimana. La memoria a lungo termine conserva tali informazioni provenienti da conversazioni precedenti. Gli agenti di solito non creano queste memorie a lungo termine da soli. Dopo la conclusione di una sessione, un modello AI separato analizza l'intera conversazione e crea nuove voci o aggiorna quelle esistenti, garantendo che l'agente possa imparare e adattarsi nel tempo, offrendo un'esperienza utente personalizzata e continua.