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.
- 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 XPDê 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.
Avalie a recuperação num conjunto de teste
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
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.
Uma verificação ingênua de fidelidade
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
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…