RAG Formation · Leçon · Ingénierie de la recherche
Recherche sémantique, recherche par mots-clés et recherche hybride
Associer identifiants SOP, acronymes, noms, dates et concepts au signal de recherche capable de les retrouver — vectoriel, plein texte, résumé ou graphe.
$ lesson --status
▸ course RAG Formation
▸ lesson 05 / 16
▸ phase Ingénierie de la recherche
▸ status Terminé
● build → measure → learnLeçon autonome
Apprenez la leçon complète et vérifiez votre compréhension ici.
Le contenu des 16 leçons de RAG Formation est complet. Cette page contient le contenu complet, les références locales et des exercices immédiats dans le navigateur.
Le gain concret de cette leçon
À la fin de cette leçon, vous aurez complété un tableau comparatif question par question et choisi une amélioration de la récupération réellement étayée par les preuves.
Regarder la vidéo
1 · Le modèle minimal utile
- Recherche vectorielle (sémantique) : convertit le texte en embeddings à virgule flottante (par ex. Qdrant, Pinecone) pour capturer la similarité en haute dimension, le contexte, le sens et les paraphrases plutôt que les mots exacts. Sa robustesse entre les langues dépend du modèle d’embeddings — ne le supposez pas, mesurez-la.
- Recherche plein texte (lexicale) : fait correspondre des chaînes de tokens littérales — identifiants exacts, noms, acronymes et nombres — à l’aide d’algorithmes comme BM25 et de la tolérance aux fautes de frappe (par ex. Meilisearch, Elasticsearch). Lorsque l’orthographe exacte porte le sens, c’est elle qui vous sauve. Remarque : les frontières entre moteurs évoluent — des moteurs comme Meilisearch savent aussi gérer nativement les embeddings vectoriels pour une recherche hybride unifiée.
- Récupération par graphe (relationnelle / structurelle) : parcourt dynamiquement des nœuds, des arêtes et des relations d’entités explicites (par ex. Neo4j, LightRAG). Ce n’est pas simplement « une autre façon de trouver un fragment » — c’est le seul signal structurel capable de tracer des connexions à plusieurs sauts (par ex. relier des faits répartis dans différents documents), ce que la recherche vectorielle et plein texte ne peuvent pas faire de façon fiable à elles seules.
- Récupération de résumé : un index séparé contenant un résumé vectorisé par document entier, et non par fragment. Il répond à « de quoi parle ce document », lorsqu’un seul fragment d’environ 500 tokens est trop étroit pour représenter l’ensemble.
- Union cumulative : pour cette expérience, une source est considérée comme trouvée dès qu’elle apparaît dans l’un des quatre signaux. Cela mesure la contribution à la récupération, pas l’exactitude de la réponse finale.
- Récupération hybride : dans ce système, « hybride » signifie que tous les signaux s’exécutent en parallèle et que leurs résultats formatés sont concaténés — sans fusion ni réordonnancement. Il n’y a ni normalisation de score ni fusion de rang réciproque entre les signaux ; la seule véritable fusion se produit à l’intérieur de LightRAG lui-même, entre ses propres passes d’entités, de relations et de vecteurs. Un moteur de réordonnancement existe dans le code mais n’est pas branché sur la récupération en production — ne présumez pas qu’« hybride » implique davantage de sophistication que « parallèle et concaténé ».
Lecture principale : recherche hybride de Qdrant — observez comment elle combine plusieurs représentations de recherche et pourquoi cette combinaison doit être évaluée plutôt que supposée efficace.
2 · Exécuter une expérience contrôlée
Réutilisez la même démonstration isolée et le même jeu d’évaluation que dans la leçon 4. Le mode récupération appelle directement /api/v1/search, sans évaluateur LLM dans la boucle, ce qui permet de mesurer proprement la récupération seule.
cd demo
python3 eval.py verify
python3 eval.py run --mode retrieval --workspace meridian_demo --tag lesson-05-experiment
Vous obtiendrez deux fichiers : un rapport agrégé et un rapport JSON question par question.
reports/lesson-05-experiment.md
reports/lesson-05-experiment.json
Pour chaque question examinée, regardez :
results[].retrieval.indexes.vector.allresults[].retrieval.indexes.fulltext.allresults[].retrieval.indexes.summary.allresults[].retrieval.indexes.graph.allresults[].retrieval.cumulative["vector+fulltext"].allresults[].retrieval.cumulative["vector+fulltext+summary"].allresults[].retrieval.cumulative["vector+fulltext+summary+graph"].all
Évaluez une correspondance à partir des métadonnées de source, et non d’une correspondance textuelle : un identifiant de document qui apparaît seulement dans le texte d’un autre document ne compte pas comme une récupération.
La colonne du graphe est approximative, et le rapport le précise lui-même : LightRAG renvoie une seule chaîne de contexte plate plutôt qu’une liste de documents, si bien qu’une référence compte comme un hit du graphe dès qu’elle apparaît n’importe où dans cette chaîne — ce qui peut provenir d’un renvoi croisé à l’intérieur d’un autre document. Considérez-le comme un signal réel, mais plus bruité. Il est rapporté séparément et n’est jamais fusionné silencieusement avec les trois autres.
3 · Compléter le tableau comparatif
Remplissez les cinq colonnes de résultats avec all, partial ou miss — utilisez partial lorsqu’une question portant sur plusieurs documents ne fait apparaître qu’une partie des sources attendues. Ajoutez ensuite, pour chaque ligne, une interprétation et une prochaine étape précise.
| ID de la question | Type de requête | Source attendue | Résultat vectoriel | Résultat plein texte | Résultat résumé | Résultat graphe | Union cumulative | Interprétation | Prochaine action |
|---|---|---|---|---|---|---|---|---|---|
| q21 | Reference lookup | PR-QA-MRD-010 | _____ | _____ | _____ | _____ | _____ | _____ | _____ |
| q24 | Reference lookup / revision | PR-QA-MRD-009 | _____ | _____ | _____ | _____ | _____ | _____ | _____ |
| q32 | Cross-lingual factual | PR-EXM-MRD-003 | _____ | _____ | _____ | _____ | _____ | _____ | _____ |
| q46 | Literal factual | PR-ACH-MRD-007 | _____ | _____ | _____ | _____ | _____ | _____ | _____ |
| q63 | Multi-hop | PR-CLI-MRD-013 + PR-QA-MRD-009 | _____ | _____ | _____ | _____ | _____ | _____ | _____ |
4 · Interpréter avant de modifier le code
Cas A : Pour q21, le vecteur renvoie miss, le plein texte renvoie all et l’union cumulative vaut all. Que pouvez-vous réellement en conclure ?
Cas B : Le vecteur et le plein texte renvoient tous deux all ; l’union n’ajoute donc aucune nouvelle source ici. Quelle est l’interprétation honnête ?
Cas C : Le résultat cumulatif vector+fulltext de q63 vaut all, mais la réponse finale reste erronée. Où chercher ensuite ?
Lien avec la mission
Un chatbot destiné à une entreprise réglementée doit réussir sur les deux tableaux : retrouver une procédure formulée avec précision et traiter une question de politique posée comme le ferait une personne réelle. Ce tableau transforme cet objectif de fiabilité en une décision de récupération concrète et traçable.
5 · Livrable et prochaine action
- Complétez les cinq lignes du tableau comparatif.
- Rédigez un paragraphe : quel signal a ajouté une source, pour quel type de requête et quelles preuves l’établissent ?
- Choisissez une prochaine action et nommez l’indicateur que vous relancerez pour vérifier son efficacité.
Prochaine étape : leçon 6 — segmentation et structure des documents. Conservez ce tableau : il constitue votre base de référence pour les prochaines expériences sur la segmentation et le traitement des requêtes.
Posez-moi toutes vos questions sur les champs du rapport, la correspondance des métadonnées, les catégories de requêtes ou toute ligne qui vous semble obscure. Je suis votre enseignant pour cette formation : c’est précisément mon rôle.