
Pourquoi votre RAG devrait être une bibliothèque, pas un moteur de recherche
Résumé exécutif
Constat : La similarity search (top-k) marche en démo mais échoue en production dès que les questions deviennent ambiguës, multi-hop, globales, ou qu’il faut arbitrer des contradictions.
Idée centrale : Un bon RAG doit se comporter comme une bibliothèque (index, catégories, navigation, niveaux d’abstraction), pas comme un moteur de recherche “plat” basé uniquement sur la proximité sémantique.
Implications : Il faut structurer le corpus (métadonnées, hiérarchies, relations) et adopter des stratégies adaptées au type de question, avec récupération progressive pour maîtriser coûts et qualité.
Panorama des options : Hierarchical indexing (niveaux), RAPTOR (arbre de résumés), GraphRAG (knowledge graph + communautés), Agentic RAG (agent-routeur).
Glossaire
- RAG (Retrieval-Augmented Generation)
- approche où un LLM génère des réponses à partir d’un contexte récupéré dans un corpus.
- Chunk
- fragment de document (souvent quelques paragraphes) indexé pour la recherche et injecté dans le contexte du LLM.
- Embedding
- représentation vectorielle d’un texte utilisée pour mesurer une proximité sémantique.
- Vector store
- base optimisée pour stocker des embeddings et faire des recherches de similarité (k-NN).
- Similarity search / top-k
- récupération des (k) éléments les “plus proches” dans l’espace des embeddings.
- Precision / recall
- métriques de retrieval : précision = part de résultats pertinents ; rappel = capacité à inclure les résultats pertinents.
- Multi-hop
- question nécessitant de chaîner plusieurs faits/relations (ex. entité → organisation → attribut).
- Reranking
- re-tri des candidats (souvent via cross-encoder) après un premier retrieval, pour améliorer la précision.
- Hybrid search
- combinaison de recherche lexicale (BM25/keywords) et de recherche vectorielle.
- Metadata filtering
- filtrage préalable/contraintes sur des attributs (date, source, domaine, type) avant ou pendant la recherche.
- Hierarchical indexing
- organisation du corpus par niveaux (résumé → sections → détails) pour naviguer du général au spécifique.
- RAPTOR
- méthode qui construit un arbre de résumés par clustering récursif, offrant plusieurs niveaux d’abstraction.
- Knowledge graph
- graphe d’entités et de relations permettant des traversées explicites (au lieu d’approximations par similarité).
- GraphRAG
- approche qui combine extraction d’entités/relations, clustering en communautés et résumés pour répondre aux questions globales et multi-hop.
- Agentic RAG
- orchestration par un agent qui choisit dynamiquement la stratégie de retrieval (filtres, recherche, graph traversal, etc.) selon la question.
- Récupération progressive
- stratégie consistant à récupérer d’abord un résumé/fiche, puis descendre au détail uniquement si nécessaire.
Le constat : la similarity search ne suffit pas
Vous avez un corpus, des embeddings, un vector store, un top-k à 5. Ça marche sur les démos. En production, ça casse.
Le problème n’est pas l’implémentation — c’est le paradigme. La similarity search repose sur une hypothèse implicite : le chunk le plus proche sémantiquement est le plus pertinent. C’est souvent faux.
Cinq échecs récurrents en production
| Problème | Ce qui se passe | Exemple |
|---|---|---|
| Precision faible | Le top-k remonte des chunks sémantiquement proches mais pas pertinents — bruit, ambiguïté, faux positifs de surface | ”traitement vestibulaire” matche sur “traitement des eaux” parce que “traitement” domine le vecteur |
| Multi-hop impossible | Les questions qui chaînent plusieurs faits échouent systématiquement | ”Quel est le diplôme du CEO de l’entreprise qui fabrique le F-150 ?” — aucun chunk isolé ne contient la réponse complète |
| Pas d’agrégation | Impossible de répondre à des questions globales sur le corpus | ”Quels sont les thèmes principaux ?”, “Combien de publications traitent de GVS ?” |
| Conflits non résolus | Deux chunks contradictoires, aucun mécanisme pour trancher | CEO de Twitter en 2022 vs 2023 — lequel est “le plus similaire” ? Les deux. |
| Embeddings ≠ sens | Les vecteurs capturent la proximité sémantique, pas la logique métier | Les relations entre entités, la temporalité, la hiérarchie d’un domaine — rien de tout ça n’est dans un embedding |
Le point commun : on demande à un outil de similarité de faire un travail de compréhension structurelle. C’est comme demander à un correcteur orthographique de vérifier la logique d’un argument.
Les améliorations incrémentales : reranking et hybrid search
Deux techniques sont devenues des réflexes pour améliorer le retrieval. Elles aident — mais elles ne changent pas le paradigme.
Le reranking ajoute un cross-encoder après le top-k pour mieux trier les résultats. La precision s’améliore, parfois significativement. Mais le problème fondamental reste : si le bon chunk n’est pas dans le lot remonté par la recherche initiale, aucun reranker ne le fera apparaître. On optimise le tri, pas la couverture.
La hybrid search combine recherche lexicale (BM25/keywords) et recherche vectorielle. Le gain est réel — environ 20% d’amélioration du recall dans les benchmarks courants. Mais on reste dans le même paradigme : flat search → tri → espérer que le bon chunk est dans le lot. C’est un quick win, pas un changement d’architecture.
Ces deux techniques sont utiles. Elles devraient être le minimum. Mais les traiter comme la solution finale, c’est comme ajouter un meilleur moteur à une voiture dont le problème est la direction.
L’analogie : bibliothèque vs moteur de recherche
Pour comprendre le changement nécessaire, prenons une analogie simple.
Un moteur de recherche, c’est : tu tapes des mots, tu reçois des résultats “proches”. Pas de structure, pas de navigation, pas de contexte. C’est du matching statistique.
Une bibliothèque, c’est : un index, des catégories, des rayons, des fiches, des cotes Dewey, des renvois entre sujets. Le bibliothécaire ne cherche pas par similarité — il navigue dans une structure organisée. Il sait que la stimulation vestibulaire est au rayon neurosciences, sous-catégorie neurophysiologie, et que les publications récentes sont classées par date.
Le RAG actuel, c’est quelqu’un qui entre dans une bibliothèque, ignore les rayons et les index, et feuillette les livres au hasard en cherchant des phrases qui “ressemblent” à sa question.
Le changement de paradigme tient en une phrase : passer de “chercher le plus proche” à “naviguer vers le plus pertinent”.
La donnée n’est pas un tas de vecteurs — c’est un corpus organisable. La structure coûte à construire. Mais elle rend le retrieval fiable, explicable, et auditable.
De quoi a-t-on réellement besoin ?
Avant de choisir un outil ou un framework, il faut poser les besoins. Six capacités définissent un retrieval robuste.
| # | Besoin | Ce que ça permet | Ce que le flat search ne fait pas |
|---|---|---|---|
| 1 | Navigation par niveaux d’abstraction | Zoomer du macro (thèmes) au méso (résumés) au micro (chunks) | Le top-k ne connaît qu’un seul niveau de granularité |
| 2 | Filtrage par metadata | Contraindre la recherche par date, source, domaine, type, autorité | ”Le plus similaire” ≠ “le plus similaire dans cette catégorie, après cette date” |
| 3 | Relations entre entités | Traverser des liens : auteur → institution → publications → thèmes | Chaque lien multi-hop nécessite un embedding match — fragile et souvent impossible |
| 4 | Questions globales | ”Quels thèmes principaux ?”, “Combien de publications sur X ?” | Un flat search est structurellement incapable d’agréger |
| 5 | Stratégie adaptative | La méthode de recherche s’adapte au type de question | Factuel ≠ synthèse ≠ exploration — un seul pipeline ne couvre pas tout |
| 6 | Récupération progressive | D’abord un résumé, puis le détail si pertinent | Envoyer 15 chunks complets sature le context window, coûte cher, et noie le signal |
Le besoin #6 mérite qu’on s’y arrête. En production, le coût par requête et la qualité de réponse dépendent directement du volume de tokens envoyés au LLM. La récupération progressive — récupérer d’abord une fiche, évaluer la pertinence, puis aller chercher le détail — ce n’est pas un nice-to-have. C’est ce qui rend le système viable. Le bibliothécaire ne te donne pas 15 livres entiers. Il te donne une fiche. Tu décides si tu veux le livre.
Le fil rouge : un corpus de publications scientifiques
Pour rendre ces besoins concrets, prenons un scénario réaliste : un corpus de 500 publications scientifiques sur la stimulation vestibulaire galvanique (GVS), couvrant neurophysiologie, applications cliniques, et réalité virtuelle.
Voici les questions que des chercheurs posent réellement — et pourquoi le flat search échoue sur chacune :
| Question utilisateur | Besoin principal | Pourquoi le flat search échoue |
|---|---|---|
| ”Quels sont les grands thèmes de recherche en GVS ?” | #4 Agrégation globale | Aucun chunk individuel ne contient “les thèmes principaux" |
| "Résume les travaux du labo de Fitzpatrick sur le GVS postural” | #3 Relations + #1 Abstraction | Il faut lier auteur → labo → publications → résumé |
| ”Quelles publications post-2022 traitent du GVS en VR ?” | #2 Metadata + similarité | Sans filtre temporel, le top-k mélange des articles de 2005 et 2023 |
| ”Compare les protocoles de stimulation sinusoïdale vs noise” | #5 Stratégie adaptative | Une question de comparaison ≠ un factual lookup — il faut récupérer des sources structurées des deux côtés |
| ”Donne-moi un aperçu de cet article, puis les détails de la section méthode” | #6 Récupération progressive | Envoyer le document entier gaspille des tokens ; ne récupérer que les chunks “méthode” manque le contexte |
Chaque solution de la section suivante sera illustrée par sa capacité à répondre à l’une de ces questions.
Les solutions documentées
Quatre approches, chacune ciblant des besoins différents. Aucune n’est universelle — le choix dépend de la complexité réelle des requêtes.
Hierarchical Indexing — l’index à niveaux
Le principe est simple : organiser le corpus en niveaux, comme une table des matières. Résumés de documents → sections → chunks détaillés. Le retrieval navigue du général au spécifique.
Sur notre fil rouge, quand un chercheur demande un aperçu puis les détails de la méthode, le système retourne d’abord le résumé du document (niveau macro), évalue la pertinence, puis descend au chunk “méthode” (niveau micro). Pas de gaspillage de tokens, pas de bruit.
Besoins couverts : #1 Navigation par abstraction, #6 Récupération progressive.
Le trade-off est frontal : la hiérarchie doit être construite en amont, et elle doit refléter la structure réelle du contenu. Un mauvais découpage hiérarchique produit des résultats pires que du flat search.
RAPTOR — l’arbre récursif de résumés
RAPTOR pousse l’idée plus loin. Au lieu d’une hiérarchie imposée, il construit un arbre bottom-up : les chunks sont clusterisés, chaque cluster est résumé par un LLM, les résumés sont eux-mêmes clusterisés et résumés, et ainsi de suite. Le résultat est un arbre navigable où chaque nœud offre un niveau d’abstraction différent.
Sur notre corpus GVS, la question “Quels sont les grands thèmes de recherche ?” trouve sa réponse dans les nœuds supérieurs de l’arbre — là où les résumés capturent les macro-tendances du corpus sans qu’aucun chunk individuel n’ait besoin de contenir cette information.
Besoins couverts : #1 Navigation par abstraction, #4 Questions globales, #6 Récupération progressive.
Le coût est significatif : clustering + summarization par LLM à chaque niveau. La qualité dépend directement de la qualité des résumés générés. Un mauvais résumé au niveau intermédiaire pollue tout ce qui est au-dessus.
GraphRAG — knowledge graph + communautés
GraphRAG change de représentation. Au lieu de traiter le corpus comme une collection de chunks, il en extrait des entités et des relations pour construire un knowledge graph. Puis il applique un clustering hiérarchique (algorithme de Leiden) pour identifier des communautés d’entités et génère des résumés par communauté.
C’est la solution qui répond le mieux aux questions multi-hop. “Résume les travaux du labo de Fitzpatrick sur le GVS postural” nécessite de traverser un graphe : Fitzpatrick → University of New South Wales → publications → filtrer par GVS postural. Aucune recherche vectorielle ne peut faire ce parcours — un graph traversal le fait nativement.
Besoins couverts : #3 Relations entre entités, #4 Questions globales, #1 Navigation par abstraction.
Le trade-off est lourd : coût d’indexation élevé (extraction d’entités par LLM sur tout le corpus), complexité de maintenance, et — point souvent ignoré — GraphRAG peut sous-performer le vanilla RAG sur des questions simples et factuelles. Le overhead n’est justifié que si les requêtes sont réellement complexes.
Agentic RAG — l’agent-bibliothécaire
L’Agentic RAG ne propose pas une nouvelle structure de données — il ajoute une couche de décision. Un agent analyse la question, détermine la stratégie de recherche optimale, et orchestre les outils disponibles : vector search, filtres metadata, SQL, graph traversal, ou une combinaison.
C’est le bibliothécaire. Face à “Quelles publications post-2022 traitent du GVS en VR ?”, il ne lance pas un vector search brut — il applique d’abord un filtre temporel (date > 2022), puis un filtre thématique (domaine = VR), puis une recherche sémantique dans le sous-ensemble filtré.
Besoins couverts : #5 Stratégie adaptative — et potentiellement tous les autres, par orchestration.
Le trade-off : complexité d’implémentation, latence multi-step, et dépendance critique à la qualité du routing. Si l’agent choisit mal sa stratégie, le résultat est pire qu’un simple top-k.
Comparatif des solutions
| Solution | Besoins couverts | Coût d’indexation | Complexité | Meilleur cas d’usage |
|---|---|---|---|---|
| Hierarchical Indexing | #1, #6 | Moyen | Faible | Corpus bien structuré, questions factuelles avec besoin de zoom progressif |
| RAPTOR | #1, #4, #6 | Élevé (LLM) | Moyen | Corpus non structuré, besoin de résumés multi-niveaux et de questions globales |
| GraphRAG | #1, #3, #4 | Très élevé (LLM) | Élevé | Requêtes multi-hop, relations entre entités, corpus narratif ou technique dense |
| Agentic RAG | #5 (+ tous par orchestration) | Variable | Élevé | Requêtes variées nécessitant des stratégies hétérogènes |
En pratique : le custom reste souvent le meilleur choix
Les frameworks couvrent des patterns génériques
RAPTOR, GraphRAG, LlamaIndex proposent des architectures prêtes à l’emploi. Elles sont bien documentées, testées, et fournissent un bon point de départ. Mais chaque domaine a sa propre structure de connaissance. La hiérarchie d’un corpus médical n’a rien à voir avec celle d’une base réglementaire ou d’un support client.
La synthèse décisionnelle
Comment choisir entre ces approches ? Voici une matrice de décision basée sur la nature de votre corpus et de vos requêtes.
| Votre situation | Architecture recommandée | Pourquoi |
|---|---|---|
| Corpus documentaire avec structure claire (rapports, réglementations) | Hierarchical Indexing + metadata filtering | Alignement naturel sur la table des matières existante |
| Corpus scientifique dense, questions de synthèse fréquentes | RAPTOR | Capacité à répondre “Qu’est-ce qu’on sait sur X ?” sans navigation manuelle |
| Données fortement relationnelles (entités, collaborations, causalités) | GraphRAG | Traversée des relations Auteur-Protocole-Résultat indispensable |
| Requêtes hétérogènes imprévisibles (tantôt SQL, tantôt sémantique) | Agentic RAG | Flexibilité maximale, au prix de la latence |
| Faible volume (<1000 docs), requêtes simples | Hybrid Search + Reranking | Ne pas sur-ingénier. La complexité doit être proportionnée au besoin |
Construire sa propre couche
Le vrai travail, ce n’est pas le choix de l’outil — c’est le design de l’index. Comprendre la structure du domaine, identifier les relations clés, déterminer les niveaux d’abstraction pertinents. Construire une couche de structuration adaptée donne souvent de meilleurs résultats qu’un framework clé en main appliqué tel quel.
L’avantage du custom : contrôle total sur le coût de récupération, la granularité, et la logique de navigation. L’inconvénient : il faut savoir ce qu’on fait, et être prêt à investir le temps de conception.
Conclusion
Ce qui change
Le passage de “j’embed tout et je cherche le top-k” à “je structure, j’indexe, je catégorise, et un agent navigue” n’est pas une optimisation — c’est un changement de paradigme. La donnée structurée n’est pas un overhead. C’est un investissement. La récupération progressive n’est pas un nice-to-have. C’est ce qui rend le système viable en production.
La question à se poser
Comment un expert humain chercherait dans ce corpus ?
Si la réponse est “il feuillette au hasard et prend ce qui ressemble” — vous avez un problème. Si la réponse est “il consulte l’index, identifie la catégorie, lit le résumé, puis va au détail” — alors construisez ça.
Sources
| Référence | Type | URL |
|---|---|---|
| Seven Failure Points When Engineering a RAG System (2024) | Paper | arxiv.org |
| RAPTOR — Sarthi et al. (Stanford, 2024) | Paper | arxiv.org |
| GraphRAG — Edge et al. (Microsoft, 2024) | Paper | arxiv.org |
| IBM — RAG Problems Persist | Article | ibm.com |
| RAG Is a Data Engineering Problem | Article | substack.com |
| VectorHub — Hybrid Search & Reranking | Article | superlinked.com |
| 5 RAG Failures + Knowledge Graphs | Article | freecodecamp.org |
| PIXION — Hierarchical Index Retrieval | Article | pixion.co |
| NirDiamant/RAG_Techniques | Repo | github.com |
| Beyond Vector Search — Next-Gen RAG | Article | machinelearningmastery.com |
| LlamaIndex — Structured Hierarchical Retrieval | Doc | llamaindex.ai |
| Microsoft GraphRAG | Repo | github.com |
| RAPTOR | Repo | github.com |
AiBrain