La Génération Augmentée par Récupération (RAG) est devenue la référence pour les applications d'entreprise basées sur les LLM, offrant une solution au problème chronique des hallucinations de modèle en ancrant les réponses dans des sources de données externes vérifiées. Cependant, un malentendu critique persiste : celui selon lequel le RAG garantit automatiquement l'exactitude factuelle. En réalité, les pipelines RAG introduisent une classe unique d'hallucinations appelées hallucinations « contextuelles » ou « d'attribution », où le modèle génère des informations plausibles mais incorrectes, bien qu'il ait accès aux faits corrects dans le contexte récupéré.
Pour les développeurs de niveau intermédiaire à avancé, il est essentiel d'aller au-delà des simples métriques de précision. Nous devons évaluer non seulement si la réponse est correcte, mais si elle est ancrée dans les données récupérées et si le mécanisme de récupération lui-même fonctionne correctement. Cet article explore les nuances techniques de l'évaluation de la factualité dans les pipelines RAG.
L'anatomie des hallucinations RAG
Pour détecter efficacement les hallucinations, nous devons d'abord les catégoriser. Dans un pipeline RAG standard, deux modes de défaillance principaux existent :
- Échecs de récupération : Le système échoue à récupérer le fragment de document pertinent, amenant le LLM à s'appuyer sur ses données d'entraînement préalables (hallucination de source).
- Échecs de génération : Le contexte correct est récupéré, mais le LLM l'ignore, le contredit ou hallucine des détails absents de la source (hallucination de génération).
L'évaluation de ces échecs nécessite une approche multifacette. Nous ne pouvons pas nous fier uniquement aux métriques de correspondance exacte. Au lieu de cela, nous utilisons la similarité sémantique et les scores de fidélité pour mesurer à quel point la sortie générée s'aligne sur la vérité fondamentale et le contexte récupéré.
Métriques clés d'évaluation de la factualité
Les frameworks modernes d'évaluation RAG, tels que RAGAS ou DeepEval, utilisent trois métriques fondamentales pour évaluer la factualité :
- Fidélité (Faithfulness) : Mesure si la réponse générée peut être déduite du contexte fourni. C'est la principale défense contre les hallucinations de génération.
- Pertinence du contexte : Évalue si le contexte récupéré contient réellement les informations nécessaires pour répondre à la question.
- Pertinence de la réponse : Vérifie si la réponse générée répond directement à la requête de l'utilisateur.
En combinant ces métriques, nous pouvons isoler si une défaillance est originaire de l'étape de récupération ou de l'étape de génération.
Mise en œuvre des vérifications de factualité avec du code
Examinons comment implémenter une vérification pratique de la fidélité en utilisant un framework d'évaluation hypothétique. Voici un exemple Python montrant comment structurer un script d'évaluation qui vérifie si une réponse générée est soutenue par le contexte récupéré.
from ragas import evaluate
from ragas.metrics import faithfulness, context_precision
from datasets import Dataset
# Supposons que ces variables soient remplies par votre pipeline RAG
question = "Quel était le chiffre d'affaires du T3 ?"
retrieved_contexts = ["L'entreprise a déclaré un chiffre d'affaires de 5 M$ au T3.", "Le budget marketing était de 10 k$."]
generated_answer = "Le chiffre d'affaires au T3 était de 5 millions de dollars."
# Construire le jeu de données pour l'évaluation
data = Dataset.from_dict({
"question": [question],
"retrieved_contexts": [retrieved_contexts],
"answer": [generated_answer]
})
# Évaluer selon la métrique 'faithfulness'
# La fidélité mesure dans quelle mesure la réponse est ancrée dans le contexte
results = evaluate(
data,
metrics=[faithfulness, context_precision],
llm=your_llm_instance,
embeddings=your_embedding_model
)
print(results)
# La sortie inclut un score de fidélité entre 0 et 1
Dans le code ci-dessus, la métrique faithfulness fonctionne généralement en décomposant la réponse générée en affirmations et en vérifiant si chaque affirmation est soutenue par le contexte. Si le modèle indique que le chiffre d'affaires était de 5 M$, mais que le contexte indique 6 M$, le score de fidélité chutera considérablement, signalant une hallucination.
Recommandations pratiques pour les développeurs
Pour atténuer les hallucinations spécifiques au RAG, considérez les meilleures pratiques suivantes :
- Imposer l'ancrage : Configurez vos invites (prompts) LLM pour instruire explicitement le modèle d'utiliser uniquement le contexte fourni. Si le contexte ne contient pas la réponse, instruisez le modèle de déclarer « Je ne sais pas » plutôt que de deviner.
- Vérification post-génération : Utilisez un deuxième appel LLM pour vérifier la sortie par rapport au contexte récupéré. Cette approche « LLM comme juge » est très efficace pour détecter les hallucinations subtiles.
- Réordonnancement (Reranking) : Implémentez un réordonnanceur à encodeur croisé après la recherche vectorielle initiale pour s'assurer que les fragments les plus pertinents sont fournis au LLM, réduisant ainsi le risque d'échec de la récupération.
Conclusion
Le RAG n'est pas une solution magique ; c'est un cadre qui déplace la charge de la précision des poids du modèle vers l'infrastructure de récupération. En mettant en œuvre des pipelines d'évaluation rigoureux et axés sur les métriques qui ciblent spécifiquement la fidélité et la pertinence du contexte, les développeurs peuvent détecter et prévenir les hallucinations avant qu'elles n'atteignent les utilisateurs finaux. À mesure que les architectures RAG évoluent, nos stratégies d'évaluation doivent également évoluer, passant de simples vérifications de précision à des évaluations nuancées et multidimensionnelles de la factualité et de l'ancrage.