Che cos’è un agente?
La definizione di “agente” può variare. Alcuni utenti lo considerano un sistema autonomo in grado di operare indipendentemente nel tempo, sfruttando strumenti per compiti complessi. Altri intendono implementazioni più specifiche, che seguono flussi di lavoro prestabiliti. Anthropic riconosce entrambi questi come sistemi agili, distinguendoli però architetturalmente in flussi di lavoro e agenti.
Flussi di lavoro vs agenti
Flussi di lavoro sono sistemi in cui i modelli linguistici e gli strumenti vengono orchestrati tramite percorsi di codice predefiniti.
Agenti, invece, sono sistemi dove i modelli linguistici gestiscono autonomamente i loro processi e l’utilizzo degli strumenti, mantenendo un controllo su come sono svolte le attività.
Quando (e quando non) utilizzare gli agenti
Quando si sviluppano applicazioni basate su modelli linguistici, Anthropic consiglia di optare per la soluzione più semplice possibile. Questo potrebbe significare non costruire agenti affatto. I sistemi agili spesso scambiano latenza e costo per una maggiore efficienza nel compito e bisogna valutare quando quest’equilibrio è vantaggioso.
Quando invece una maggiore complessità è necessaria, i workflow offrono predittibilità e coerenza per compiti ben definiti, mentre i modelli autonomi sono preferibili quando si richiede flessibilità e decisioni guidate dal modello su larga scala. Tuttavia, per molte applicazioni, è sufficiente ottimizzare singoli chiamati ai modelli linguistici tramite recupero ed esempi contestuali.
Framework per agenti
Esistono diversi framework per semplificare l’implementazione dei sistemi agili, tra cui:
- SDK degli agenti di Claude
- Strands Agent SDK di AWS
- Rivet, costruttore di workflow a trascinamento e rilascio per modelli
- Vellum, strumento grafico per testare e costruire workflow complessi
Questi framework facilitano lo sviluppo, ma spesso aggiungono layer di astrazione che possono rendere i prompt e le risposte sottostanti più difficili da debuggare. Inoltre, possono incoraggiare una maggiore complessità dove una configurazione semplice sarebbe sufficiente. Si raccomanda di partire direttamente con le API di modelli linguistici, implementando molti pattern in poche righe di codice. Se si utilizza un framework, è importante capire cosa si nasconde sotto. Presupposti errati causano spesso errori per gli sviluppatori.
Per esempi pratici, Anthropic fornisce un cucina di esempi (cookbook)
Costruzione, workflow e agenti
L’unica unità di base in tutti i sistemi agili è il modello linguistico potenziato con funzioni di ricerca, strumenti e memoria. Questo modello può generare autonomamente query di ricerca, selezionare strumenti e valutare che informazione conservare.
Anthropic ha definito il Model Context Protocol, che permette di integrare facilmente un numero crescente di strumenti di terze parti.
Workflow: Catena di prompt
La catena di prompt suddivide compiti in passaggi sequenziali, dove ogni chiamata al modello processa i risultati del precedente. Si possono aggiungere controlli programmabili (vedi "gate") in qualsiasi passo intermedio, per verificare il corso d’azione.
Quando utilizzare questa workflow:
Questo modello è ideale quando il compito può essere facilmente suddiviso in sottotask ben definiti. Il principale obiettivo è offrire maggiore precisione a scapito della velocità, rendendo ogni chiamata al modello un compito più semplice.
Esempi utili:
- Generare contenuti promozionali, quindi tradurli in altre lingue.
- Creare una bozza di struttura di un documento, verificandone i criteri e poi proseguire con la stesura.
Workflow: Routing
Il routing classifica un input e lo distribuisce verso un task specifico e focalizzato. Questo modello permette la separazione dei problemi e la costruzione di prompt più mirati. Senza routing, ottimizzare un modello per un tipo specifico può compromettere le prestazioni per altri tipi di input.
Quando utilizzare questo workflow:
Routing funziona bene quando si ha a che fare con compiti complessi che richiedono una categorizzazione chiara e precisa. Funziona bene quando la classificazione può essere eseguita con precisione tramite modelli linguistici o algoritmi tradizionali.
Esempi:
- Indirizzare query diverse (richieste generali, rimborsi, supporto tecnico) a processi, strumenti o promemoria diversi.
- Utilizzare modelli più economici per domande semplici e modelli avanzati per query complesse.
Workflow: Parallelizzazione
I modelli linguistici possono lavorare in parallelo su un compito e i loro output possono essere aggregati programmabilmente. La parallelizzazione esiste in due principali forme:
- Sezionamento: suddivisione di un compito in sottotask indipendenti
- Votazione: esecuzione dello stesso compito più volte per ottenere un output diversificato
Quando utilizzare questo workflow:
La parallelizzazione è utile quando i sottotask possono essere eseguiti in parallelo per velocizzare il lavoro, o quando si desidera un risultato più affidabile tramite diverse prospettive.
Esempi:
Sezionamento:
- Implementare linee guida dove un modello elabora la richiesta dell’utente, mentre un altro verifica per contenuti non adatti.
- Eseguire test automatizzati per valutare le prestazioni di un modello, dove ciascun test mira a un aspetto diverso.
Votazione:
- Analizzare un pezzo di codice per vulnerabilità, con diversi promemoria che analizzano e segnalano eventuali problemi.
- Valutare se un contenuto è inappropriato con strumenti diversi, ognuno che valuta un aspetto specifico.
Workflow: Orchestratori-lavoratori
Nel workflow orchestratori-lavoratori, un modello linguistico centrale rompe il task, assegna i lavori ad altri modelli e sintetizza i risultati.
Quando utilizzare:
Questo modello è adatto a compiti complessi in cui non si può prevedere a priori quali sottotask sono richiesti. Ad esempio, quando si deve modificare diversi file del codice ma il numero e la natura dei cambiamenti non è noto in antic