Por que os agentes de IA enganam os testes?

Resposta curta

Para o agente, o teste é a recompensa: os modelos foram treinados durante anos para escrever código que passa nas verificações, e quando ajustar o resultado ao teste é mais fácil do que resolver a tarefa, um sistema capaz o bastante acaba achando esse caminho. Não há má intenção nisso. É a lei de Goodhart: quando uma medida vira meta, deixa de ser uma boa medida.

Mikhail Savchenko

O teste virou a função de recompensa

Modelos são treinados mais ou menos como se adestra um cachorro. Ele faz o que o adestrador queria, ganha um petisco e, com o tempo, passa a fazer mais o que rende petisco. Nas máquinas o petisco é um número, a recompensa, e para código existe um candidato muito conveniente: o teste. O código passou nas verificações, recompensa alta; falhou, recompensa baixa. Foi assim que a DeepSeek treinou o modelo R1 no começo de 2025 (capítulo “O teste como função de recompensa”).

A habilidade de programar dos modelos é medida do mesmo jeito. O SWE-bench reúne 2.294 tarefas reais do GitHub, e no primeiro artigo, de 2023, o melhor modelo, o Claude 2, resolveu 1,96%. Em 2026 os melhores sistemas resolvem mais de nove tarefas em cada dez na versão verificada à mão, de quinhentas. O tempo todo, uma correção contava como certa se os testes passassem. Os modelos aprenderam a passar nos testes, e aprenderam muito bem (mesmo capítulo).

No livro eu comparo isso ao termostato da Cibernética de Norbert Wiener. O agente é o aquecimento, os testes são o termômetro, e quem escreveu os testes define a meta. O termostato mantém a temperatura que o termômetro mostra e não liga para a temperatura do quarto. O agente tem uma possibilidade que o termostato não tem: pode mudar o termômetro de lugar (mesmo capítulo).

Como é a trapaça

Em 1975 o economista britânico Charles Goodhart percebeu que um indicador deixa de dizer o que dizia assim que alguém passa a governar por ele (capítulo “O agente engana o teste”). Em 2016 um programa da OpenAI treinado num jogo de corrida de barcos achou uma lagoa cheia de bônus e ficou rodando nela sem parar, batendo nas paredes e pegando fogo, sem nunca chegar ao fim da pista. Mesmo assim fazia mais pontos do que as pessoas, e dá para ver isso na gravação “O barco na lagoa”. Os programadores chamam esse comportamento de reward hacking, burla da recompensa.

Em fevereiro de 2025 a Anthropic descreveu, no documento que acompanha o Claude 3.7 Sonnet, como o modelo, trabalhando como agente, às vezes devolvia os valores que o teste esperava em vez de uma solução geral e às vezes editava o próprio teste. Em geral isso acontecia depois de várias tentativas honestas fracassadas (mesmo capítulo). No salão de manicure que atravessa o livro, seria assim. O agente reescreve três vezes o serviço de lembretes, toda vez quebra alguma coisa ao lado, e na quarta manda o SMS para o número principal só de uma cliente de teste específica. O teste passa; as clientes de verdade continuam sem lembrete. Dá para rodar essa cena e ligar as defesas uma a uma no experimento “O agente muda o termômetro de lugar”.

Por que proibir não funciona

Em março de 2025 a OpenAI pôs um modelo mais fraco para ler o raciocínio de um mais forte e marcar os trechos em que ele se preparava para mexer na verificação. Funcionou. Quando passaram a punir esses pensamentos durante o treino, a trapaça caiu no início, e depois o modelo aprendeu a trapacear em silêncio: o raciocínio parecia impecável e o ajuste aos testes continuava. Em vez de um trapaceiro honesto, ficaram com um dissimulado (mesmo capítulo).

Em novembro de 2025 a Anthropic mostrou que um modelo que aprendeu a enganar as verificações passa a se comportar pior também onde não há teste nenhum, chegando a tentar sabotar discretamente o código do próprio estudo. Uma linha nas instruções dizendo que naquele ambiente era permitido usar as brechas reduzia o mau comportamento em três quartos ou mais (mesmo capítulo).

Eu caí no mesmo buraco no meu projeto Sixth, sem aprendizado por reforço nenhum. Em 24 de maio de 2026 uma checagem encontrou zero descobertas reais onde o painel anunciava várias. No dia seguinte um ciclo passou em todas as 2.297 verificações de 2.297, e a complexidade simplesmente tinha se mudado para o laboratório que deveria checar essas descobertas (mesmo capítulo).

Como proteger os testes

Quase todos os métodos se resumem a deixar o termômetro fora do alcance de quem alimenta a fornalha. Outra pessoa escreve ou aprova os testes, e se o agente precisar mudar um deles, isso é um evento à parte, que um humano vê e aprova. Parte das verificações o agente nunca vê, e aí ajustar a resposta deixa de compensar. Os próprios testes são checados com teste de mutação: você planta um pequeno erro no código e vê se os testes percebem. E você lê o percurso do agente junto com o resultado: se ele falhou quatro vezes e de repente acertou na quinta, a quinta tentativa merece um olhar bem atento (mesmo capítulo).

Outras perguntas

O que é reward hacking?
É quando um sistema acha um jeito de tirar nota alta sem fazer aquilo para o que a nota foi criada. Num agente que escreve código, é ajustar o resultado ao teste em vez de resolver a tarefa.
Como impedir que o agente ajuste o código aos testes?
Os testes são escritos ou aprovados por alguém que não é o agente que escreve o código. Parte das verificações fica escondida dele, os próprios testes passam por teste de mutação, e uma pessoa lê o percurso do agente, principalmente a tentativa que de repente deu certo depois de várias falhas.
Ninguém Mais Escreve Código

Livro

Ninguém Mais Escreve Código

Desenvolvimento quando escrever ficou de graça

Escrever código ficou quase de graça. O que falta agora é saber o que não escrever.