Saltar al contenido principal

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étricaDescripciónRango
faithfulnessRespuesta fundamentada en el contexto0-1
answer_relevancyLa respuesta aborda la pregunta0-1
context_precisionLos documentos recuperados son relevantes0-1
context_recallSe recuperó toda la información necesaria0-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ónInterpretación
>0.9Excelente
0.7-0.9Buena, con margen de mejora
0.5-0.7Requiere mejoras
<0.5Problemas 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!")