Carregando
0x70Lição 8 de 11

Avalie um sistema de RAG

Monte um conjunto de teste, meça a recuperação e as respostas separadamente e pegue as regressões antes dos usuários.

24 min Questionário com 6 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Montar um conjunto de avaliação representativo
  • Calcular precision@k, recall@k, MRR e nDCG
  • Medir a fidelidade das respostas e conhecer os limites dos juízes automáticos

Não dá para melhorar o que você não mede - e o RAG tem muitos botões (tamanho do chunk, k, pesos da busca híbrida, reranker, prompt). Comece com um conjunto de avaliação: 50-200 perguntas realistas, cada uma com os chunks que a respondem e uma resposta de referência. Inclua paráfrases, perguntas com várias partes, perguntas de diferentes perfis de usuário e perguntas sem resposta que o sistema deve recusar.

Depois meça as duas etapas separadamente, para saber de onde veio uma falha:

  • Recuperação: os chunks certos voltaram? → precision@k, recall@k, MRR, nDCG.
  • Geração: dados os chunks, a resposta está correta, é relevante e é fiel (toda afirmação sustentada pelo contexto)?

Experimente

Até 15 XP

Dê notas a dois recuperadores

A pergunta é “Como redefino uma senha esquecida?”, e 3 chunks do corpus são relevantes. Compare os sistemas, mude o k e clique nos resultados para mudar o julgamento de relevância deles. Que métrica recompensa colocar um resultado relevante bem no topo?

Precisão@3

33%

Parcela dos k primeiros que é relevante

Recall@3

33%

Parcela dos 3 chunks relevantes encontrada nos k primeiros

MRR

33%

1 / posição do primeiro resultado relevante

nDCG@3

23%

Recompensa resultados relevantes perto do topo

Clique em um resultado para mudar a avaliação de relevância. Os resultados depois de k ficam esmaecidos: eles não contam.

Julgando as respostas

As respostas são mais difíceis de pontuar do que os rankings. As equipes combinam:

  • Fidelidade / fundamentação: a proporção de afirmações que o contexto sustenta.
  • Relevância e correção da resposta em relação à resposta de referência.
  • LLM como juiz: um modelo dá notas às respostas com uma rubrica. Escala bem, mas tem vieses - compare as notas dele com uma amostra de avaliações humanas antes de confiar nele.
  • Abstenção: nas perguntas sem resposta, ele recusou?

Verificações simples de sobreposição de palavras são baratas, mas cegas ao significado: “não está coberto” e “está coberto” têm quase todas as palavras em comum. O exercício abaixo mostra exatamente essa falha.

Rode a avaliação a cada mudança (um novo tamanho de chunk, um novo modelo), como uma suíte de testes, e acompanhe a latência e o custo junto com a qualidade.

Principais conclusões

  • Monte um conjunto de avaliação com os chunks esperados, respostas de referência e perguntas sem resposta.

  • Meça a recuperação (recall@k, MRR, nDCG) separadamente da geração (fidelidade, correção).

  • Use juízes LLM com cuidado e rode as avaliações a cada mudança.

Quiz da aula

6 perguntas · aprovação com 5 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em Python

Escreva código Python no editor e execute os testes com exemplos. O Python roda localmente no navegador usando WebAssembly.

Exercício 1

Avalie a recuperação num conjunto de teste

+25 XP

A primeira linha é k. Cada linha seguinte é question|retrieved ids|relevant ids (ids separados por vírgula, os recuperados na ordem do ranking). Imprima question recall@k=R rr=X para cada uma (2 casas decimais; a posição recíproca só conta os k primeiros) e depois mean recall@k=R MRR@k=X.

  • Três perguntas
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Exercício 2

Uma verificação ingênua de fidelidade

+25 XP

A primeira linha é o contexto recuperado; cada linha seguinte é uma frase da resposta. Para cada frase, pegue as palavras com mais de 3 letras (em minúsculas, [a-z0-9]+) e calcule a proporção delas que aparece entre as palavras do contexto. Imprima 0.75 supported: sentence quando a proporção for de pelo menos 0.6; caso contrário, ... unsupported: ... (2 casas decimais); depois imprima faithfulness: S/T.

Depois olhe com atenção a segunda frase: ela é mesmo sustentada?

  • Resposta sobre garantia
main.py
Carregando editor…

O Python é executado em um ambiente isolado no navegador, com limite de 60 segundos. O runtime é carregado pelo CDN do Pyodide; seu código permanece neste navegador.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…