Avaliação de sistemas RAG: métricas, ragas e armadilhas comuns

1. Fundamentos da Avaliação em Sistemas RAG

Avaliar sistemas RAG (Retrieval-Augmented Generation) é substancialmente diferente de avaliar LLMs puros. Enquanto um LLM tradicional é julgado por sua capacidade de gerar texto coerente a partir de conhecimento internalizado, um sistema RAG introduz uma camada adicional de complexidade: a recuperação de informações externas. Essa diferença fundamental exige métricas que capturem três pilares essenciais: a qualidade da recuperação, a fidelidade da geração e a integração harmoniosa entre ambos.

Os desafios são múltiplos. A dependência de contexto implica que o sistema precisa não apenas encontrar documentos relevantes, mas também extrair deles as informações corretas para a consulta do usuário. Alucinações em RAG não são apenas invenções do LLM, mas também podem surgir quando o modelo ignora ou distorce o conteúdo recuperado. A relevância, por sua vez, exige que tanto os chunks recuperados quanto a resposta gerada estejam alinhados com a intenção original da pergunta.

2. Métricas de Avaliação da Recuperação (Retrieval)

A avaliação da recuperação começa com métricas clássicas de classificação, adaptadas ao contexto de chunks. Precisão mede quantos dos chunks recuperados são realmente relevantes. Recall avalia quantos chunks relevantes foram recuperados do total disponível. O F1-Score combina ambos.

Precisão = TP / (TP + FP)
Recall = TP / (TP + FN)
F1 = 2 * (Precisão * Recall) / (Precisão + Recall)

Para ranqueamento, o MRR (Mean Reciprocal Rank) é crucial quando apenas o primeiro resultado relevante importa. Se o primeiro chunk relevante está na posição 3, o RR é 1/3. O NDCG (Normalized Discounted Cumulative Gain) vai além, considerando a posição de todos os chunks relevantes com pesos decrescentes.

O Hit Rate mede a proporção de consultas para as quais pelo menos um chunk relevante foi recuperado. O MAP (Mean Average Precision) calcula a precisão média em diferentes níveis de recall, oferecendo uma visão granular do desempenho.

3. Métricas de Avaliação da Geração (Generation)

Métricas tradicionais como BLEU, ROUGE e METEOR foram projetadas para tradução automática e sumarização, não para RAG. Elas medem sobreposição de n-gramas, mas falham em capturar semântica. Uma resposta correta que usa sinônimos pode ser penalizada injustamente.

Métricas baseadas em LLM surgiram como alternativa. Faithfulness avalia se a resposta contém apenas informações presentes nos documentos recuperados. Answer Relevance mede se a resposta aborda diretamente a pergunta do usuário. Context Precision verifica se cada sentença da resposta pode ser atribuída a um chunk específico.

A taxa de alucinação (Hallucination Rate) é particularmente crítica. Ela calcula a proporção de afirmações na resposta que não podem ser verificadas nos documentos de contexto.

Hallucination Rate = Afirmações não verificáveis / Total de afirmações

4. Framework RAGAS (Retrieval Augmented Generation Assessment)

RAGAS é um framework especializado que padroniza a avaliação de sistemas RAG. Seus quatro componentes principais são:

  • Context Relevancy: mede o quão relevante cada chunk recuperado é para a pergunta
  • Answer Relevancy: avalia se a resposta gerada é pertinente à pergunta original
  • Faithfulness: verifica se a resposta é factualmente consistente com os chunks
  • Context Recall: mede quantas informações relevantes dos chunks foram incorporadas na resposta

Implementação prática com Hugging Face datasets:

from ragas import evaluate
from datasets import Dataset

dados = Dataset.from_dict({
    "question": ["Qual a capital do Brasil?"],
    "answer": ["Brasília é a capital do Brasil"],
    "contexts": [["Brasília é a capital federal do Brasil"]],
    "ground_truth": ["Brasília"]
})

scores = evaluate(dados)
print(scores)

Para produção, thresholds aceitáveis geralmente são: Faithfulness > 0.85, Answer Relevancy > 0.80, Context Relevancy > 0.75.

5. Armadilhas Comuns na Avaliação de RAG

A primeira armadilha é o viés de avaliação: usar o mesmo LLM para gerar respostas e avaliá-las. Modelos como GPT-4 tendem a favorecer suas próprias saídas, inflando artificialmente as métricas. A solução é usar um LLM diferente para avaliação ou, idealmente, múltiplos avaliadores.

A dependência excessiva de métricas automáticas sem validação humana é outra armadilha frequente. Métricas como BLEU podem mostrar scores altos para respostas factualmente incorretas, desde que usem vocabulário similar. Sempre complemente métricas automáticas com avaliação humana periódica.

Ignorar a qualidade dos documentos de base é talvez o erro mais grave. Se os chunks recuperados são de baixa qualidade, nenhuma métrica de geração será confiável. A chunkização inadequada — chunks muito grandes ou muito pequenos — pode destruir o contexto. Um chunk de 200 tokens pode perder informações cruciais; um de 2000 tokens pode diluir a relevância.

6. Estratégias Avançadas e Boas Práticas

Crie datasets de teste sintéticos usando o próprio LLM para gerar perguntas a partir dos documentos, mas sempre com curadoria manual para garantir qualidade. Uma boa prática é ter pelo menos 100 pares pergunta-resposta por domínio.

Implemente avaliação contínua com monitoramento em produção. Colete feedback implícito (cliques, tempo de leitura) e explícito (votos positivos/negativos) dos usuários. Use esses dados para criar loops de feedback que realimentam o sistema.

Combine métricas quantitativas com avaliação qualitativa human-in-the-loop. Para cada 100 consultas avaliadas automaticamente, selecione 10 aleatoriamente para revisão humana. Isso detecta padrões que métricas automáticas podem perder.

7. Ferramentas e Frameworks para Implementação

LangSmith oferece rastreamento integrado para pipelines RAG, permitindo visualizar quais chunks foram recuperados e como influenciaram a resposta. Sua interface de avaliação permite comparar diferentes configurações de chunkização e modelos.

DeepEval é uma biblioteca especializada com métricas prontas para RAG, incluindo Faithfulness, Hallucination e Contextual Relevancy. Sua integração com pytest facilita a criação de testes automatizados.

Exemplo prático de script de avaliação combinada:

from deepeval import evaluate
from deepeval.metrics import FaithfulnessMetric, AnswerRelevancyMetric
from deepeval.test_case import LLMTestCase

test_case = LLMTestCase(
    input="Explique o que é RAG",
    actual_output="RAG combina recuperação de documentos com geração de texto",
    retrieval_context=["RAG é uma técnica que combina recuperação de informação..."]
)

faithfulness = FaithfulnessMetric()
answer_relevancy = AnswerRelevancyMetric()

evaluate([test_case], [faithfulness, answer_relevancy])

A avaliação de sistemas RAG é um campo em evolução. Não existe métrica perfeita — cada uma captura um aspecto diferente. O segredo está na combinação inteligente de múltiplas métricas, validação humana periódica e monitoramento contínuo em produção. Comece pequeno, com um conjunto básico de métricas RAGAS, e expanda gradualmente conforme seu sistema amadurece.

Referências