Corrective RAG (CRAG)
iaDéfinition
Corrective RAG (CRAG) est une technique RAG proposee par Yan et al. (2024) qui ajoute une etape d'evaluation de la qualite du retrieval et une correction automatique quand les documents recuperes sont de mauvaise qualite. Un evaluateur (lequel peut etre un petit modele entraine ou un prompt LLM) score chaque document recupere comme 'correct', 'ambigu', ou 'incorrect'. Le mecanisme de correction : si l'evaluateur determine que les documents recuperes sont de qualite insuffisante (score faible), CRAG declenche automatiquement une strategie de fallback — typiquement une recherche web via Tavily, SerpAPI ou Bing pour obtenir des informations plus recentes ou plus pertinentes. Les documents web sont ensuite raffines (chunking, extraction des parties pertinentes) et combines avec les documents vectoriels. L'avantage principal de CRAG est sa robustesse aux bases de connaissances incompletes : quand la base vectorielle ne contient pas l'information necessaire (questions sur des evenements recents, sujets peu couverts), CRAG compense automatiquement par la recherche web. Cela est particulierement precieux dans les applications enterprise ou les bases de connaissances ne peuvent pas etre constamment mises a jour. L'implementation de CRAG dans LangGraph est naturelle : le graphe inclut un noeud 'd'evaluation du retrieval' avec des aretes conditionnelles — si la qualite est suffisante, passer directement a la generation ; si ambigue, combiner retrieval vectoriel et web ; si incorrect, basculer entierement vers la recherche web. Les ameliorations de CRAG par rapport au RAG standard : +6.8% sur PopQA (questions sur des entites rares), +4.2% sur AmbigQA (questions ambigues), +8.1% sur PubHealth (sante, ou les bases ne sont jamais completes). Le cout additionnel est la latence des appels de recherche web (500-2000ms).
Pipeline CRAG simplifie
def evaluate_retrieval_quality(query, docs, llm):
scores = []
for doc in docs:
prompt = f'Est-ce que ce document repond a la question: {query}\n'
prompt += f'Document: {doc.page_content[:500]}\n'
prompt += 'Score: [correct/ambiguous/incorrect]'
score = llm.predict(prompt).strip().lower()
scores.append(score)
correct_count = scores.count('correct')
if correct_count >= 2:
return 'good', docs
elif correct_count >= 1:
return 'ambiguous', docs # Augmenter avec web
else:
return 'bad', [] # Remplacer par web search
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h