Introduction
Corrective RAG est une technique qui permet d'améliorer les systèmes RAG classiques en ajoutant une étape de critique et de correction. Au lieu d'accepter aveuglément les documents récupérés, le système évalue leur pertinence et les corrige si nécessaire. Cette approche réduit les hallucinations et améliore la fiabilité des réponses. En 2026, elle devient essentielle pour les applications professionnelles qui exigent une précision élevée. Ce tutoriel vous montre comment implémenter un pipeline Corrective RAG complet et fonctionnel en Python.
Prérequis
- Python 3.10 ou supérieur
- Clé API OpenAI ou modèle local compatible
- Connaissances de base en LLM et embeddings
- Environnement virtuel recommandé
Installation des dépendances
pip install langchain langchain-openai langchain-community chromadbCette commande installe LangChain et ChromaDB nécessaires pour construire le pipeline Corrective RAG. Assurez-vous d'utiliser un environnement virtuel propre.
Configuration du LLM et des embeddings
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
embeddings = OpenAIEmbeddings()Nous configurons le modèle de langage et les embeddings. Le paramètre temperature=0 garantit des réponses déterministes et reproductibles.
Création du vector store
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document
docs = [
Document(page_content="Paris est la capitale de la France."),
Document(page_content="La Tour Eiffel mesure 324 mètres.")
]
vectorstore = Chroma.from_documents(docs, embeddings)Création d'une base vectorielle simple avec Chroma pour stocker les documents. Ce vectorstore servira de source de récupération dans le pipeline.
Implémentation du critiqueur
from langchain_core.prompts import ChatPromptTemplate
critique_prompt = ChatPromptTemplate.from_template(
"Évalue si ce document répond à la question : {question}\n"
"Document : {document}\n"
"Réponds uniquement par OUI ou NON."
)
critic = critique_prompt | llmLe critiqueur évalue la pertinence de chaque document récupéré. Il renvoie OUI ou NON pour décider si une correction est nécessaire.
Pipeline Corrective RAG complet
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
def correct_documents(docs, question):
corrected = []
for doc in docs:
result = critic.invoke({"question": question, "document": doc.page_content})
if "OUI" in result.content.upper():
corrected.append(doc)
return corrected
prompt = ChatPromptTemplate.from_template("Réponds à la question en utilisant ces documents : {context}\nQuestion : {question}")
chain = (
{"context": retriever | (lambda docs: correct_documents(docs, question)), "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)Le pipeline complet récupère les documents, les critique et ne garde que ceux validés. Cette fonction de correction est le cœur de Corrective RAG.
Bonnes pratiques
- Toujours tester le critiqueur avec des cas limites
- Limiter le nombre de documents passés au critiqueur pour contrôler les coûts
- Utiliser un modèle léger pour la critique et un modèle puissant pour la génération finale
- Logger les décisions du critiqueur pour analyse
- Ajouter un seuil de similarité minimum avant la critique
Erreurs courantes à éviter
- Oublier de gérer le cas où aucun document n'est validé par le critiqueur
- Utiliser la même température pour le critiqueur et le générateur
- Ne pas tester le pipeline sur des questions hors domaine
- Ignorer les coûts d'appels LLM supplémentaires générés par la critique
Pour aller plus loin
Explorez les variantes avancées comme Self-RAG et CRAG. Découvrez nos formations Learni pour maîtriser les architectures RAG modernes.