Chapitre 2 : Cadre RAGAS
Qu'est-ce que RAGAS ?
RAGAS (Retrieval Augmented Generation Assessment) est un cadre pour évaluer automatiquement les pipelines RAG en utilisant des LLMs.
Installation
pip install ragas
Utilisation de base
from ragas import evaluate
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_precision,
context_recall
)
from datasets import Dataset
# Préparer les données d'évaluation
data = {
"question": ["Qu'est-ce que RAG ?"],
"answer": ["RAG combine la récupération avec la génération..."],
"contexts": [["RAG est une technique qui...", "Il récupère..."]],
"ground_truth": ["RAG est la génération augmentée par récupération..."]
}
dataset = Dataset.from_dict(data)
# Évaluer
results = evaluate(
dataset,
metrics=[
faithfulness,
answer_relevancy,
context_precision,
context_recall
]
)
print(results)
Métriques RAGAS
| Metric | Description | Range |
|---|---|---|
| faithfulness | Réponse ancrée dans le contexte | 0-1 |
| answer_relevancy | La réponse répond à la question | 0-1 |
| context_precision | Les documents récupérés sont pertinents | 0-1 |
| context_recall | Toutes les informations nécessaires sont récupérées | 0-1 |
Création d'un jeu de données de test
def create_eval_dataset(qa_pairs, rag_system):
"""Générer un jeu de données d'évaluation à partir de paires Q&R"""
data = {"question": [], "answer": [], "contexts": [], "ground_truth": []}
for qa in qa_pairs:
question = qa["question"]
ground_truth = qa["expected_answer"]
# Obtenir la réponse RAG
response = rag_system.query(question)
data["question"].append(question)
data["answer"].append(response["answer"])
data["contexts"].append(response["contexts"])
data["ground_truth"].append(ground_truth)
return Dataset.from_dict(data)
Interprétation des résultats
| Score | Interprétation |
|---|---|
| >0.9 | Excellent |
| 0.7-0.9 | Bon, amélioration possible |
| 0.5-0.7 | Nécessite du travail |
| <0.5 | Problèmes significatifs |
Évaluation continue
# Pipeline d'évaluation hebdomadaire
def weekly_eval(rag_system, test_questions):
dataset = create_eval_dataset(test_questions, rag_system)
results = evaluate(dataset, metrics=[...])
# Stocker les résultats
save_metrics_to_db(results, timestamp=datetime.now())
# Alerter en cas de dégradation
if results["faithfulness"] < 0.8:
send_alert("La fidélité est tombée en dessous du seuil !")