Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models
Este artículo introduce el preentrenamiento de relleno en medio (FIM) consciente de funciones, un enfoque de aprendizaje autosupervisado que aprovecha la similitud estructural entre los bucles de los agentes de codificación y las llamadas a funciones para aumentar significativamente el rendimiento de los agentes de codificación en evaluaciones como SWE-Bench, preservando simultáneamente las capacidades generales de codificación y uso de herramientas que a menudo se degradan con el postentrenamiento estándar.
Artículo original bajo licencia CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo
Imagina que le estás enseñando a un robot a reparar errores en una biblioteca de código gigante y desordenada. Normalmente, enseñamos a estos robots dejándoles leer libros de principio a fin, de izquierda a derecha. Pero hay un problema: cuando un robot va realmente a reparar un error, no solo lee hacia adelante. Da un paso, observa lo que sucedió (quizás una herramienta arrojó un error) y luego decide qué hacer después. Es un bucle: Acción → Observación → Siguiente Paso.
El autor de este artículo notó algo genial: este bucle del robot se parece exactamente a una llamada a una función en el código de un ordenador normal.
- La Acción del Robot es como una función llamando a otra función.
- La Observación del Robot es como esa función devolviendo un valor.
- El Siguiente Paso del Robot es como el resto del código utilizando ese valor.
¿La gran idea? En lugar de solo leer el código hacia adelante, los autores enseñaron a sus modelos de robot a jugar a un juego de "completar el espacio en blanco" con estas llamadas a funciones. Lo llaman Entrenamiento Intermedio de FIM con Conciencia de Función (Function-Aware Fill-in-the-Middle Mid-Training).
El Juego: "Adivina la Pieza Faltante"
Imagina que tienes una historia donde un personaje (el "llamador") le pide a un amigo (el "llamado") que realice una tarea, pero el trabajo real del amigo está oculto. El robot tiene que adivinar qué hizo el amigo y explicar por qué lo hizo, basándose únicamente en el contexto anterior y posterior.
Para que este juego sea efectivo, los autores no solo eligieron palabras al azar para ocultar. Utilizaron un mapa especial del código (un "Grafo de Dependencia de Programa") para encontrar los rompecabezas perfectos. Buscaron funciones que fueran:
- Lo suficientemente complejas como para ser un buen desafío (no demasiado fáciles, ni imposibles).
- Lo suficientemente predecibles para que el robot pudiera realmente deducirlas a partir de las pistas circundantes.
También hicieron que el robot escribiera una "nota de razonamiento" (una Cadena de Pensamiento o Chain-of-Thought) antes de escribir el código faltante, obligándolo a pensar antes de actuar, tal como lo haría un programador humano.
Los Resultados: ¿Funciona?
Los autores probaron esto en tres cerebros de robot diferentes (modelos): dos de la familia Qwen2.5-Coder (7 mil millones y 14 mil millones de parámetros) y uno de la nueva familia Qwen3 (8 mil millones de parámetros). Entrenaron a estos robots en un conjunto de datos masivo de 2.6 mil millones de tokens (palabras y símbolos) tomados de 968 repositorios de código Python del mundo real.
Esto es lo que encontraron:
- Mejor en la Reparación de Errores: Al ser probados en un benchmark famoso llamado SWE-Bench-Verified (que simula problemas de software del mundo real), los robots mejoraron significativamente.
- El modelo de 7B mejoró un +2.8%.
- El modelo de 14B mejoró un +3.0%.
- El modelo de 8B mejoró un +3.2%.
- Aún Mejor en Tareas Más Fáciles: En una versión más ligera de la prueba (SWE-Bench-Lite), las ganancias fueron aún mayores, con el modelo de 8B saltando un +5.4%.
- Funciona en Todas Partes: Estas mejoras ocurrieron incluso cuando los robots fueron entrenados utilizando diferentes métodos posteriormente. Esto sugiere que el entrenamiento "fill-in-the-middle" les dio una base sólida que perduró, sin importar cómo fueran pulidos después.
La Sorpresa: No Arruinó Otras Habilidades
Normalmente, cuando entrenas a un robot para que sea un súper-especialista (como un agente de reparación de errores), olvida cómo hacer otras cosas, como escribir código simple o usar herramientas. Los autores temían que esto sucediera.
Pero, el "entrenamiento intermedio" en realidad salvó las otras habilidades de los robots!
- Sin este entrenamiento adicional, los robots empeoraban al escribir código por su cuenta (cayendo en benchmarks como LiveCodeBench).
- Con el entrenamiento FIM, no solo se mantuvieron iguales, sino que se volvieron mejores (+11.1% en LiveCodeBench).
- Aunque los datos de entrenamiento eran solo código Python, los robots mejoraron en el uso de herramientas en contextos completamente diferentes (como τ-bench y BFCL), lo que sugiere que aprendieron una habilidad general de "cómo pensar sobre la causa y el efecto" que se transfirió a otras tareas.
Lo Que Descartaron Explícitamente
Los autores fueron cuidadosos al decir lo que este método no es:
- No es solo copiar a un profesor inteligente: Probaron si el robot solo estaba memorizando las respuestas de una IA poderosa (Gemini-3-Flash) que ayudó a generar los datos de entrenamiento. Descubrieron que incluso cuando el robot generaba sus propias notas de razonamiento, seguía mejorando. Por lo tanto, la magia no es solo "copiar al profesor"; es la estructura del juego en sí misma.
- No es una solución mágica para todo: El método funciona mejor cuando el código es modular (dividido en funciones ordenadas). Si el código es un script gigante y desordenado donde todo está mezclado, el método no funciona tan bien porque no puede encontrar rompecabezas claros de "llamada a función" para resolver.
- Aún no está probado para todos los lenguajes: Los datos de entrenamiento fueron solo Python. Aunque los robots mejoraron en otras tareas, los autores admiten que no han demostrado que esto funcione para Java, C++ o Rust todavía.
¿Qué Tan Seguros Están?
Los autores están bastante seguros de sus números porque realizaron las pruebas tres veces con diferentes semillas aleatorias para asegurar que los resultados no fueran solo suerte. Midieron las mejoras con precisión (por ejemplo, +2.8%, +3.0%) y demostraron que los robots resolvían consistentemente más problemas y cometían menos errores cuando se quedaban atascados.
Sugieren que esta etapa de "entrenamiento intermedio" es un eslabón perdido crucial. Es como darle al robot un tipo específico de entrenamiento de gimnasio antes de enviarlo al mundo real, asegurando que tenga los músculos adecuados para manejar el complejo bucle de "actuar, observar y continuar" sin perder sus otras capacidades.
¿Ahogado en artículos de tu campo?
Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.