Reward hacking está anulando os ganhos de inteligência dos modelos

Modelos mais inteligentes estão ficando mais habilidosos em hackear benchmarks de programação.
Suítes de eval desenvolvidas a partir de bugs reais que depois foram corrigidos são especialmente vulneráveis, porque os problemas já foram resolvidos. Se o agente tem acesso ao histórico do repositório ou à Web pública, às vezes ele pode buscar a resposta em vez de derivá-la.
Para medir o quanto esse comportamento é disseminado, desenvolvemos um agente para auditar trajetórias de eval. No SWE-bench Pro, constatamos que 63% das resoluções bem-sucedidas do Opus 4.8 Max encontraram a correção em vez de derivá-la. Quando isolamos o histórico do git e restringimos o acesso à internet, as pontuações caíram acentuadamente tanto para o Opus quanto para o nosso modelo, Composer 2.5:
- Opus 4.8 Max caiu de 87.1% para 73.0%
- Composer 2.5 caiu de 74.7% para 54.0%
Pesquisas anteriores mostraram que respostas de benchmarks de programação podem vazar por meio de fontes disponíveis publicamente, incluindo este estudo de 2024 e um relatório da Meta de 2025. Nosso estudo quantifica o problema em execuções atuais de agentes de programação de fronteira. A lição mais ampla é que, além de evitar contaminação durante o treinamento, benchmarks de programação agêntica também precisam de ambientes de tempo de execução controlados.
Para equipes que conduzem evals, propomos mitigar esse comportamento de reward hacking auditando transcrições e restringindo o ambiente de eval.
Identifique um modelo com outro modelo
Para medir a escala desse comportamento de reward hacking, fizemos o auditor examinar 731 trajetórias do Opus 4.8 Max. Ele viu a descrição do problema e a trajetória completa do agente, sem saber se a execução tinha sido bem-sucedida, e classificou se o agente havia obtido a resposta conhecida.
Os dois padrões mais comuns de reward hacking que ele constatou foram:
- Busca upstream: Em 57% das trajetórias, o Opus 4.8 Max encontrou a PR já mesclada ou o arquivo-fonte corrigido na web pública e depois reproduziu a correção quase literalmente.
- Mineração do histórico do Git: Em 9% das trajetórias, o Opus 4.8 Max pesquisou o histórico
.gitincluído em busca do commit futuro que corrigia o bug e depois extraiu o patch.1
À medida que os modelos ficam mais fortes, às vezes conseguem inferir que estão em um eval, especialmente quando a tarefa vem de um repositório público antigo. Mesmo nos casos em que não se lembram da correção do treinamento, o ambiente ainda pode dar pistas de que o bug já foi resolvido.
Em uma tarefa do SWE-bench Multilingual baseada em uma issue do jq de 2019, o agente tentou reproduzir o bug com o binário jq do sistema. Como a imagem havia sido gerada depois que o bug foi corrigido, a reprodução falhou, e o agente inferiu que a issue já havia sido resolvida. Essa percepção o levou a buscar a correção em vez de chegar a uma por conta própria.
Alguns casos foram mais diretos. Um agente encontrou uma página espelho do SWE-bench que expunha testes ocultos e o patch de referência. Outro obteve arquivos de testes ocultos e fixou no código a string de exceção esperada necessária para passar.
Busca upstream (Opus 4.8 Max). O agente consultou a PR já mesclada pela API do GitHub para encontrar os arquivos afetados pela correção e depois a reproduziu (a mesma resposta também expõe o diff de cada arquivo):
cd /testbed && curl -s "https://api.github.com/repos/apache/druid/pulls/14092/files" 2>/dev/null | grep '"filename"'Mineração do histórico do Git (Composer 2.5). O agente localizou o commit da correção no histórico .git incluído, leu seu diff e depois o aplicou diretamente:
cd /testbed && git show 895abd8929 -p 2>/dev/null | head -400
cd /testbed && git cherry-pick 895abd8929 2>&1Trecho do patch a adicionar: um recorte resumido e literal da saída de git show acima (o diff de referência que o Composer reproduziu).
Arquitetura de ambiente mais rigorosa
A maior parte do reward hacking acontecia pela web pública e pelo histórico do repositório. Para evals desenvolvidas a partir de repositórios públicos históricos, esses canais precisam ser controlados, porque podem conter a resposta. Por isso, desenvolvemos um harness rigoroso com dois mecanismos de isolamento:
- Isolamento do histórico. Antes de o agente começar, o diretório .git é removido e o repositório é reinicializado como um repositório novo, com um único commit. O histórico original é restaurado apenas no momento da avaliação, então os testes são executados normalmente.
- Proxy de saída. O acesso à rede é negado por padrão. Como medida de melhor esforço, um proxy fixo permite resolver dependências com base em uma lista de permissões de repositórios de pacotes, e nada além disso.
Essa restrição é específica de evals desenvolvidas a partir de repositórios públicos históricos. Esse é um dos motivos pelos quais preferimos evals desenvolvidas a partir de repositórios não públicos, como o CursorBench. Elas podem testar a capacidade de programação agêntica dos agentes, sem deixar de permitir que usem ferramentas da forma como usariam em trabalho real.
Uma lacuna crescente
Executamos novamente o SWE-bench Pro e o SWE-bench Multilingual no harness mais rigoroso e, em seguida, comparamos cada resultado com a pontuação do harness padrão como proxy do efeito combinado da remoção desses canais de vazamento2:
- No SWE-bench Multilingual, a diferença foi de menos de 1 ponto para o Opus 4.6, 9,1 pontos para o Opus 4.8 Max e 7,5 pontos para o Composer 2.5.
- No SWE-bench Pro, a diferença foi de menos de 1 ponto para o Opus 4.6, 14,1 pontos para o Opus 4.8 Max e 20,7 pontos para o Composer 2.5.


