Leçon 1 — Le cas d'usage et l'architecture

Les questions relationnelles

6 min de lecture

Les questions relationnelles

Qu'est-ce qu'un saut ?

Un saut (hop) est le passage d'une entité à une autre par une relation. Une question à 1 saut se répond avec un seul fait ; une question à 3 sauts exige d'enchaîner trois faits, souvent écrits dans trois documents différents.

SautsQuestionFaits nécessaires
1Qui dirige le projet Héron ?Sofia Brenet dirige Héron [d01]
2À quel groupe appartient le fournisseur des capteurs du projet Héron ?Héron ← capteurs d'Ilex Capteurs [d02] ; Ilex filiale de Pyralis Énergie [d03]
3Qui dirige les projets qui intègrent les cartes NC-7 ?NC-7 dans Lynx et Altaïr [d08] ; Lina Ferraz dirige Lynx [d05] ; Maëlle Ostin dirige Altaïr [d09]
flowchart LR
  NC["NC-7"] -->|"intégrée dans [d08]"| LY["Lynx"]
  NC -->|"intégrée dans [d08]"| AL["Altaïr"]
  LF["Lina Ferraz"] -->|"dirige [d05]"| LY
  MO["Maëlle Ostin"] -->|"dirige [d09]"| AL

Pourquoi le RAG vectoriel échoue

La recherche vectorielle compare l'embedding de la question à celui de chaque document. Le document d08 (« les cartes NC-7 sont intégrées dans Lynx et Altaïr ») ressemble beaucoup à la question ; d05 (« Lina Ferraz dirige le projet Lynx… ») beaucoup moins : il ne parle ni de NC-7, ni de cartes. Il n'est donc pas dans le top 4, et le modèle ne peut pas faire le second saut.

« À qui rend compte la supérieure de Karim Delaunoy ? » Combien de sauts, et lesquels ?

Le corpus et les questions

  • corpus.jsonl : 24 documents courts (1 à 2 phrases). 18 portent les faits utiles, éparpillés : chaque document mentionne 2 ou 3 entités. 6 sont des distracteurs (autre banc d'essai, autre retard de livraison, réunions mensuelles) qui ressemblent aux questions sans y répondre.
  • questions.json : 15 questions, 3 à 1 saut, 9 à 2 sauts, 3 à 3 sauts (le nombre de faits à enchaîner), chacune avec les éléments attendus dans la réponse.
files/questions.json
{"question": "Qui dirige les projets qui intègrent les cartes NC-7 ?", "expected": ["Lina Ferraz", "Maëlle Ostin"], "hops": 3}

Les questions à 1 saut sont des témoins : le GraphRAG ne doit pas faire moins bien que le RAG vectoriel là où ce dernier excelle.

L'architecture du lab

sequenceDiagram
  participant I as Indexation (une fois)
  participant G as Gemini
  participant Q as Question
  I->>G: 4 lots de 6 documents → entités + relations (JSON)
  I->>I: graphe networkx, communautés Louvain
  I->>G: 1 appel → résumés des 5 communautés
  Q->>G: repérage des entités citées (modèle léger)
  Q->>Q: faits à 2 sauts + résumé de communauté
  Q->>G: réponse avec citations [doc_id]
FamilleCe qu'elle faitCe lab
Microsoft GraphRAGcommunautés hiérarchiques, résumés à plusieurs niveaux, recherche « globale »une seule couche de communautés, résumées en 1 appel
LightRAGrecherche « locale » (entités) et « globale » (relations), index vectoriel des entitésrecherche locale par voisinage, globale par résumés
EdgeQuakeLightRAG en Rust sur PostgreSQL, plusieurs modes de requêtevoir la fiche EdgeQuake

Qu'apporte un résumé de communauté par rapport aux faits du voisinage ?

Résultat obtenu

Exécution réelle du 2026-10-15 sur la question à 3 sauts « Par quels intermédiaires Sofia Brenet est-elle liée à Pyralis Énergie ? » :

$ python graphrag.py "Par quels intermédiaires Sofia Brenet est-elle liée à Pyralis Énergie ?"
Graphe : 27 nœuds, 35 arêtes, 5 communautés
[graphe] entités=['sofia brenet', 'pyralis energie']
  Sofia Brenet est liée à Pyralis Énergie en dirigeant le projet Héron [d01], qui s'appuie sur des capteurs de
  particules [d02] fournis par Ilex Capteurs [d02], elle-même filiale de Pyralis Énergie [d03]. ...
[vecteurs] documents=['d03', 'd16', 'd01', 'd04']
  Les documents fournis ne permettent pas d'établir de lien ni de déterminer d'intermédiaires entre Sofia Brenet
  et Pyralis Énergie [d01, d03, d04, d16]. L'information est donc manquante.

Le RAG vectoriel avait d01 et d03 sous les yeux, mais pas d02, le maillon central : le chemin était coupé.

Exercice : tracer les chemins à la main

À partir du corpus, écrivez la chaîne de faits (avec les identifiants de documents) qui répond à « Quel prestataire relie le site du projet Lynx à celui du projet Altaïr ? ».

Voir la solution
  1. Lynx est installé sur le site de Brest [d05].
  2. Altaïr est basé sur le site de Metz [d09].
  3. Tessera Logistique assure le transport entre Brest et Metz [d11].

Réponse : Tessera Logistique. Trois documents, dont aucun ne contient à la fois « Lynx », « Altaïr » et « Tessera ». C'est exactement le cas où le RAG vectoriel a échoué dans l'évaluation (il a récupéré d05 et d09, mais pas d11).

Je sais faire

  • Compter les sauts nécessaires pour répondre à une question
  • Expliquer pourquoi la similarité vectorielle ne retrouve pas les maillons intermédiaires
  • Décrire les étapes d'indexation et de réponse d'un GraphRAG
  • Distinguer recherche locale (voisinage d'entités) et recherche globale (résumés de communautés)
Suivant