Évaluer le RAG
Mesurer la qualité (fidélité, pertinence, précision et rappel du contexte), l'étanchéité des permissions et la latence, sur un jeu de test par dossier fictif, et boucler sur l'amélioration.
L'essentiel
- Sans jeu de test, chaque choix de la section RAG (parseur, taille de chunk, modèle d'embeddings, reranker, top-k, base) reste une opinion. Le jeu de test est le premier livrable, avant tout réglage.
- Trois familles de mesures : qualité (fidélité, pertinence de la réponse, précision et rappel du contexte), sécurité (aucune fuite entre dossiers, testée mécaniquement), performance (latence de recherche, TTFT, débit sous 1 à 3 utilisateurs).
- Outils : Ragas, DeepEval, TruLens, avec un LLM juge local (jamais un service externe sur des documents de cabinet, même fictifs par habitude).
- Le corpus est fictif mais réaliste : dossiers A à E, pièces variées (scans, mails, tableaux), canaris uniques par dossier pour détecter les fuites.
- La boucle : mesurer, changer une seule chose, remesurer, consigner dans les expérimentations et les benchmarks.
Métriques de qualité
| Métrique | Question posée | Ragas 1 | DeepEval 2 | TruLens 3 |
|---|---|---|---|---|
| Fidélité (faithfulness, groundedness) | la réponse est-elle entièrement soutenue par les passages fournis ? | Faithfulness | Faithfulness : « whether the LLM's output factually aligns with the contents of your RAG's retrieval context » | Groundedness |
| Pertinence de la réponse | répond-elle à la question posée ? | Response Relevancy | Answer Relevancy | Answer Relevance |
| Précision du contexte | les passages récupérés sont-ils utiles, et bien classés ? | Context Precision | Contextual Precision | Context Relevance |
| Rappel du contexte | les passages nécessaires ont-ils tous été récupérés ? | Context Recall | Contextual Recall | — |
| Sensibilité au bruit | un passage hors sujet fait-il dériver la réponse ? | Noise Sensitivity | — | — |
| Exactitude des citations | chaque citation soutient-elle la phrase qui la porte ? | — (à construire) | — (à construire) | — |
La dernière ligne est la plus importante pour un avocat et la moins outillée : une étude mesure « up to 57% of citations being post-rationalized » 4. On la mesure à la main sur un échantillon (l'avocat relit vingt réponses) et automatiquement par recouvrement lexical entre phrase et passage cité.
Métriques de recherche pure, sans LLM, à calculer sur les chunks : recall@k et MRR (le bon chunk est-il dans les k premiers, à quel rang). Elles permettent de comparer embeddings, chunking et rerankers vite et sans juge.
Jeu de test à constituer
Corpus fictif
Cinq dossiers (A à E) et une zone administrative, reproduisant les accès du cas de référence (associés : tout ; avocat A : A, B, C ; avocat B : D, E ; secrétariat : administratif). Chaque dossier contient 20 à 50 pièces de types variés : contrats (Word et PDF natif), courriers scannés (PDF image, qualités variables), mails (.eml, .msg, un .pst), tableaux (Excel, décomptes), jugements (PDF longs), photos de pièces. Les noms, montants, dates et faits sont inventés ; aucun document réel n'entre dans le corpus.
Canaris
Chaque dossier contient des canaris : chaînes uniques et improbables (un nom de société inventé, un montant à trois décimales, une phrase codée) placées dans des pièces de types différents (un dans un scan, un dans un mail, un dans un tableau). Ils servent au test de fuite : si le canari du dossier D apparaît dans une réponse ou dans les chunks récupérés pour l'avocat A, le test échoue.
Questions
Par dossier, 20 à 40 questions avec réponse attendue et passages de référence (identifiants de chunks), réparties en :
- factuelles (« quel est le montant de la clause pénale du contrat X ? ») ;
- de localisation (« dans quelle pièce figure la mise en demeure du 12 mars ? ») ;
- de synthèse (« résume les échanges avec la partie adverse sur la livraison ») ;
- multi-pièces (« la date du courrier correspond-elle à celle indiquée dans le tableau ? ») ;
- pièges (« que dit le dossier D sur… » posée par l'avocat A : la bonne réponse est l'absence de réponse) ;
- hors corpus (« quel est l'article du code applicable ? » : le système doit dire que ce n'est pas dans les documents).
Les questions sont écrites par une personne connaissant le métier ; le jeu est versionné dans le dépôt de la Box, avec le corpus.
Tests de fuite de permissions
Compléments : test de révocation (retirer un droit, vérifier que la requête suivante ne renvoie plus rien, cf. « Access revocation is ineffective for RAG content » dans la CVE-2026-44560 5) ; test de suppression (supprimer une pièce, vérifier la disparition de ses chunks dans le délai annoncé) ; test de déplacement (déplacer une pièce du dossier A au dossier D, vérifier le changement d'ACL) ; test des liens de citation (un lien vers une pièce hors portée doit être refusé par la visionneuse).
Mesures de latence et de charge
| Mesure | Comment | Cible provisoire (hypothèse) |
|---|---|---|
| Latence de recherche filtrée (vecteurs + BM25 + fusion) | percentile 95 sur les questions du jeu, par utilisateur de test | moins de 200 ms |
| Rappel filtré vs non filtré | recall@20 pour un utilisateur à 10 % de portée, contre un associé ; problème documenté par pgvector 6 | au moins 90 % du rappel non filtré |
| Latence du reranker | 40 candidats, CPU et GPU | moins de 500 ms |
| TTFT complet | de la question au premier token, contexte 6 000 à 8 000 tokens | à mesurer sur la machine candidate (benchmarks) |
| Débit sous charge | 1, 2, 3 utilisateurs simultanés posant des questions RAG | voir multi-utilisateurs |
| Durée d'ingestion | pages par minute (OCR, parsing, embeddings) sur CPU, puis GPU | à mesurer |
| Délai de propagation ACL | de la modification source à l'effet sur la recherche | à mesurer et afficher |
Ces cibles sont des points de départ, pas des engagements ; elles seront révisées après les premières mesures et fixées dans le POC.
Boucle d'amélioration
- Figer le jeu de test (corpus, questions, canaris) et sa version.
- Mesurer la configuration de référence (Docling, chunk hybride 400 à 800, bge-m3, pgvector, RRF k = 60, bge-reranker, top-k 8) : recall@k, MRR, fidélité, latences, test de fuite.
- Changer une variable (par exemple le modèle d'embeddings), remesurer, consigner dans une fiche d'expérimentation avec hypothèse, procédure, résultat, conclusion.
- Collecter en production : signalements « citation fausse » et « réponse incomplète » par les utilisateurs, ajoutés au jeu de test après anonymisation ; requêtes à portée vide (candidates au refus explicite).
- Rejouer tout le jeu à chaque mise à jour de brique (interface, base, modèle) avant bascule ; le test de fuite est bloquant, les métriques de qualité tolèrent une régression bornée à définir.
Questions ouvertes
- Q-001Combien d'utilisateurs simultanés la Box peut-elle réellement servir ?HauteOuverte
- Q-003Quelle quantification retenir pour le modèle principal ?MoyenneOuverte
- Q-008Vulkan (RADV) ou ROCm (HIP) pour llama.cpp sur Strix Halo ?HauteOuverte
- Q-009Quel modèle principal pour le cabinet d'avocats ?HauteOuverte
Ce qu'il reste à tester
- Comparer les modèles d'embeddings sur du français juridiqueSur des questions juridiques en français, bge-m3 et multilingual-e5-large atteignent un recall@10 comparable ; le reranker bge-reranker-v2-m3 apporte un gain de MRR supérieur à celui du changement de modèle d'embeddings ; la recherche hybride (BM25 + vecteurs, RRF) bat chacune des deux recherches seules.À tester
- Comparer la qualité en français des modèles candidatsgpt-oss-120b et Mistral Small 4 produisent un français juridique jugé acceptable par un avocat dans plus de 80 % des cas ; Qwen3-30B-A3B est nettement en retrait sur la rédaction mais équivalent sur la synthèse avec passages fournis ; les modèles de 7 à 22 Md (Lucie, EuroLLM) ne suffisent pas pour l'assistant principal. Le taux d'hallucination de citations est le critère discriminant.À tester
- Évaluer Docling sur un corpus juridique françaisDocling (MIT) avec Tesseract fra extrait correctement texte, structure et tableaux des documents juridiques français natifs, et atteint une qualité OCR acceptable sur des scans de qualité moyenne, à un débit compatible avec l'ingestion initiale d'un cabinet sur CPU.À tester
- Brancher le RAG de la Box sur Open WebUI (pipeline, endpoint, outil)Un endpoint OpenAI-compatible exposé par le service RAG de la Box, appelé par Open WebUI comme un modèle, transmet l'identité de l'utilisateur de façon vérifiable et affiche les citations (dossier, pièce, page, lien) sans dépendre du RAG intégré ni de ses knowledge bases.À tester
- pgvector vs Qdrant : rappel et latence de la recherche filtrée par ACLAvec hnsw.iterative_scan activé, pgvector conserve au moins 90 % du rappel non filtré pour un utilisateur ayant accès à 10 % des dossiers, à une latence inférieure à 200 ms ; Qdrant y parvient sans réglage grâce au filtrage intégré à HNSW. Dans les deux cas, la barrière moteur (RLS, JWT payload) ne renvoie aucun point hors portée.À tester
- Test de fuite de permissions du RAG (« l'avocat B ne voit jamais A »)Avec un filtre dossier_id calculé côté serveur et imposé par le moteur (RLS PostgreSQL ou JWT Qdrant), aucun chunk ni aucune réponse ne contient un canari hors de la portée de l'utilisateur, même lorsque la barrière applicative est désactivée.À tester
Sources
- 1Ragas — métriques disponiblesDocumentation officielleFiabilité hauteRagas · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
- 2DeepEval — Faithfulness et guide d'évaluation RAGDocumentation officielleFiabilité hauteConfident AI (DeepEval) · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
- 3TruLens — RAG triadDocumentation officielleFiabilité hauteTruLens · publié lu le 16/09/2026 · consulté le 16 sept. 2026 · fiche source
- 4Citations et fidélité en RAG (arXiv 2412.18004, 2409.11242)ÉtudeFiabilité moyennearXiv · publié 2024 · consulté le 16 sept. 2026 · fiche source
- 5Open WebUI — Advisory GHSA-h36f-rqpx-j5wx / CVE-2026-44560 (accès non autorisé à des knowledge bases via la recherche vectorielle)GitHubFiabilité hauteOpen WebUI (GitHub Security Advisories) · publié 2026-05-05 · consulté le 16 sept. 2026 · fiche source
- 6pgvector — README (filtrage, HNSW, iterative scan 0.8.0)GitHubFiabilité hautepgvector · publié v0.8.6 (README) ; 0.8.0 annoncé sur postgresql.org · consulté le 16 sept. 2026 · fiche source