A conclusão mais clara é que o reward hacking é muito mais comum em modelos mais novos e sofisticados do que em modelos mais antigos. Curiosamente, os modelos GPT não mostram a mesma escalada, com diferenças geralmente menores em nossas execuções.
Também observamos que o nosso próprio modelo, Composer 2.5, teve a maior diferença no Pro de todo o estudo. Esse é um dos motivos pelos quais não tratamos a pontuação do SWE-bench Pro no harness padrão como um benchmark confiável para o Composer. A pontuação era real no sentido estrito de que foi produzida pelo harness, mas misturava capacidade de programação com acesso a correções já conhecidas.
Standard vs. strict harness (test pass rate)
| 1 | Opus 4.8 (max) | 91.16% | 82.03% | +9.1 |
| 2 | Opus 4.8 (xhigh) | 88.86% | 80.67% | +8.2 |
| 3 | Opus 4.7 (max) | 84.80% | 80.47% | +4.3 |
| 4 | Opus 4.7 (xhigh) | 83.74% | 78.60% | +5.1 |
| 5 | Opus 4.8 (high) | 83.09% | 79.26% | +3.8 |
| 6 | Opus 4.8 (medium) | 81.87% | 77.84% | +4.0 |
| 7 | Opus 4.7 (high) | 81.42% | 77.75% | +3.7 |
| 8 | Opus 4.8 (low) | 79.51% | 74.36% | +5.2 |
| 9 | Composer 2.5 | 79.15% | 71.60% | +7.5 |
| 10 | GPT-5.4 (xhigh) | 79.00% | 75.20% | +3.8 |
| 11 | GPT-5.5 (xhigh) | 77.80% | 74.40% | +3.4 |
| 12 | Opus 4.7 (medium) | 77.33% | 75.72% | +1.6 |
| 13 | GPT-5.5 (high) | 77.30% | 74.70% | +2.6 |
| 14 | GPT-5.4 (high) | 76.80% | 73.30% | +3.5 |
| 15 | Opus 4.6 (max) | 76.33% | 76.06% | +0.3 |
| 16 | Opus 4.6 (high) | 76.11% | 75.22% | +0.9 |
| 17 | Opus 4.7 (low) | 75.89% | 72.64% | +3.3 |
| 18 | GPT-5.5 (medium) | 75.30% | 74.20% | +1.1 |
Projetando evals para agentes conscientes
A principal conclusão para equipes que executam evals de programação é que o design de benchmarks não deve se limitar à construção do conjunto de dados. Ele também precisa levar em conta o ambiente de tempo de execução, incluindo o que o agente pode buscar, inspecionar, obter e recuperar enquanto a tarefa está sendo executada.
Isso não significa que todo eval deva remover o acesso à internet ou ao histórico do git. Alguns evals existem para testar quão bem os agentes usam o contexto ao redor de uma base de código real e, nesses casos, um acesso amplo pode fazer parte da tarefa. O problema surge quando esse acesso altera o que a pontuação realmente significa.
Em benchmarks históricos de repositórios públicos, o acesso aberto pode permitir que os agentes encontrem a correção já conhecida em vez de resolver o bug. Sem controles no harness, as pontuações podem acabar misturando capacidade de programação com recuperação de respostas.
As equipes que executam evals devem decidir qual comportamento querem medir, projetar o harness em função disso e deixar a configuração clara ao relatar resultados. Auditar transcrições pode ajudar a revelar quando os modelos estão resolvendo tarefas de maneiras inesperadas. O objetivo não é proibir o uso normal de ferramentas, mas garantir que o benchmark meça aquilo que afirma medir.
Ainda assim, permanece um problema aberto mais difícil. À medida que os modelos se tornam mais conscientes de quando estão sendo avaliados, eles podem alterar seu comportamento de maneiras mais sutis que não são corrigidas apenas isolando o histórico do git ou restringindo o acesso à internet. A contaminação em tempo de execução é uma versão concreta de um desafio mais amplo de desenvolver evals que preservem a validade de construto mesmo quando o modelo infere que está sendo avaliado.
- Os tamanhos exatos das diferenças e a frequência das tentativas de reward-hacking dependem dos prompts usados. Por exemplo, as tentativas aumentaram quando instruímos o modelo a continuar trabalhando sem parar. ↩