Le RAG complet : assembler recherche et génération
L’architecture RAG
Section titled “L’architecture RAG”RAG (Retrieval-Augmented Generation) sépare deux responsabilités : un composant de recherche (la leçon précédente) trouve l’information pertinente, un LLM la reformule en réponse naturelle — sans jamais compter sur sa mémoire d’entraînement pour les faits eux-mêmes.
def ask_llm(question, contexte=None): if contexte: prompt = ( f"Tu es un assistant support technique interne. Voici la documentation disponible :\n\n" f"{contexte}\n\n" f"Question : {question}\n" f"Consigne : reponds uniquement a partir de la documentation ci-dessus. " f"Si l'information n'y figure pas, dis explicitement que tu ne sais pas." ) else: prompt = question messages = [{"role": "user", "content": prompt}] result = generator(messages, max_new_tokens=120, do_sample=False) return result[0]["generated_text"][-1]["content"]Le prompt s’articule en 4 blocs : un rôle (assistant support technique), un contexte (les chunks récupérés), la question, et une consigne anti-hallucination qui autorise explicitement le modèle à répondre « je ne sais pas ».
Assembler le pipeline complet
Section titled “Assembler le pipeline complet”contexte_rag = "\n\n".join(chunks[i] for i in indices_top)reponse_rag = ask_llm(question, contexte=contexte_rag)print(reponse_rag)Un rollback de déploiement doit être possible à partir de 10 minutes.Une réponse exacte, concise, directement ancrée dans le runbook réel — à comparer à la réponse évasive du LLM nu (leçon 1), qui énumérait des facteurs génériques sans jamais donner ce chiffre.
Mesurer, pas seulement observer
Section titled “Mesurer, pas seulement observer”| LLM nu | RAG | |
|---|---|---|
| Réponse | Évasive, aucun chiffre donné | « à partir de 10 minutes » (exact) |
| Mots de contexte envoyés | 0 | 219 |
| Source citée | Aucune | rollback.pdf, sauvegardes.pdf |
Le RAG a un coût (219 mots de contexte envoyés au modèle à chaque question, contre 0), mais ce coût reste minime comparé à l’alternative « tout dans le prompt » (envoyer l’intégralité des 5 documents à chaque question) : ici, seuls les 2 chunks les plus pertinents sont transmis, sélectionnés par recherche sémantique plutôt qu’inclus en bloc.
Prochaine étape
Section titled “Prochaine étape”👉 Détecter une question hors du domaine documentaire
Junior TSAFACK – 12/09/2026