O loop que aprende|INEMA.CLUB-PRO

Aula 6 · 18 min

O risco de otimizar contra o próprio medidor

Um loop que melhora a si mesmo vai achar o caminho mais curto para a nota subir, e o mais curto nem sempre é melhorar o sistema: pode ser decorar os casos ou mexer no medidor. Nesta aula você vê os dois atalhos virarem keep, fecha com medidor congelado fora do repo e casos escondidos, e vê uma mudança real do Claude cair.

Começar a aula
Termômetro de laboratório com uma chama aquecendo só o bulbo, enquanto um copo com gelo ao lado continua frio.

Nesta aula você vai

  1. 1Lei de Goodhart: a métrica que vira alvo deixa de medir
  2. 2Medidor congelado com hash, fora do alcance do agente
  3. 3Casos escondidos: o ganho tem de aparecer onde o agente não vê
  4. 4"Maximizar X sem piorar Y" como forma obrigatória

Objetivo: pegar o agente que melhora a nota sem melhorar o sistema: medidor com hash fora do repo e casos escondidos que o agente não vê.

01Por onde o loop engana a si mesmo

Três atalhos, duas guardas. Clique em cada bloco.

O exemplo do LOOP-R lista o mesmo padrão em negócio: pedir cliques ensina clickbait; pedir taxa de resposta ensina mensagens que provocam "pare de me mandar isso" (loop-r/docs/06 §4).

Detectar atalho em testes (conftest, skip, testes escondidos) e calibrar juiz por modelo é do curso 1, aulas 3, 4 e 6. Aqui: o loop que otimiza a própria métrica.

02Ensaio: os atalhos sem guarda e com guarda

Os mesmos agentes falsos, primeiro no experimento.sh puro, depois com GUARDA e ESCONDIDOS.

Terminal · ensaio sem custo
K=~/projetos/loop-r-eng-aprende-v72/kit
E=${TMPDIR:-/tmp}/ensaio-aprende/a6; rm -rf $E; mkdir -p $E
echo "## sem guarda: a métrica sobe e o sistema não melhora"
for m in decora mexe-casos; do
  bash $K/novo-sistema.sh $E/sis > /dev/null
  AGENTE="bash $K/agente-falso.sh $m" bash $K/experimento.sh $E/sis "$m"
  echo "  nos casos escondidos: $(python3 $K/medir.py $E/sis --casos $K/triagem/escondidos.jsonl)"
done
echo "## com guarda: medidor congelado fora do repo + casos que o agente não vê"
bash $K/novo-sistema.sh $E/sis > /dev/null; bash $K/experimento.sh --congelar $E/sis $E/medidor.sha256
export GUARDA=$E/medidor.sha256 ESCONDIDOS=$K/triagem/escondidos.jsonl
for m in mexe-casos decora sinonimos; do
  AGENTE="bash $K/agente-falso.sh $m" bash $K/experimento.sh $E/sis "$m"; echo "saída: $?"
done
Exemplo do repositório
## sem guarda: a métrica sobe e o sistema não melhora
ciclo 1 · keep · 0.700 → 1.000 · melhorou
  nos casos escondidos: acerto: 0.700 (21/30)
ciclo 1 · keep · 0.700 → 1.000 · melhorou
  nos casos escondidos: acerto: 0.700 (21/30)
## com guarda: medidor congelado fora do repo + casos que o agente não vê
medidor congelado em /tmp/ensaio-aprende/a6/medidor.sha256
ciclo 1 · discard · 0.700 → 0.700 · DESCARTADO: mexeu no medidor (casos.jsonl)
saída: 1
ciclo 2 · discard · 0.700 → 1.000 · DESCARTADO: ganho só no visível (escondidos 0.700 → 0.700)
saída: 1
ciclo 3 · keep · 0.700 → 0.800 · melhorou (escondidos 0.700 → 0.800)
saída: 0

Sem guarda, os dois atalhos dão 0.700 → 1.000 e keep, e os casos escondidos ficam em 21/30. Com guarda: mexer nos casos cai pelo hash, decorar cai pelos escondidos, e só os sinônimos (que melhoram de verdade, 21 → 24 de 30) passam.

03O mesmo risco na pesquisa

O que o artigo mede e o que ele mesmo conta de atalho.

1. Darwin Gödel Machine

Um arquivo de variantes de agente; uma variante fica quando o benchmark passa de um limiar. O artigo relata SWE-bench de 20,0% para 50,0% e Polyglot de 14,2% para 30,7%, em sandbox com supervisão humana.

É o loop desta aula em escala: o agente muda o próprio código e um benchmark decide.

04LOOP-R em vídeo: medir de verdade

A trilha 4 do LOOP-R (Nei Maldaner): metas infladas sem melhorar nada, amostra mínima e guarda-corpos.

LOOP-R, trilha 4: medir de verdade · 17 minPágina do vídeo com roteiro →

05Prática

Ensaio, depois o seu medidor.

E16 · Os dois atalhos

10 min

Rode o ensaio.

Pronto quando: sem guarda, as duas linhas keep · 0.700 → 1.000 e os escondidos em 21/30; com guarda, DESCARTADO: mexeu no medidor, DESCARTADO: ganho só no visível e um único saída: 0.

E17 · Congele o seu medidor

20 min

No seu sistema, separe o que mede (casos, script de medida, testes) do que o agente muda. Congele o que mede num manifesto fora do repo: na pasta do repo, python3 $K/hashes.py congelar [manifesto fora do repo] [arquivos que medem], ou bash $K/experimento.sh --congelar . [manifesto] com MEDIDOR exportado (aula 2, "Adaptar ao seu repo").

Pronto quando: python3 $K/hashes.py conferir [manifesto]; echo $? → 0; mude um caso de propósito → MUDOU: … e 1; desfaça.

E18 · Os seus escondidos

30 min

Separe pelo menos 20% dos seus casos reais para um arquivo fora do repo, que nunca entra no pedido ao agente. Rode o seu último keep contra eles. Com medidor seu, ESCONDIDOS só funciona se o comando de MEDIR aceitar --casos [arquivo].

Pronto quando: python3 $K/medir.py [repo] --casos [escondidos] (ou o seu MEDIR com --casos) imprime o acerto nos escondidos, e você anotou, no results.tsv ou no ledger, se o último keep acompanha nos escondidos.

06Teste da aula

Pergunta 1 de 4

O agente copiou o texto exato dos casos errados para as regras e a nota foi a 100%. O que denuncia o atalho?competência

07Em três frases

GoodhartA métrica que vira alvo é otimizada por qualquer caminho, inclusive decorar e mexer no medidor.
Medidor foraCasos e script de medida congelados com hash, num manifesto que o agente não alcança.
EscondidosKeep só quando o ganho aparece também em casos que o agente nunca viu.

Para ir além

Aula anteriorPróxima aula