Capítulo 2: Framework RAGAS
O que é o RAGAS?
RAGAS (Retrieval Augmented Generation Assessment) é um framework para avaliar pipelines de RAG automaticamente utilizando LLMs.
Instalação
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 dados de avaliação
data = {
"question": ["O que é RAG?"],
"answer": ["RAG combina recuperação com geração..."],
"contexts": [["RAG é uma técnica que...", "Ela recupera..."]],
"ground_truth": ["RAG é Retrieval Augmented Generation..."]
}
dataset = Dataset.from_dict(data)
# Avaliar
results = evaluate(
dataset,
metrics=[
faithfulness,
answer_relevancy,
context_precision,
context_recall
]
)
print(results)
Métricas do RAGAS
| Métrica | Descrição | Intervalo |
|---|---|---|
| faithfulness | Resposta fundamentada no contexto | 0-1 |
| answer_relevancy | Resposta aborda a pergunta | 0-1 |
| context_precision | Documentos recuperados são relevantes | 0-1 |
| context_recall | Todas as informações necessárias recuperadas | 0-1 |
Criando Dataset de Teste
def create_eval_dataset(qa_pairs, rag_system):
"""Gerar dataset de avaliação a partir de pares de Q&A"""
data = {"question": [], "answer": [], "contexts": [], "ground_truth": []}
for qa in qa_pairs:
question = qa["question"]
ground_truth = qa["expected_answer"]
# Obter resposta do 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)
Interpretando os Resultados
| Pontuação | Interpretação |
|---|---|
| >0.9 | Excelente |
| 0.7-0.9 | Bom, há espaço para melhorar |
| 0.5-0.7 | Precisa de melhorias |
| <0.5 | Problemas significativos |
Avaliação Contínua
# Pipeline de avaliação semanal
def weekly_eval(rag_system, test_questions):
dataset = create_eval_dataset(test_questions, rag_system)
results = evaluate(dataset, metrics=[...])
# Armazenar resultados
save_metrics_to_db(results, timestamp=datetime.now())
# Alertar em caso de degradação
if results["faithfulness"] < 0.8:
send_alert("Faithfulness caiu abaixo do limite!")