Capítulo 1: Métricas de Avaliação de RAG
Duas Áreas de Avaliação
| Área | O Que Mede | Principais Métricas |
|---|---|---|
| Recuperação | Qualidade dos documentos recuperados | Precisão, Revocação, MRR |
| Geração | Qualidade da resposta do LLM | Fidedignidade, Relevância |
Métricas de Recuperação
Precisão@K
def precision_at_k(retrieved_ids, relevant_ids, k):
"""Qual % dos documentos recuperados são relevantes?"""
retrieved_k = set(retrieved_ids[:k])
relevant = set(relevant_ids)
return len(retrieved_k & relevant) / k
# Recuperados: [A, B, C, D, E], Relevantes: [A, C, F]
# Precisão@5 = 2/5 = 0.4
Revocação@K
def recall_at_k(retrieved_ids, relevant_ids, k):
"""Qual % dos documentos relevantes foi recuperado?"""
retrieved_k = set(retrieved_ids[:k])
relevant = set(relevant_ids)
return len(retrieved_k & relevant) / len(relevant)
# Recuperados: [A, B, C, D, E], Relevantes: [A, C, F]
# Revocação@5 = 2/3 = 0.67
MRR (Mean Reciprocal Rank)
def reciprocal_rank(retrieved_ids, relevant_ids):
"""Quão alta está a posição do primeiro documento relevante?"""
for i, doc_id in enumerate(retrieved_ids):
if doc_id in relevant_ids:
return 1 / (i + 1)
return 0
# Se o primeiro relevante está na posição 3: RR = 1/3 = 0.33
Métricas de Geração
Fidedignidade
A resposta usa SOMENTE informações do contexto?
# Alta fidedignidade:
# Contexto: "A política permite devoluções em até 30 dias"
# Resposta: "Você pode devolver itens em até 30 dias"
# Baixa fidedignidade (alucinação):
# Contexto: "A política permite devoluções em até 30 dias"
# Resposta: "Você pode devolver itens em até 60 dias para reembolso total"
Relevância da Resposta
A resposta realmente aborda a pergunta?
Relevância do Contexto
Os trechos recuperados são relevantes para a pergunta?
Resumo das Métricas
| Métrica | O Que Mede | Meta |
|---|---|---|
| Precisão@K | Relevância dos recuperados | >0.8 |
| Revocação@K | Cobertura | >0.9 |
| MRR | Qualidade do ranqueamento | >0.7 |
| Fidedignidade | Sem alucinações | >0.9 |
| Relevância | Qualidade da resposta | >0.8 |