RAG patterns (IT)
RAG Patterns (it. Pattern RAG) — insieme di approcci architetturali e metodologici per la costruzione di sistemi Retrieval-Augmented Generation (RAG). Questi pattern sono progettati per risolvere i problemi fondamentali dei grandi modelli linguistici (LLM), come le allucinazioni, l'obsolescenza delle conoscenze e la mancanza di specificità di dominio, attraverso l'integrazione degli LLM con fonti di dati esterne e dinamicamente accessibili[1]. L'evoluzione del RAG ha percorso la strada dalle semplici pipeline lineari a sistemi modulari e agentici complessi[2].
Pattern RAG principali
Con lo sviluppo della tecnologia sono emersi numerosi pattern RAG, ciascuno dei quali risolve determinati compiti e presenta i propri compromessi tra qualità, velocità e costo.
- Classic RAG (RAG Classico) — approccio di base in cui la query dell'utente viene vettorizzata per ricercare frammenti rilevanti (chunk) in un database vettoriale; i chunk trovati vengono forniti all'LLM insieme alla domanda per la generazione della risposta[1].
- Multi‑Query RAG (Query Multiple) — l'LLM genera diverse varianti riformulate/affinate della query originale; la ricerca viene eseguita su tutte le varianti e i risultati vengono uniti, aumentando la completezza (recall)[3].
- HyDE (Hypothetical Document Expansion) — per superare il «divario semantico» tra una query breve e documenti lunghi. L'LLM genera prima un documento-risposta «ipotetico», poi il suo embedding viene utilizzato per la ricerca, migliorando spesso la qualità del recupero[4].
- Hybrid Retrieval (Ricerca Ibrida) — combinazione di ricerca semantica (vettoriale) e lessicale (BM25). Gli schemi ibridi sono diventati lo standard per i sistemi in produzione: la ricerca vettoriale copre le corrispondenze semantiche, mentre BM25 individua termini/ID/acronimi esatti; i risultati vengono uniti tramite fusion[5][6][7].
- Re‑ranking (Riordinamento aggiuntivo) — processo in due fasi: un retriever rapido restituisce un insieme di candidati (ad esempio, top‑100), poi un cross-encoder (o altro re-ranker) ricalcola la rilevanza e seleziona i migliori (ad esempio, top‑5) per l'LLM[8][9].
- Query Routing (Instradamento delle query) — nei sistemi con più fonti di dati eterogenee (indici/database/API diversi) la query viene indirizzata alla fonte migliore tramite un router (selettore LLM o classificatore); include strategie di fallback[10].
- Agentic/Web RAG (RAG Agentico) — l'LLM agisce come agente: decompone domande complesse, pianifica iterazioni e utilizza strumenti (ricerca vettoriale, ricerca web) con feedback. L'implementazione tipica è il paradigma ReAct[11]; per la raccolta orientata al web e la citazione obbligatoria si veda WebGPT[12].
Paradigmi correlati e in sviluppo
- GraphRAG (RAG su Grafo) — utilizza un grafo della conoscenza come fonte e meccanismo di selezione del contesto; la ricerca avviene sulla struttura delle relazioni tra entità e sul testo, migliorando l'interpretabilità e la qualità sulle domande multi-hop[13][14].
- MM‑RAG (RAG Multimodale) — lavoro con testo e fonti visive (scansioni/schemi/tabelle). Esempio: VisRAG dimostra il recupero e la generazione orientati ai VLM su documenti multimodali[15].
- Packaging & Context Handling (Gestione e impacchettamento del contesto) — modalità di integrazione dei chunk trovati nel prompt: Stuff, Map‑Reduce, Refine, Tree‑of‑Chunks (RAPTOR)[16].
Tabella comparativa dei pattern
| Pattern | Quando applicare | Impatto sulla qualità | Costo / Latenza | Rischi e limitazioni |
|---|---|---|---|---|
| Classic RAG | PoC e Q&A semplice su base omogenea | Livello base; fortemente dipendente dagli embedding[1] | Basso | Sensibilità alla formulazione; rischio di contesto non rilevante |
| Hybrid Retrieval | Nella maggior parte degli scenari in produzione; molti codici/acronimi/ID | Aumenta la completezza; copre i termini esatti[5][6][7] | Basso/Medio | Calibrazione dei pesi del fusion; due indici |
| Re‑ranking | Critico quando è importante un'alta precisione | Significativo incremento di precision sul top‑k[8][9] | Medio/Alto | Latenza/costo aggiuntivi |
| Multi‑Query | Query brevi/multidimensionali | Aumenta il recall[3] | Medio | Riformulazioni ridondanti/rumorose |
| HyDE | Query brevi/ambigue con ampio «divario semantico» | Migliora la qualità del recupero zero‑shot[4] | Medio | Dipende dalla qualità del testo «ipotetico» |
| Query Routing | Più fonti (base documentale, SQL, API, web) | Aumenta la rilevanza grazie alla fonte corretta[10] | Medio | Errore di instradamento = fallimento della ricerca |
| Agentic/Web RAG | Query complesse, esplorative, multi-fase | Risolve compiti al di là della pipeline lineare[11][12] | Alto | Complessità, rischio di cicli infiniti; necessari guardrail |
Implementazione pratica e architettura
Fasi di adozione
- Proof of Concept (PoC): Iniziare con il Classic RAG su un insieme di dati limitato ma rappresentativo, per verificare la qualità degli embedding e il recupero di base[1].
- Minimum Viable Product (MVP): Implementare Hybrid Retrieval e Re‑ranking come miglior rapporto «sforzo/effetto»[5][8].
- Produzione: Aggiungere trasformazioni delle query (HyDE, Multi‑Query) e, se necessario, il Query Routing; configurare l'observability (logging del recupero/re-ranking/risposte) e i test A/B[3][10].
Componenti chiave
- Chunking (Suddivisione in chunk): Uno dei fattori di qualità più critici. Le dimensioni fisse ingenue spesso interrompono le unità semantiche. Si raccomandano splitter orientati alla struttura (per markup) o ricorsivi (paragrafo → frase → parola)[17][18].
- Embedding e metadati: Conservare con ogni chunk document_id, pagina/sezione, titolo, date; ciò è necessario per il filtraggio e la corretta citazione delle fonti.
- Recupero ibrido e re-ranking: Usare BM25+vettore con fusion (o RRF), poi un cross-encoder per il riordinamento su un piccolo pool di candidati[5][6][8].
- Impacchettamento del contesto: Scegliere Map‑Reduce, Refine o Tree‑of‑Chunks per corpus lunghi[16][18].
Errori comuni (anti-pattern)
- Solo ricerca vettoriale senza BM25 → fallimenti su codici/ID/acronimi[5][7].
- Chunk troppo grandi/piccoli → perdita di contesto o «diluizione» dell'embedding[17].
- Assenza di re-ranking in produzione → l'LLM riceve un contesto rumoroso[8].
- Nessuna observability e tracciamento delle fonti → impossibile analizzare le cause degli errori (vedere la valutazione RAG).
Valutazione della qualità e metriche
La valutazione viene condotta a livello di recupero (offline) ed end‑to‑end (generazione).
Metriche del retriever
- Hit Rate, Recall@k, MRR — copertura e posizione dei documenti rilevanti.
- Context Precision & Recall — quanto il contesto estratto è privo di «rumore» e copre tutto il necessario (implementato in RAGAS)[19].
Metriche del generatore (end‑to‑end)
- Faithfulness / Groundedness — corrispondenza della risposta con il contesto fornito.
- Answer Relevancy (Rilevanza della risposta) — corrispondenza con la domanda originale.
Per l'automazione delle metriche vengono utilizzati framework open‑source: RAGAS, TruLens (RAG triad: rilevanza del contesto, groundedness, rilevanza della risposta), DeepEval[20][21].
Vedi anche
- Retrieval-Augmented Generation (RAG)
- Database vettoriali
- Embedding
- Agente AI
- GraphRAG
- MM-RAG
- Valutazione e benchmark degli LLM
Bibliografia
- Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
- Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels (HyDE). ACL 2023. ACL Anthology; arXiv:2212.10496.
- Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
- Weaviate Docs. Hybrid search (BM25+Vector). [1].
- Qdrant Docs. Hybrid Queries. [2].
- Milvus Docs. Full‑Text Search / Hybrid Search. [3] / [4].
- LangChain Docs. MultiQueryRetriever. [5].
- Cohere Docs. Rerank — best practices. [6].
- LlamaIndex Docs. Routing (query routers/selectors). [7].
- Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR. arXiv:2210.03629.
- Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
- Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. (2024). [8].
- Microsoft Research. Project GraphRAG. (2024). [9].
- Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594.
- Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
- Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). [10].
- TruLens Docs. RAG Triad. [11].
- DeepEval (GitHub). The LLM Evaluation Framework. [12].
- LangChain Docs. RecursiveCharacterTextSplitter. [13].
- LlamaIndex Docs. HierarchicalNodeParser; Response Synthesis (Tree/Refine). [14]; [15].
Note
- ↑ 1.0 1.1 1.2 1.3 Lewis, P., Perez, E., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. NeurIPS. arXiv:2005.11401.
- ↑ Fan, W., Ding, Y., et al. (2024). A Survey on RAG Meeting LLMs: Towards Retrieval-Augmented Large Language Models. KDD. DOI:10.1145/3637528.3671470; arXiv:2405.06211.
- ↑ 3.0 3.1 3.2 LangChain Docs. MultiQueryRetriever. https://python.langchain.com/docs/how_to/MultiQueryRetriever/
- ↑ 4.0 4.1 Gao, L., Ma, X., Lin, J., Callan, J. (2023). Precise Zero‑Shot Dense Retrieval without Relevance Labels. ACL 2023. arXiv:2212.10496; ACL Anthology: 2023.acl‑long.99.
- ↑ 5.0 5.1 5.2 5.3 5.4 Weaviate Docs. Hybrid search (BM25+Vector). https://docs.weaviate.io/weaviate/concepts/search/hybrid-search
- ↑ 6.0 6.1 6.2 Qdrant Docs. Hybrid Queries. https://qdrant.tech/documentation/concepts/hybrid-queries/
- ↑ 7.0 7.1 7.2 Milvus Docs. Full‑Text Search и Hybrid Search. https://milvus.io/docs/full-text-search.md; https://milvus.io/docs/hybrid_search_with_milvus.md
- ↑ 8.0 8.1 8.2 8.3 8.4 Nogueira, R., Cho, K. (2019). Passage Re‑ranking with BERT. arXiv:1901.04085.
- ↑ 9.0 9.1 Cohere Docs. Rerank — best practices. https://docs.cohere.com/docs/reranking-best-practices
- ↑ 10.0 10.1 10.2 LlamaIndex Docs. Routing (query routers/selectors). https://docs.llamaindex.ai/en/stable/module_guides/querying/router/
- ↑ 11.0 11.1 Yao, S., et al. (2023). ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023. arXiv:2210.03629.
- ↑ 12.0 12.1 Nakano, R., et al. (2021). WebGPT: Browser‑assisted question‑answering with human feedback. arXiv:2112.09332.
- ↑ Microsoft Research Blog. GraphRAG: Unlocking LLM discovery on narrative private data. 2024. https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
- ↑ Microsoft Research. Project GraphRAG. https://www.microsoft.com/en-us/research/project/graphrag/
- ↑ Yu, S., et al. (2024). VisRAG: Vision‑based Retrieval‑augmented Generation on Multi‑modality Documents. arXiv:2410.10594; OpenReview: zG459X3Xge.
- ↑ 16.0 16.1 Sarthi, P., et al. (2024). RAPTOR: Recursive Abstractive Processing for Tree‑Organized Retrieval. arXiv:2401.18059.
- ↑ 17.0 17.1 LangChain Docs. RecursiveCharacterTextSplitter. https://python.langchain.com/docs/how_to/recursive_text_splitter/
- ↑ 18.0 18.1 LlamaIndex Docs. HierarchicalNodeParser и Tree Summarization. https://docs.llamaindex.ai/en/stable/api/llama_index.core.node_parser.HierarchicalNodeParser.html; https://docs.llamaindex.ai/en/stable/examples/low_level/response_synthesis/
- ↑ Es, S., et al. (2024). RAGAs: Automated Evaluation of Retrieval Augmented Generation. EACL (Demo). https://aclanthology.org/2024.eacl-demo.16/
- ↑ TruLens Docs. RAG Triad. https://www.trulens.org/getting_started/core_concepts/rag_triad/
- ↑ DeepEval (GitHub). https://github.com/confident-ai/deepeval