E13 · A regressão escondida
10 minRode 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.
Aula 5 · 20 min
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
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.
Clique em cada etapa.
Corretor por código primeiro; por modelo só no que é subjetivo (aula 6); por pessoa para calibrar os dois.
Das fontes: Anthropic (evals de agentes), LOOP-R e a formação FEC.
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.
O LOOP-R pede de 20 a 50 casos por eval de artefato e trata menos de 30 observações como sinal fraco.
O ensaio usa 10 casos para caber na tela; o seu começa com 20.
O conjunto da formação FEC traz id do conjunto, data de congelamento, e por caso: id, pergunta, fatos esperados e categoria.
Na versão de 02/05/2026 ele anuncia 30 casos e tem 3 preenchidos: estrutura boa não é conjunto pronto. Conte as linhas antes de confiar no placar.
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.
{"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"}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}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: $?"
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".
Placar agregado esconde troca: um caso melhora, outro piora, o número fica igual. Compare caso a caso com a versão anterior e trate qualquer regressão como bloqueio, mesmo com o total subindo.
Sai da sua cota: 10 chamadas. Cada chamada é um claude -p sem ferramentas.
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
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.
Um conjunto que o agente acerta inteiro não separa a versão boa da ruim: qualquer mudança vai dar 100%. Quando isso acontece, acrescente casos mais difíceis (as armadilhas reais, as entradas ambíguas) até o placar voltar a ter onde errar.
Ensaio, real e o conjunto do seu agente.
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.
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.
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%.
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
Pergunta 2 de 4
Quando usar corretor por código em vez de juiz por modelo?competência
Pergunta 3 de 4
O agente real acertou 10 de 10. O que fazer com o conjunto?
Pergunta 4 de 4
De onde vêm os melhores casos de um conjunto de ouro?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.