04-05-01 — Métricas de RAG

⏱ 12 minFontes validadas em: 2026-04-29

TL;DR

RAG tem dois componentes avaliáveis: o retriever (recuperou os chunks certos?) e o generator (gerou resposta correta a partir dos chunks?). As métricas fundamentais são: faithfulness (resposta baseada no contexto?), answer relevance (resposta responde à pergunta?), context recall (contexto continha a resposta?), e context precision (contexto recuperado era relevante?). Sem ground truth, use LLM-as-judge.

Por que medir RAG é diferente

Sistemas RAG falham de formas silenciosas. A resposta pode parecer ótima mas estar errada porque:

  • O chunk certo não foi recuperado (falha do retriever)
  • O chunk foi recuperado mas o LLM ignorou ele e alucionou (falha do generator)
  • O chunk foi recuperado e usado, mas estava desatualizado (problema de dados)
  • Múltiplos chunks contraditórios foram recuperados

Para saber onde o sistema está falhando, você precisa de métricas específicas para cada componente.

Framework de métricas

flowchart LR subgraph INPUTS["Inputs para avaliação"] Q[Query] GT[Ground Truth\nresposta esperada] CTX[Contexto recuperado\nchunks retornados] ANS[Resposta gerada\npelo LLM] end subgraph RETRIEVAL["Métricas de Retrieval"] CR[Context Recall\nGT coberto pelo contexto?] CP[Context Precision\nContexto era relevante?] end subgraph GENERATION["Métricas de Geração"] F[Faithfulness\nResposta fiel ao contexto?] AR[Answer Relevance\nResposta responde à query?] AC[Answer Correctness\nResposta === GT?] end Q & CTX & GT --> CR & CP Q & CTX & ANS --> F & AR & AC

Métricas de Retrieval

Context Recall

Pergunta: "As informações necessárias para responder estavam nos chunks recuperados?"

Cálculo: proporção das sentenças da resposta esperada (ground truth) que podem ser atribuídas ao contexto recuperado.

Range: 0 a 1. Score baixo indica problema no retriever — os chunks certos não estão sendo encontrados.

Context Precision

Pergunta: "Os chunks recuperados eram relevantes para a query?"

Cálculo: proporção dos chunks recuperados que eram de fato relevantes para responder a query.

Range: 0 a 1. Score baixo indica ruído — muito lixo junto com a informação relevante. Isso dilui o contexto enviado ao LLM.

💡 Recall vs Precision no retrieval

É o tradeoff clássico de IR (Information Retrieval). Aumentar k (mais chunks recuperados) aumenta recall mas diminui precision. Re-ranking melhora precision sem sacrificar recall. O objetivo é maximizar os dois, mas em RAG, recall costuma ser mais crítico — é melhor ter ruído do que perder a informação certa.

Métricas de Geração

Faithfulness (Fidelidade)

Pergunta: "A resposta é suportada pelo contexto fornecido? Há alucinações?"

Cálculo: proporção das afirmações na resposta que podem ser verificadas no contexto recuperado.

Range: 0 a 1. Score de 1.0 = cada afirmação da resposta tem suporte no contexto. Score baixo = o LLM está inventando além do contexto.

# Exemplo de avaliação de faithfulness com LLM-as-judge
def evaluate_faithfulness(question: str, context: list[str], answer: str, llm) -> float:
    context_str = "\n".join(context)
    prompt = f"""Dada a seguinte resposta e o contexto utilizado para gerá-la,
avalie se CADA afirmação da resposta é suportada pelo contexto.

Contexto:
{context_str}

Resposta:
{answer}

Para cada afirmação na resposta, responda "suportada" ou "não suportada".
Calcule: afirmações_suportadas / total_afirmações.
Retorne apenas o número entre 0 e 1."""

    result = llm.invoke(prompt)
    return float(result.strip())

Answer Relevance

Pergunta: "A resposta realmente responde à pergunta feita?"

Cálculo: usando LLM-as-judge ou, no RAGAS, gerando N perguntas da resposta e medindo similaridade com a query original.

Range: 0 a 1. Detecta respostas verdadeiras mas fora de tópico.

Answer Correctness

Pergunta: "A resposta está factualmente correta comparada com o ground truth?"

Cálculo: F1 semântico entre a resposta gerada e a resposta esperada.

Requer ground truth — é a métrica mais difícil de coletar mas a mais direta.

Avaliação sem ground truth: LLM-as-judge

Para faithfulness e answer relevance, é possível avaliar sem ground truth usando um LLM como juiz. Funciona surpreendentemente bem e permite avaliar em produção.

def llm_judge_faithfulness(context_chunks: list[str], answer: str, judge_llm) -> dict:
    """Usa GPT-4o como juiz de faithfulness. Sem ground truth necessário."""
    context = "\n---\n".join(context_chunks)

    response = judge_llm.chat.completions.create(
        model="gpt-4o",
        messages=[{
            "role": "user",
            "content": f"""Analise se a resposta abaixo é fiel ao contexto fornecido.
Identifique quaisquer afirmações que não têm suporte no contexto.

CONTEXTO:
{context}

RESPOSTA A AVALIAR:
{answer}

Retorne JSON:
{{
  "score": <0.0 a 1.0>,
  "unsupported_claims": ["lista de afirmações sem suporte"],
  "verdict": "faithful|unfaithful|partially_faithful"
}}"""
        }],
        response_format={"type": "json_object"}
    )
    return json.loads(response.choices[0].message.content)
⚠️ LLM-as-judge tem vieses

LLMs tendem a ser mais permissivos com respostas longas e detalhadas, e a concordar com afirmações confiantes mesmo quando falsas. Calibre seu judge com casos conhecidos antes de confiar nos scores de produção. Use GPT-4o ou Claude Opus para avaliar — modelos menores como GPT-3.5 são menos confiáveis como juízes.

Construindo um test set de golden questions

O investimento mais valioso em avaliação de RAG é criar um conjunto de 50-100 pares (pergunta, resposta esperada) no seu domínio. Com isso, você pode medir context recall, context precision e answer correctness de forma objetiva.

QuantidadePropósitoTipo de pergunta
20-30Perguntas factuais simples"Qual é a multa por atraso no contrato X?"
15-20Perguntas de raciocínio"Compare as penalidades do contrato A e B"
10-15Perguntas fora do domínioEspera "não encontrei" como resposta correta
5-10Perguntas com data críticaTesta se o sistema usa doc correto por data

Como isso se conecta

Fontes

  1. Es, S. et al. (2023). RAGAS: Automated Evaluation of Retrieval Augmented Generation. arxiv.org/abs/2309.15217
  2. Zheng, L. et al. (2023). Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena. arxiv.org/abs/2306.05685
  3. Microsoft. Evaluation of RAG systems. learn.microsoft.com
  4. RAGAS Documentation. Metrics. docs.ragas.io