Patterns-RAG
Les patterns RAG (de l'anglais RAG Patterns) sont un ensemble d'approches architecturales et méthodologiques pour la construction de systèmes de Retrieval-Augmented Generation (RAG). Ces patterns visent à résoudre les problèmes fondamentaux des grands modèles de langage (LLM), tels que les hallucinations, l'obsolescence des connaissances et le manque de spécificité de domaine, en intégrant les LLM avec des sources de données externes et dynamiquement accessibles[1]. L'évolution du RAG est passée de simples pipelines linéaires à des systèmes modulaires et agentifs complexes[2].
Principaux patterns RAG
Avec le développement de la technologie, de nombreux patterns RAG ont émergé, chacun résolvant des problèmes spécifiques et présentant ses propres compromis entre qualité, vitesse et coût.
- Classic RAG — Approche de base où la requête de l'utilisateur est vectorisée pour rechercher des fragments pertinents (chunks) dans une base de données vectorielle ; les chunks trouvés sont fournis au LLM avec la question pour générer une réponse[1].
- Multi-Query RAG — Le LLM génère plusieurs variantes reformulées/affinées de la requête initiale ; la recherche est effectuée sur toutes les variantes, et les résultats sont fusionnés, ce qui augmente le rappel (recall)[3].
- HyDE (Hypothetical Document Expansion) — Vise à surmonter le « fossé sémantique » entre une requête courte et des documents longs. Le LLM génère d'abord un document-réponse « hypothétique », puis son embedding est utilisé pour la recherche, ce qui améliore souvent la qualité de la récupération[4].
- Hybrid Retrieval — Combinaison de la recherche sémantique (vectorielle) et lexicale (BM25). Les schémas hybrides sont devenus un standard pour les systèmes en production : la recherche vectorielle couvre les correspondances sémantiques, tandis que BM25 trouve les termes, ID ou acronymes exacts ; les résultats sont combinés par fusion[5][6][7].
- Re-ranking — Processus en deux étapes : un retriever rapide renvoie un ensemble de candidats (par exemple, top 100), puis un cross-encoder (ou un autre reranker) recalcule la pertinence et sélectionne les meilleurs (par exemple, top 5) pour le LLM[8][9].
- Query Routing — Dans les systèmes avec plusieurs sources de données hétérogènes (différents index/bases de données/API), la requête est dirigée vers la meilleure source à l'aide d'un routeur (un sélecteur LLM ou un classifieur) ; inclut des stratégies de fallback[10].
- Agentic/Web RAG — Le LLM agit comme un agent : il décompose les questions complexes, planifie des itérations et utilise des outils (recherche vectorielle, recherche web) avec une boucle de rétroaction. Une implémentation typique est le paradigme ReAct[11] ; pour la collecte orientée web et la citation obligatoire, voir WebGPT[12].
Paradigmes connexes et émergents
- GraphRAG (RAG sur Graphe) — Utilise un graphe de connaissances comme source et mécanisme de sélection de contexte ; la recherche s'effectue sur la structure des relations entre les entités et sur le texte, améliorant l'interprétabilité et la qualité pour les questions multi-sauts (multi-hop)[13][14].
- MM-RAG (RAG Multimodal) — Travaille avec des sources textuelles et visuelles (scans/schémas/tableaux). Exemple : VisRAG démontre une récupération et une génération orientées VLM sur des documents multimodaux[15].
- Packaging & Context Handling (Gestion du Contexte) — Méthodes d'intégration des chunks trouvés dans le prompt : Stuff, Map-Reduce, Refine, Tree-of-Chunks (RAPTOR)[16].
Tableau comparatif des patterns
| Pattern | Quand l'utiliser | Impact sur la qualité | Coût / Latence | Risques et limitations |
|---|---|---|---|---|
| Classic RAG | PoC et Q&A simples sur une base homogène | Niveau de base ; dépend fortement des embeddings[1] | Faible | Sensibilité à la formulation ; risque de contexte non pertinent |
| Hybrid Retrieval | Dans la plupart des scénarios de production ; beaucoup de codes/acronymes/ID | Augmente le rappel ; couvre les termes exacts[5][6][7] | Faible/Moyen | Réglage des poids de fusion ; deux index |
| Re-ranking | Critique lorsque la haute précision est importante | Gain significatif de précision sur le top-k[8][9] | Moyen/Élevé | Latence/coût supplémentaire |
| Multi-Query | Requêtes courtes/multi-aspects | Augmente le rappel (recall)[3] | Moyen | Reformulations redondantes/bruyantes |
| HyDE | Requêtes courtes/ambiguës avec un grand « fossé sémantique » | Améliore la qualité de la récupération zero-shot[4] | Moyen | Dépend de la qualité du texte « hypothétique » |
| Query Routing | Plusieurs sources (base de documents, SQL, API, web) | Augmente la pertinence en choisissant la bonne source[10] | Moyen | Erreur de routage = échec de la recherche |
| Agentic/Web RAG | Requêtes complexes, exploratoires, multi-étapes | Résout des problèmes au-delà du pipeline linéaire[11][12] | Élevé | Complexité, risque de boucle infinie ; nécessite des garde-fous (guardrails) |
Implémentation pratique et architecture
Étapes de mise en œuvre
- Proof of Concept (PoC) : Commencer avec le Classic RAG sur un ensemble de données limité mais représentatif pour vérifier la qualité des embeddings et de la récupération de base[1].
- Minimum Viable Product (MVP) : Implémenter le Hybrid Retrieval et le Re-ranking comme le meilleur rapport « effort/effet »[5][8].
- Production : Ajouter des transformations de requêtes (HyDE, Multi-Query) et, si nécessaire, le Query Routing ; configurer l'observabilité (journalisation de la récupération/reclassement/réponses) et les tests A/B[3][10].
Composants clés
- Chunking : L'un des facteurs les plus critiques pour la qualité. Une taille fixe naïve rompt souvent les unités sémantiques. Les segmenteurs structurés (basés sur le balisage) ou récursifs (paragraphe → phrase → mot) sont recommandés[17][18].
- Embeddings et métadonnées : Stocker avec chaque chunk l'ID du document, la page/section, le titre, les dates ; ceci est nécessaire pour le filtrage et la citation correcte des sources.
- Récupération hybride et reclassement : Utiliser BM25+vecteur avec fusion (ou RRF), puis un cross-encoder pour reclasser un petit pool de candidats[5][6][8].
- Gestion du contexte : Choisir Map-Reduce, Refine ou Tree-of-Chunks pour les corpus volumineux[16][18].
Erreurs courantes (anti-patterns)
- Recherche vectorielle uniquement sans BM25 → échecs sur les codes/ID/acronymes[5][7].
- Chunks trop grands/petits → perte de contexte ou « dilution » de l'embedding[17].
- Absence de re-ranking en production → le LLM reçoit un contexte bruité[8].
- Manque d'observabilité et de traçage des sources → impossible d'analyser les causes d'erreur (voir l'évaluation RAG).
Évaluation de la qualité et métriques
L'évaluation est effectuée au niveau de la récupération (hors ligne) et de bout en bout (génération).
Métriques du retriever
- Hit Rate, Recall@k, MRR — Couverture et position des documents pertinents.
- Context Precision & Recall — Mesure à quel point le contexte récupéré est exempt de « bruit » et couvre toutes les informations nécessaires (implémenté dans RAGAS)[19].
Métriques du générateur (end-to-end)
- Faithfulness / Groundedness — Conformité de la réponse au contexte fourni.
- Answer Relevancy (Pertinence de la réponse) — Conformité à la question initiale.
Pour l'automatisation de ces métriques, on utilise des frameworks open source : RAGAS, TruLens (RAG triad : pertinence du contexte, fidélité au contexte, pertinence de la réponse), DeepEval[20][21].
Voir aussi
- Retrieval-Augmented Generation (RAG)
- Bases de données vectorielles
- Embedding
- Agent IA
- GraphRAG
- MM-RAG
- Évaluation et benchmarks des LLM
Références
- 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].
Références
- ↑ 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 et 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