RAG, faire lire vos documents au modèle
Construire de zéro un système de génération augmentée par la recherche – découpage des documents, recherche vectorielle, recherche par mots-clés, réécriture de requête, reranking, réponses avec citations et évaluation – puis faire lire la documentation de httpx à RepoBot.
Leçons
- 01Pourquoi le RAG
Une même question – sans documents, le modèle se trompe ; avec le passage de documentation pertinent dans le prompt, il répond juste. Le déroulé de base du RAG, le problème qu'il résout, et les cas où il ne convient pas.
25 minutes · Intermédiaire - 02Découper les documents
Comparer pour de vrai trois méthodes de découpage sur la documentation de httpx – par longueur fixe, par titre, par titre avec longueur limitée. Et un vrai piège au passage – des commentaires dans des blocs de code pris pour des titres.
35 minutes · Intermédiaire - 03Écrire une recherche vectorielle de zéro
Écrire avec numpy une recherche vectorielle de quelques dizaines de lignes – transformer les morceaux de documentation en matrice de vecteurs, calculer la similarité à la requête et garder les premiers. Puis l'évaluer sur 20 questions – seule la moitié trouve le bon passage – et voir d'où vient le problème.
45 minutes · Intermédiaire - 04Recherche hybride et reranking
Écrire de zéro une recherche par mots-clés BM25, la fusionner avec la recherche vectorielle par RRF, réécrire d'abord la question chinoise en termes de recherche anglais, et ajouter enfin un modèle de reranking. Chaque étape est mesurée sur le même jeu de 20 questions.
50 minutes · Intermédiaire - 05Des réponses avec citations
Transmettre au modèle les morceaux trouvés, numérotés, en exigeant qu'il indique la source de chaque phrase et qu'il dise quand l'information manque. Puis vérifier par programme que les citations sont valides, et voir s'il invente face à une question dont la documentation ne contient pas la réponse.
35 minutes · Intermédiaire - 06Comment savoir si un RAG est bon
Séparer l'évaluation d'un RAG en deux moitiés, la recherche et la réponse. Pour la recherche, le taux de réussite ; pour la réponse, un autre modèle comme juge, qui compare à une réponse de référence pour juger l'exactitude et aux documents pour juger la fidélité. Le juge a rendu 60 verdicts, je les ai vérifiés un par un, et il se trompe lui aussi.
45 minutes · Intermédiaire - 07Projet : l'assistant lit la documentation du projet
Intégrer découpage, recherche hybride, réécriture de requête et réponses avec citations dans RepoBot pour produire la v2. Elle répond juste aux questions sur lesquelles la v1 se trompait, et règle aussi le problème de recherche des relances du type « et en asynchrone ? » dans une conversation à plusieurs tours.
60 minutes · Intermédiaire
RepoBot v1 s'est trompé sur « httpx suit-il les redirections par défaut ? », et a même inventé un historique de versions. Ce module résout ce problème : avant de répondre, il va chercher les passages pertinents dans la documentation officielle de httpx, répond d'après elle et indique la source à l'utilisateur.
Le module n'utilise presque aucun framework. Découpage, recherche vectorielle, BM25, fusion, vérification des citations : tout est écrit à la main, en quelques dizaines de lignes chacun. Toutes les méthodes de recherche sont évaluées sur le même jeu de 20 questions, et vous verrez de combien les chiffres changent à chaque ajout. Certains résultats contredisent les idées reçues : sur nos données, par exemple, la recherche hybride ne fait pas mieux que la recherche par mots-clés seule, et le plus grand gain vient d'une réécriture de requête peu coûteuse.
Pourquoi cet ordre
La leçon 1 montre d'abord avec un exemple manuel que « fournir les documents suffit à répondre juste », et explique le déroulé du RAG et son domaine d'application. Les leçons 2 à 4 suivent l'ordre du déroulé pour bien faire l'étape « trouver les documents » : d'abord découper, puis chercher, puis améliorer la recherche. La leçon 5 traite l'étape « utiliser les documents » : faire répondre le modèle avec des citations, et lui faire dire honnêtement quand il ne sait pas. La leçon 6 évalue tout le système, pas seulement la recherche mais aussi les réponses. La leçon 7 intègre tout cela dans RepoBot.
Vous avez terminé quand
- vous savez découper des documents selon leur structure, et repérer puis corriger les problèmes de découpage (par exemple un bloc de code coupé en deux).
- vous savez écrire, sans aucun framework, une recherche vectorielle et BM25, et les fusionner avec RRF.
- vous savez préparer un jeu de questions d'évaluation de la recherche pour vos propres documents, calculer taux de réussite et MRR, et choisir une méthode de recherche en conséquence.
- vous savez faire répondre le modèle uniquement d'après les documents trouvés, avec leurs sources, et vérifier par programme que les citations sont valides.
- RepoBot v2 répond correctement aux questions sur lesquelles la v1 se trompait, en citant la documentation.
Le code de ce module
Le code et les sorties des programmes sont reproduits tels qu’ils ont tourné : commentaires et sorties sont donc en chinois.
- code/04-rag/chunking.py
- code/04-rag/citations.py
- code/04-rag/eval_qa.jsonl
- code/04-rag/hybrid.py
- code/04-rag/rag_eval_results.json
- code/04-rag/rag_eval.py
- code/04-rag/rerank.py
- code/04-rag/rewrites.json
- code/04-rag/vector_search.py
- code/04-rag/why_rag.py
- projects/repobot/v2/eval_qa.jsonl
- projects/repobot/v2/eval_retrieval.py
- projects/repobot/v2/llm.py
- projects/repobot/v2/README.md
- projects/repobot/v2/repobot.py
- projects/repobot/v2/requirements.txt
- projects/repobot/v2/retrieval.py