Architecture RAG sourcée

Un RAG qui invente est pire qu'un moteur de recherche.

Le problème réel

Un moteur de recherche qui ne trouve rien vous le dit. Un RAG mal construit, lui, produit une réponse plausible avec des sources qui ne la soutiennent pas. C'est un régression de fiabilité déguisée en progrès d'ergonomie.

Le piège est que la démo marche toujours. Les défauts apparaissent sur les questions dont la réponse n'est pas dans le corpus — exactement celles où l'utilisateur ne peut pas vérifier.

Comment je le résous

Trois exigences non négociables :

  • Le refus est une réponse valide. Si la couverture des passages retenus est sous le seuil, le système dit qu'il ne sait pas. Le taux de refus est une métrique suivie, pas un défaut à masquer.
  • Recherche hybride : plein-texte FTS5 et vectorielle fusionnées par RRF. Le lexical rattrape ce que le sémantique rate sur les noms propres et les références exactes.
  • Reranking cross-encodeur après le rappel initial : on paie le coût sur 30 candidats, pas sur 1,7 million.

Un piège appris sur le terrain

Le classement des documents par nombre brut d'occurrences fait gagner les romans-fleuves sur les manuels. Un ouvrage de 900 pages contient mécaniquement plus d'occurrences de n'importe quel terme qu'une référence dense de 120 pages — sans être plus pertinent.

Le tri se fait désormais par couverture de termes distincts. Même corpus, même requête, résultats qui n'ont plus rien à voir.

Second piège, sur la migration : avant de rebasculer 1,7 million de vecteurs vers un autre backend d'embeddings, j'ai mesuré la similarité cosinus entre l'ancien et le nouveau sur le corpus réel. cos = 1.0000 — donc zéro ré-encodage nécessaire. Sans cette mesure, c'était plusieurs jours de calcul dépensés pour rien.

Ce que ça donne, mesuré

  • 24 799 livres, 1 699 549 chunks, base de 19,5 Go
  • Gate de non-régression nocturne : couverture, taux de refus, 0 hallucination — un score sous baseline fait échouer la nuit
  • 1 619 tests
  • Cross-lingue : question en français, sources en anglais

Où c'est en production

Cette compétence intervient dans

BuildRetainer

Vos données ne peuvent pas sortir ?

C'est exactement le problème que je résous. Un appel de 30 minutes suffit à cadrer un audit.