Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models
Este artigo introduz o preenchimento no meio (FIM) consciente de funções durante o treinamento intermediário, uma abordagem de auto-supervisão que aproveita a similaridade estrutural entre loops de agentes de codificação e chamadas de função para aumentar significativamente o desempenho de agentes de codificação em benchmarks como o SWE-Bench, enquanto simultaneamente preserva as capacidades gerais de codificação e uso de ferramentas que frequentemente são degradadas pelo pós-treinamento padrão.
Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo
Imagine que você está ensinando um robô a consertar bugs em uma biblioteca de código gigante e bagunçada. Normalmente, ensinamos esses robôs deixando-os ler livros do início ao fim, da esquerda para a direita. Mas há um problema: quando um robô realmente vai consertar um bug, ele não apenas lê para frente. Ele dá um passo, observa o que aconteceu (talvez uma ferramenta tenha gerado um erro) e então decide o que fazer a seguir. É um loop: Ação → Observação → Próximo Passo.
O loop do robô se parece exatamente com uma chamada de função em um código de computador normal.
- A Ação do Robô é como uma função chamando outra função.
- A Observação do Robô é como aquela função retornando um valor.
- O Próximo Passo do Robô é como o resto do código usando esse valor.
A grande ideia? Em vez de apenas ler o código para frente, os autores ensinaram seus modelos de robô a jogar um jogo de "preencher a lacuna" com essas chamadas de função. Eles chamam isso de Function-Aware Fill-in-the-Middle (FIM) Mid-Training.
O Jogo: "Adivinhe a Peça Faltante"
Imagine que você tem uma história onde um personagem (o "chamador") pede a um amigo (o "chamado") para realizar uma tarefa, mas o trabalho real do amigo está oculto. O robô tem que adivinhar o que o amigo fez e explicar por que ele o fez, baseando-se apenas no contexto antes e depois.
Para tornar este jogo eficaz, os autores não apenas escolheram palavras aleatórias para esconder. Eles usaram um mapa especial do código (um "Grafo de Dependência de Programa") para encontrar os quebra-cabeças perfeitos. Eles procuraram por funções que fossem:
- Complexas o suficiente para serem um bom desafio (não muito fáceis, nem impossíveis).
- Previsíveis o suficiente para que o robô pudesse realmente entendê-las a partir das pistas ao redor.
Eles também fizeram o robô escrever uma "nota de raciocínio" (Chain-of-Thought) antes de escrever o código faltante, forçando-o a pensar antes de agir, exatamente como um programador humano faria.
Os Resultados: Isso Funciona?
Os autores testaram isso em três cérebros de robôs (modelos): dois da família Qwen2.5-Coder (7 bilhões e 14 bilhões de parâmetros) e um da nova família Qwen3 (8 bilhões de parâmetros). Eles treinaram esses robôs em um conjunto massivo de dados de 2,6 bilhões de tokens (palavras e símbolos) retirados de 968 repositórios de Python do mundo real.
Aqui está o que eles descobriram:
- Melhor em Consertar Bugs: Quando testados em um benchmark famoso chamado SWE-Bench-Verified (que simula problemas de software do mundo real), os robôs melhoraram significamente.
- O modelo 7B melhorou +2,8%.
- O modelo 14B melhorou +3,0%.
- O modelo 8B melhorou +3,2%.
- Ainda Melhor em Tarefas Mais Simples: Em uma versão mais leve do teste (SWE-Bench-Lite), os ganhos foram ainda maiores, com o modelo 8B saltando +5,4%.
- Funciona em Todo Lugar: Essas melhorias aconteceram mesmo quando os robôs foram treinados usando métodos diferentes posteriormente. Isso sugere que o treinamento "fill-in-the-middle" deu a eles uma base sólida que permaneceu, não importa como fossem polidos depois.
A Surpresa: Não Quebrou Outras Habilidades
Normalmente, quando você treina um robô para ser um superespecialista (como um agente de correção de bugs), ele esquece como fazer outras coisas, como escrever código simples ou usar ferramentas. Os autores temiam que isso acontecesse.
Mas o "mid-training" na verdade salvou as outras habilidades dos robôs!
- Sem este treinamento extra, os robôs pioravam na escrita de código por conta própria (caindo em benchmarks como o LiveCodeBench).
- Com o treinamento FIM, eles não apenas permaneceram iguais, eles ficaram melhores (+11,1% no LiveCodeBench).
- Embora os dados de treinamento fossem apenas código Python, os robôs melhoraram no uso de ferramentas em contextos completamente diferentes (como τ-bench e BFCL), sugerindo que aprenderam uma habilidade geral de "como pensar sobre causa e efeito" que se transferiu entre tarefas.
O Que Eles Explicitamente Descartaram
Os autores foram cuidadosos ao dizer o que este método não é:
- Não é apenas copiar um professor inteligente: Eles testaram se o robô estava apenas memorizando as respostas de uma IA poderosa (Gemini-3-Flash) que ajudou a gerar os dados de treinamento. Eles descobriram que, mesmo quando o robô gerava suas próprias notas de raciocínio, ele ainda melhorava. Portanto, a magia não é apenas "copiar o professor"; é a estrutura do próprio jogo.
- Não é uma solução mágica para tudo: O método funciona melhor quando o código é modular (dividido em funções organizadas). Se o código for um script gigante e bagunçado onde tudo está misturado, o método não funciona tão bem porque não consegue encontrar quebra-cabeças claros de "chamada de função" para resolver.
- Não foi comprovado para todas as linguagens ainda: Os dados de treinamento foram apenas Python. Embora os robôs tenham melhorado em outras tarefas, os autores admitem que ainda não provaram que isso funciona para Java, C++ ou Rust.
O Quão Certos Eles Estão?
Os autores estão bastante confiantes em seus números porque realizaram os testes três vezes com diferentes sementes aleatórias para garantir que os resultados não fossem apenas sorte. Eles mediram as melhorias precisamente (ex: +2,8%, +3,0%) e mostraram que os robôs consistentemente resolviam mais problemas e cometiam menos erros quando ficavam travados.
Eles sugerem que este estágio de "mid-training" é um elo perdido crucial. É como dar ao robô um tipo específico de treino de academia antes de enviá-lo para o mundo real, garantindo que ele tenha os músculos certos para lidar com o loop complexo de "agir, observar e continuar" sem perder suas outras habilidades.
Afogado em artigos na sua área?
Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.