Capítulo 2: Marco RAGAS
¿Qué es RAGAS?
RAGAS (Retrieval Augmented Generation Assessment) es un marco para evaluar pipelines de RAG automáticamente utilizando LLMs.
Instalación
pip install ragas
Uso básico
from ragas import evaluate
from ragas.metrics import (
faithfulness,
answer_relevancy,
context_precision,
context_recall
)
from datasets import Dataset
# Preparar datos de evaluación
data = {
"question": ["¿Qué es RAG?"],
"answer": ["RAG combina recuperación con generación..."],
"contexts": [["RAG es una técnica que...", "Recupera..."]],
"ground_truth": ["RAG es Retrieval Augmented Generation..."]
}
dataset = Dataset.from_dict(data)
# Evaluar
results = evaluate(
dataset,
metrics=[
faithfulness,
answer_relevancy,
context_precision,
context_recall
]
)
print(results)
Métricas de RAGAS
| Métrica | Descripción | Rango |
|---|---|---|
| faithfulness | Respuesta fundamentada en el contexto | 0-1 |
| answer_relevancy | La respuesta aborda la pregunta | 0-1 |
| context_precision | Los documentos recuperados son relevantes | 0-1 |
| context_recall | Se recuperó toda la información necesaria | 0-1 |
Creación de un conjunto de pruebas
def create_eval_dataset(qa_pairs, rag_system):
"""Generar conjunto de evaluación a partir de pares de preguntas y respuestas"""
data = {"question": [], "answer": [], "contexts": [], "ground_truth": []}
for qa in qa_pairs:
question = qa["question"]
ground_truth = qa["expected_answer"]
# Obtener respuesta de 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)
Interpretación de resultados
| Puntuación | Interpretación |
|---|---|
| >0.9 | Excelente |
| 0.7-0.9 | Buena, con margen de mejora |
| 0.5-0.7 | Requiere mejoras |
| <0.5 | Problemas significativos |
Evaluación continua
# Pipeline de evaluación semanal
def weekly_eval(rag_system, test_questions):
dataset = create_eval_dataset(test_questions, rag_system)
results = evaluate(dataset, metrics=[...])
# Almacenar resultados
save_metrics_to_db(results, timestamp=datetime.now())
# Alertar si hay degradación
if results["faithfulness"] < 0.8:
send_alert("¡La fidelidad cayó por debajo del umbral!")