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

Aula 6 · 22 min

Juiz por modelo com rubrica calibrada

Nem tudo vira teste: "a mensagem explica o porquê?" pede leitura. Um modelo pode julgar isso, desde que a rubrica seja sim/não, o julgamento se repita e o juiz tenha sido comparado com rótulos seus antes de valer. Nesta aula você calibra um juiz falso (que falha), depois um real, e vê a calibração achar uma rubrica ambígua.

Começar a aula
Balança de precisão de laboratório com pesos de calibração ao lado, sobre bancada escura.

Nesta aula você vai

  1. 1Rubrica sim/não, critério invariável e o que fica fora dela
  2. 2Três repetições, ordem embaralhada, vale a maioria
  3. 3Concordância e kappa: por que 80% pode não bastar
  4. 4Juiz sem resposta não é juiz que reprovou

Objetivo: escrever rubrica sim/não, rodar um juiz com repetições e só usá-lo depois de calibrado contra rótulos humanos.

01O juiz só vale depois de calibrado

Clique em cada etapa.

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

Vieses conhecidos do juiz por modelo: prefere a resposta mais longa, a posição de uma das opções numa comparação, e o estilo do próprio modelo.

02A rubrica do ensaio

Mensagens de commit escritas por um agente. 10 mensagens em kit/juiz/artefatos.jsonl, com os rótulos de uma pessoa em humano.csv.

kit/juiz/rubrica.md
# Rubrica — mensagem de commit escrita pelo agente

Critérios sim/não. Nunca nota de 1 a 10. (invariável) = um "nao" reprova a mensagem, independente do resto.
O que dá para checar por código (tamanho da 1ª linha, formato) NÃO entra aqui: vai para um teste.

R1 | A mensagem diz POR QUE a mudança foi feita, não só o que mudou? | qualidade
R2 | Toda MUDANÇA que a mensagem cita está no diff (não inventa arquivo, teste nem efeito)? O motivo pode vir de fora do diff. | invariável
R3 | Quem não viu o diff entende o que mudou só pela mensagem? | qualidade
Terminal · ensaio com o juiz falso
J=~/projetos/loop-r-eng-verificacao-v72/kit/juiz
python3 $J/juiz.py --rep 3 --saida /tmp/juiz-falso.csv
python3 $J/calibrar.py $J/humano.csv /tmp/juiz-falso.csv; echo "saída: $?"
Exemplo do repositório
a01  R1=sim R2=sim R3=sim
a02  R1=nao R2=sim R3=nao
a03  R1=sim R2=sim R3=sim
(… a04 a a10 …)
→ /tmp/juiz-falso.csv
10 artefatos rotulados pelos dois
R1  concordância 80%  kappa 0.55  REESCREVA ou troque o juiz  (discorda em a03 a09)
R2  concordância 70%  kappa 0.00  REESCREVA ou troque o juiz  (discorda em a03 a05 a09)
R3  concordância 100%  kappa 1.00  ok
JUIZ DESCALIBRADO em R1, R2: não use para aprovar
saída: 1

O juiz falso diz "sim" em R2 para tudo: nunca confere o diff. A calibração pegou. Repare em R1: 80% de concordância parece aprovar, mas o kappa (0,55) mostra que boa parte é acaso.

03O juiz real e o que a calibração achou

Sai da sua cota: 30 chamadas (10 mensagens × 3). Em 19/10/2026 isto rodou duas vezes; a primeira mostrou um defeito da rubrica, não do juiz.

Terminal · juiz real (continua do bloco anterior)
JUIZ_CMD='claude -p --tools ""' python3 $J/juiz.py --rep 3 --saida /tmp/juiz-real.csv
python3 $J/calibrar.py $J/humano.csv /tmp/juiz-real.csv; echo "saída: $?"
Exemplo do repositório
a01  R1=sim R2=sim R3=sim
a02  R1=nao R2=sim R3=nao
a03  R1=nao R2=nao R3=sim  instável: R1 2×1, R3 2×1  REPROVA (R2 invariável)
a04  R1=sim R2=sim R3=sim
a05  R1=sim R2=sim R3=sim
(… a06 a a08 …)
a09  R1=nao R2=nao R3=sim  instável: R1 2×1  REPROVA (R2 invariável)
a10  R1=sim R2=sim R3=sim
→ /tmp/juiz-real.csv
10 artefatos rotulados pelos dois
R1  concordância 100%  kappa 1.00  ok
R2  concordância 90%  kappa 0.74  ok  (discorda em a05)
R3  concordância 100%  kappa 1.00  ok
JUIZ CALIBRADO
saída: 0

Claude Code 2.1.303, modelo padrão da assinatura, 3 min 12 s. Divergência que sobrou: a05 diz que aumentar a sessão "melhora a segurança"; a pessoa marcou como efeito inventado, o juiz aceitou.

04Prática

Juiz falso, juiz real e a rubrica do seu caso.

E16 · Calibrar o juiz falso

10 min

Rode o ensaio com o juiz falso.

Pronto quando: a última linha antes do código é JUIZ DESCALIBRADO em R1, R2: não use para aprovar e saída: 1.

E17 · Calibrar o juiz real

15 min

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

Pronto quando: calibrar.py imprime uma linha para cada um de R1, R2 e R3 e termina em JUIZ CALIBRADO (código 0) ou JUIZ DESCALIBRADO (código 1). Se descalibrou, diga qual critério você reescreveria.

E18 · Rubrica e rótulos do seu caso

45 min

Escolha um artefato subjetivo do seu agente (resumo, resposta, mensagem). Escreva 3 critérios sim/não, um invariável, e rotule você mesmo 10 artefatos em humano.csv. Rode o juiz real e calibre.

Pronto quando: python3 $J/calibrar.py humano.csv /tmp/juiz.csv → primeira linha 10 artefatos rotulados pelos dois; cada critério com ok ou reescrito até ficar ok.

05Teste da aula

Pergunta 1 de 4

Por que a rubrica é sim/não e não nota de 1 a 10?competência

06Em três frases

Rubrica bináriaPerguntas de sim ou não, invariáveis eliminatórias; o que é checável por código vai para teste.
Repetir e calibrarTrês repetições com ordem embaralhada e, antes de usar, concordância de 80% e kappa de 0,6 contra rótulos seus.
Calibração acha rubrica ruimDivergência pode ser do critério, não do juiz; e juiz sem resposta é erro, não reprovação.

Para ir além

Aula anteriorPróxima aula