Agentic Patterns e le molte facce del RAG

Tradotto dall'originale in spagnolo. Leggi in spagnolo

Quando inizi a costruire app basate sull’IA per la prima volta, tutto sembra semplice: un prompt, un modello, una risposta. E funziona — finché non smette di funzionare. Finché il modello allucina invece di cercare, sceglie lo strumento sbagliato con una sicurezza invidiabile o tratta una domanda complessa esattamente come una banale.

Quello che ti serve a quel punto non è più un prompt. È un pattern — un modo ricorrente di collegare un LLM a un sistema perché si comporti in modo prevedibile davanti agli input del mondo reale.

Ho messo insieme un riferimento animato di questi pattern su agents.zerogap.uk. Questo post ne è il complemento scritto.

Diagrama de agentic patterns y arquitecturas RAG


Inizia dal Single Agent

Il punto di partenza che consiglio è il più semplice: un modello con un system prompt e un insieme definito di strumenti. L’agente legge la richiesta dell’utente, decide quale strumento chiamare, lo chiama e sintetizza una risposta.

Non ti serve niente di più elaborato finché il single agent basta. I segnali sono concreti: allucina invece di cercare informazioni, sceglie lo strumento sbagliato con sicurezza, oppure risponde allo stesso modo alle domande rapide e a quelle lente (male, per una delle due).

Quest’ultimo sintomo è quello che risolve il pattern router gate. Un classificatore leggero si mette davanti al sistema e decide: questa domanda va al single agent, quella va a una pipeline più pesante a più passaggi.


Il RAG non è un pattern — è una famiglia

Il motivo più comune per cui un single agent non basta è che la risposta sta nei tuoi documenti, non nei pesi del modello. È qui che entra in gioco il Retrieval-Augmented Generation (RAG).

Naive RAG. Calcola l’embedding della query, cerca i chunk più vicini per similarità del coseno e inseriscili nel prompt. È in ogni tutorial. Funziona quando il corpus è piccolo e ben scritto. Fallisce quando gli utenti chiedono di identificatori esatti, codici o gergo — la similarità vettoriale li appiattisce.

Keyword RAG. BM25 o una ricerca lessicale simile. Il modo di fallire opposto: ottimo per le query a corrispondenza esatta («error code TRX-4012»), peggiore nel capire l’intento.

Hybrid RAG. Esegui entrambi e combinali. In produzione è quasi sempre meglio di ciascuno dei due preso da solo.

Reranking RAG. Recupera una prima passata ampia, poi esegui un cross-encoder reranker sui migliori candidati. Il reranker legge insieme query e documento, cogliendo la rilevanza che la similarità degli embedding si era persa.

Agentic RAG. L’agente decide se recuperare, cosa recuperare e quando fermarsi. Il retrieval diventa uno strumento che il modello può chiamare più volte. Più lento, ma gestisce le domande multi-hop che il Naive RAG non riesce a gestire.

Corrective RAG (CRAG). L’agente recupera e poi valuta ciò che ha recuperato. Se il contesto è debole, riscrive la query, ripiega sulla ricerca web o si rifiuta di rispondere.

Graph RAG. Recupera da un knowledge graph invece che da (o insieme a) chunk vettoriali. Quando contano le relazioni — chi riporta a chi, quali prodotti dipendono da quali fornitori — l’attraversamento del grafo dà risposte che la sola similarità tra chunk non può ricostruire.

Tree-Index RAG (Vectorless). Riassunti gerarchici. I documenti grandi vengono riassunti a più livelli; il retrieval può arrivare a un chunk foglia o risalire a un riassunto di sezione. Utile quando le context window sono strette.

CAG (Cache-Augmented Generation). Quando il tuo corpus sta nella context window di un modello a contesto lungo, salta il retrieval e carica tutto con il prompt caching. Spesso è la risposta giusta per domini ristretti con knowledge base stabili. Costa meno di quanto si pensi una volta attivato il caching.

L’albero decisionale non è «qual è il migliore» — è «quale modo di fallire sto cercando di evitare». Scegli il più semplice che supera la tua query più difficile, poi aggiungi complessità quando una query reale lo rompe.


Orchestrazione: quando un solo agente non basta

Oltre al retrieval, la famiglia successiva di pattern riguarda come più passaggi o più agenti si collegano tra loro.

  • Sequential — agente A → agente B → agente C. L’output di ogni passaggio alimenta il successivo.
  • Parallel — distribuisci sottoattività indipendenti e combina i risultati.
  • Conditional — dirama in base all’output di un passaggio precedente. Control flow standard applicato alle chiamate LLM.
  • Review-and-critique — un agente produce, un altro rivede, il primo corregge. Più lento, ma alza costantemente la qualità.
  • Coordinator — un agente manager delega a specialisti e assembla il loro lavoro. La classica forma a «squadra di esperti».
  • Hierarchical decomposition — dividi un compito grande in sottocompiti, ognuno dei quali può essere ulteriormente scomposto.
  • Dynamic prompting — il prompt viene costruito a runtime a partire dal contesto dell’utente, dai fatti recuperati e dai turni precedenti. Più una disciplina che un pattern: smetti di scrivere i prompt hardcoded.
  • Swarm — tanti agenti leggeri in parallelo, con un coordinamento minimo.

Guardali in movimento

Questi pattern si assimilano più facilmente quando puoi vederli. Ognuno di essi su agents.zerogap.uk è animato: vedi la query scorrere verso l’agente, le tool call partire, il retrieval avvenire, la critica tornare indietro.

Se stai costruendo con gli LLM e ti sei chiesto di quale pattern abbia davvero bisogno il tuo problema — entra e gioca. Le animazioni rendono ovvi i trade-off in un modo che i soli diagrammi non riescono mai del tutto a ottenere.

Maximiliano Díaz Doglia

AI Platform Engineer & Full-Stack Developer
Building Enterprise Integrations & Automations

Pubblicato in: IA