Verificação e Evals|INEMA.CLUB-PRO

Aula 5 · 20 min

Conjunto de ouro: evals do seu agente

Mudou o prompt, trocou o modelo, instalou uma skill: o agente ficou melhor ou só diferente? Um conjunto de ouro é uma lista congelada de casos reais com a resposta certa, conferida por código, que você roda a cada mudança. Nesta aula você monta um, compara duas versões e vê uma regressão escondida atrás do mesmo total.

Começar a aula
Gaveta de aço aberta com cartões de amostra e peças de referência em compartimentos.

Nesta aula você vai

  1. 1O formato do caso: id, categoria, entrada, esperado, origem
  2. 2Os três tipos de corretor: código, modelo e pessoa
  3. 3Placar por categoria e regressão caso a caso
  4. 4Quando o conjunto ficou fácil demais

Objetivo: montar um conjunto de ouro com casos reais, nota por código e comparação com a versão anterior que acusa regressão.

01Do erro real ao veredito de regressão

Clique em cada etapa.

Clique em cada bloco do diagrama para ver o que ele faz.

Corretor por código primeiro; por modelo só no que é subjetivo (aula 6); por pessoa para calibrar os dois.

02Regras de um conjunto de ouro

Das fontes: Anthropic (evals de agentes), LOOP-R e a formação FEC.

1. Três corretores

Por código (testes, análise estática, conferir chamadas de ferramenta), por modelo (rubrica, comparação em pares, vários juízes) e por pessoa.

O corretor por modelo precisa ser calibrado com rótulos humanos antes de valer.

03O conjunto e o agente do ensaio

Um agente de triagem de issues: devolve tipo (bug, pedido, dúvida) e se é urgente. Os 10 casos são exemplos escritos para o curso.

kit/evals/casos.jsonl (3 de 10 linhas)
{"id": "t01", "categoria": "bug", "entrada": "Depois do deploy de ontem, o login retorna erro 500 para todos os usuários.", "espera": {"tipo": "bug", "urgente": true}, "origem": "exemplo do curso"}
{"id": "t06", "categoria": "pedido", "entrada": "Vocês podem adicionar exportação em PDF?", "espera": {"tipo": "pedido", "urgente": false}, "origem": "exemplo do curso"}
{"id": "t07", "categoria": "armadilha", "entrada": "O sistema não funciona como eu esperava: onde fica a opção de modo escuro?", "espera": {"tipo": "duvida", "urgente": false}, "origem": "exemplo do curso: parece bug, é dúvida"}
kit/evals/prompt-triagem.md
Você faz a triagem de issues de um sistema web. Leia a issue no fim e classifique.

tipo: "bug" (algo quebrado), "pedido" (funcionalidade nova) ou "duvida" (pergunta de uso).
urgente: true só se há sistema fora do ar, perda de dinheiro ou de dados, ou falha de segurança.

Responda só com uma linha de JSON, sem mais nada:
{"tipo": "bug", "urgente": false}
Terminal · ensaio: versão 1 contra versão 2
E=~/projetos/loop-r-eng-verificacao-v72/kit/evals; mkdir -p /tmp/ensaio-evals
A="python3 $E/agente-triagem-falso.py"
TRIAGEM_VERSAO=1 python3 $E/rodar-evals.py --agente "$A" --saida /tmp/ensaio-evals/v1.tsv; echo "saída: $?"
TRIAGEM_VERSAO=2 python3 $E/rodar-evals.py --agente "$A" --saida /tmp/ensaio-evals/v2.tsv \
  --base /tmp/ensaio-evals/v1.tsv; echo "saída: $?"
Exemplo do repositório
armadilha  0/1
bug        5/5
duvida     2/2
pedido     2/2
total      9/10 (90%)  → /tmp/ensaio-evals/v1.tsv
saída: 0
armadilha  1/1
bug        5/5
duvida     2/2
pedido     1/2
total      9/10 (90%)  → /tmp/ensaio-evals/v2.tsv
MELHOROU  t07
REGRESSÃO t06 (passava em v1.tsv)
1 regressão(ões): não promova
saída: 1

As duas versões fazem 9/10. A versão 2 consertou a armadilha (t07) e quebrou um pedido (t06, que termina em "?" e virou dúvida). Só o total diria "empate".

04O mesmo conjunto com o agente real

Sai da sua cota: 10 chamadas. Cada chamada é um claude -p sem ferramentas.

Terminal · real (continua do bloco anterior)
python3 $E/rodar-evals.py --agente 'claude -p --tools ""' --saida /tmp/ensaio-evals/real.tsv \
  --base /tmp/ensaio-evals/v1.tsv; echo "saída: $?"
# ou: --agente 'codex exec -s read-only --skip-git-repo-check -'
wc -l < /tmp/ensaio-evals/real.tsv
Exemplo do repositório
armadilha  1/1
bug        5/5
duvida     2/2
pedido     2/2
total      10/10 (100%)  → /tmp/ensaio-evals/real.tsv
MELHOROU  t07
sem regressão
saída: 0
11

Claude Code 2.1.303, modelo padrão da assinatura, 1 min 19 s para os 10 casos. O placar do modelo pode mudar na sua máquina; o arquivo com 11 linhas (cabeçalho + 10), não.

05Prática

Ensaio, real e o conjunto do seu agente.

E13 · A regressão escondida

10 min

Rode o ensaio das duas versões.

Pronto quando: v1 imprime total 9/10 (90%) e saída: 0; v2 imprime REGRESSÃO t06 (passava em v1.tsv) e saída: 1.

E14 · O mesmo conjunto com o modelo

10 min

Rode o bloco real com claude -p ou codex exec.

Pronto quando: o comando termina com uma linha total e wc -l < /tmp/ensaio-evals/real.tsv → 11.

E15 · O conjunto de ouro do seu agente

40 min

Escolha um agente ou prompt seu com saída conferível. Escreva 20 casos no formato do casos.jsonl, começando pelas falhas que você já viu, e um prompt que peça JSON. Rode a versão atual como base.

Pronto quando: wc -l < [seus casos].jsonl → 20 ou mais, e python3 $E/rodar-evals.py --agente "[seu agente]" --casos [seus casos].jsonl --prompt [seu prompt] --saida base.tsv imprime a linha total com menos de 100%.

06Teste da aula

Pergunta 1 de 4

A versão 2 tem o mesmo total da versão 1. O que o rodar-evals.py diz?competência

07Em três frases

Casos reais, congeladosUma linha de JSON por caso, com esperado e origem; mudar um caso é versão nova da régua.
Código corrigePeça JSON e confira campo a campo; juiz por modelo só para o subjetivo.
Regressão bloqueiaCompare caso a caso com a versão anterior; total igual pode esconder troca.

Para ir além

Aula anteriorPróxima aula