Seu RAG responde certo pelo motivo errado — meça contexto e fidelidade

|Autor: Equipe editorial da QUASA|5 min de leitura
Seu RAG responde certo pelo motivo errado — meça contexto e fidelidade

Para avaliar um RAG com Ragas, registre cada pergunta, as passagens entregues ao gerador, a resposta produzida e, quando houver, uma resposta de referência. Meça a recuperação e a geração separadamente: o catálogo de métricas do Ragas inclui precisão e cobertura do contexto, fidelidade, relevância da resposta e sensibilidade a ruído.

Uma resposta pode coincidir com a referência mesmo quando nenhuma passagem recuperada sustenta sua afirmação. Nesse caso, o resultado parece certo, mas não demonstra que o sistema usou a evidência. O trabalho que apresentou o RAGAs separa a avaliação da recuperação, do uso fiel das passagens e da qualidade da geração; parte dessas medidas dispensa respostas humanas de referência.

Monte casos que revelem falhas diferentes

Guarde os campos user_input, retrieved_contexts e response em cada registro. A demonstração de avaliação do Ragas também usa reference para a resposta esperada. Preserve em retrieved_contexts a ordem das passagens realmente enviadas ao gerador: a precisão do contexto considera se trechos úteis aparecem antes dos irrelevantes. Não substitua as passagens por documentos que deveriam ter sido encontrados, pois isso apagaria a falha da busca.

Um conjunto inicial deve representar as perguntas e os limites do seu corpus. Inclua uma pergunta respondida por uma única passagem, outra que exija combinar informações, uma busca que traga um trecho parecido mas inútil e uma pergunta cuja resposta não esteja disponível. Para os casos com resposta verificável, redija reference com o conteúdo esperado, sem copiar automaticamente a saída do RAG. Perguntas sem resposta disponível ajudam a observar se o sistema se abstém; não trate a ausência de informação como uma referência adequada para medir cobertura.

Considere um exemplo hipotético: uma política fictícia aceita trocas em até 30 dias. Para a pergunta “Qual é o prazo de troca?”, a referência diz “O prazo é de 30 dias”. Se a busca entregar primeiro uma passagem sobre prazo de entrega e depois a política de trocas, o gerador ainda poderá responder corretamente. O caso distingue a qualidade da resposta da ordenação das passagens, que é responsabilidade da recuperação.

Execute as métricas sobre a mesma amostra

O exemplo abaixo usa as classes da API de métricas por coleção, um modelo avaliador e um modelo de embeddings. Instale ragas e openai, configure OPENAI_API_KEY e substitua o registro hipotético pelos dados capturados do seu sistema. Cada chamada devolve uma pontuação para a mesma pergunta; os modelos avaliadores fazem chamadas externas e podem gerar custo.

from openai import AsyncOpenAI; from ragas.llms import llm_factory; from ragas.embeddings.base import embedding_factory

from ragas.metrics.collections import ContextPrecision, ContextRecall, Faithfulness, AnswerRelevancy

caso = {"user_input": "Qual é o prazo de troca?", "retrieved_contexts": ["Entregas ocorrem em até 5 dias.", "Trocas são aceitas em até 30 dias."], "response": "O prazo de troca é de 30 dias.", "reference": "O prazo de troca é de 30 dias."}

client = AsyncOpenAI(); llm = llm_factory("gpt-4o-mini", client=client); emb = embedding_factory("openai", model="text-embedding-3-small", client=client)

print("precisao_contexto", ContextPrecision(llm=llm).score(user_input=caso["user_input"], reference=caso["reference"], retrieved_contexts=caso["retrieved_contexts"]).value)

print("cobertura_contexto", ContextRecall(llm=llm).score(user_input=caso["user_input"], reference=caso["reference"], retrieved_contexts=caso["retrieved_contexts"]).value)

print("fidelidade", Faithfulness(llm=llm).score(user_input=caso["user_input"], response=caso["response"], retrieved_contexts=caso["retrieved_contexts"]).value)

print("relevancia_resposta", AnswerRelevancy(llm=llm, embeddings=emb).score(user_input=caso["user_input"], response=caso["response"]).value)

Repita as chamadas para cada registro e mantenha os textos originais junto das pontuações. ContextPrecision e ContextRecall, nessa configuração, precisam de reference; Faithfulness usa a resposta e as passagens, enquanto AnswerRelevancy usa a pergunta e a resposta. Essa diferença importa quando parte da amostra não possui referência revisada: ainda é possível avaliar aspectos da geração, mas a cobertura do contexto fica sem a comparação necessária.

Ligue cada sinal ao componente que pode falhar

Leia as métricas como medidas de aspectos distintos, não como parcelas de uma nota geral. Uma pontuação baixa indica onde investigar primeiro; a causa concreta aparece ao confrontar a pergunta, as passagens e a resposta do mesmo caso.

  • Precisão do contexto baixa → ordenação da busca. Passagens úteis estão abaixo de trechos irrelevantes. Examine a classificação dos resultados, os filtros e a divisão dos documentos em trechos.
  • Cobertura do contexto baixa → alcance da recuperação. Afirmações presentes na referência não encontram apoio nas passagens recuperadas. Verifique se a informação está no corpus e se a busca consegue encontrá-la.
  • Fidelidade baixa com contexto suficiente → geração. A resposta contém afirmações que não decorrem das passagens recebidas. Examine a afirmação específica e as instruções dadas ao gerador para usar o contexto.
  • Relevância da resposta baixa → atendimento à pergunta. A saída se desvia do pedido, omite uma parte necessária ou acrescenta conteúdo que não ajuda a respondê-lo. A métrica não mede, por si, a veracidade factual.

Se a resposta hipotética disser “30 dias” quando a busca trouxe apenas um trecho sobre entregas, sua coincidência com a referência não lhe dá apoio nas passagens. Uma fidelidade baixa sinaliza essa ausência, mas não revela se o modelo recorreu a conhecimento prévio ou acertou por acaso. O inverso também é possível: uma resposta pode ser fiel a uma passagem desatualizada. Nesse caso, a fidelidade mede o apoio no contexto recebido; a correção da informação exige conferir a passagem e a referência.

Meça o efeito do ruído e compare versões

Quando trechos pertinentes chegam misturados a distrações plausíveis, acrescente casos em que a resposta possa incorporar informação do trecho errado. NoiseSensitivity relaciona pergunta, referência, resposta e passagens para medir erros associados ao contexto recuperado; nessa métrica, valores menores são melhores. Ela complementa a precisão da busca: uma ordenação ruim mostra o ruído entregue ao gerador, enquanto a sensibilidade mostra se esse ruído contaminou a resposta.

Ao comparar versões do RAG, mantenha as mesmas perguntas, referências e configurações do avaliador. Se mudar a recuperação, observe se melhoraram precisão ou cobertura e se a resposta passou a usar a evidência encontrada. Se mudar o prompt ou o gerador, procure alterações em fidelidade e relevância para os mesmos casos. Conservar as pontuações por pergunta impede que uma média favorável esconda falhas repetidas em um tipo de consulta.

Leia também:

Compartilhar:

Assine nossa newsletter

Receba as últimas notícias sobre Web3, IA e cripto diretamente no seu e-mail.

0