← Ultimi articoli
💬 NLP

Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models

Questo articolo introduce il pre-addestramento function-aware fill-in-the-middle (FIM), un approccio auto-supervisionato che sfrutta la somiglianza strutturale tra i cicli degli agenti di codifica e le chiamate di funzione per aumentare significativamente le prestazioni degli agenti di codifica su benchmark come SWE-Bench, preservando simultaneamente le capacità generali di codifica e di uso di strumenti che spesso vengono degradate dal post-addestramento standard.

Autori originali: Yubo Wang, Jiarong Liang, Yuxuan Zhang, Xuye Liu, Cong Wei, Yuyu Zhang, Ping Nie, Wenhu Chen

Pubblicato 2026-07-15
📖 5 min di lettura🧠 Approfondimento

Autori originali: Yubo Wang, Jiarong Liang, Yuxuan Zhang, Xuye Liu, Cong Wei, Yuyu Zhang, Ping Nie, Wenhu Chen

Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo

Immagina di insegnare a un robot come correggere i bug in una gigantesca e disordinata biblioteca di codice. Di solito, insegniamo a questi robot facendo leggere loro i libri dall'inizio alla fine, da sinistra a destra. Ma c'è un problema: quando un robot va effettivamente a correggere un bug, non si limita a leggere in avanti. Compie un passo, guarda cosa è successo (magari uno strumento ha restituito un errore) e poi decide cosa fare dopo. È un ciclo: Azione → Osservazione → Passo Successivo.
L'azione del robot è come una funzione che chiama un'altra funzione.
L'osservazione del robot è come quella funzione che restituisce un valore.
Il passo successivo del robot è come il resto del codice che utilizza quel valore.
La grande idea? Invece di far leggere semplicemente il codice in avanti, gli autori hanno insegnato ai loro modelli robot a giocare a un gioco di "riempimento degli spazi vuoti" con queste chiamate di funzione. Lo chiamano Function-Aware Fill-in-the-Middle (FIM) Mid-Training.

Il Gioco: "Indovina il Pezzo Mancante"

Immagina di avere una storia in cui un personaggio (il "chiamante") chiede a un amico (il "chiamato") di svolgere un compito, ma il lavoro effettivo dell'amico è nascosto. Il robot deve indovinare cosa ha fatto l'amico e spiegare perché lo ha fatto, basandosi solo sul contesto precedente e successivo.
Per rendere efficace questo gioco, gli autori non hanno scelto casualmente le parole da nascondere. Hanno usato una mappa speciale del codice (un "Program Dependency Graph") per trovare gli enigmi perfetti. Cercavano funzioni che fossero:

  1. Abbastanza complesse da rappresentare una buona sfida (non troppo facili, non impossibili).
  2. Abbastanza prevedibili affinché il robot potesse effettivamente capirle partendo dagli indizi circostanti.

Hanno anche fatto scrivere al robot una "nota di ragionamento" (una Chain-of-Thought) prima di scrivere il codice mancante, costringendolo a pensare prima di agire, proprio come farebbe un programmatore umano.

I Risultati: Funziona?

Gli autori hanno testato questo metodo su tre diversi cervelli robotici (modelli): due della famiglia Qwen2.5-Coder (7 miliardi e 14 miliardi di parametri) e uno della più recente famiglia Qwen3 (8 miliardi di parametri). Hanno addestrato questi robot su un enorme dataset di 2,6 miliardi di token (parole e simboli) tratti da 968 repository Python reali.

Ecco cosa hanno scoperto:

  • Migliore nel correggere i bug: Quando testati su un celebre benchmark chiamato SWE-Bench-Verified (che simula problemi software del mondo reale), i robot sono migliorati significativamente.
    • Il modello da 7B è migliorato del +2,8%.
    • Il modello da 14B è migliorato del +3,0%.
    • Il modello da 8B è migliorato del +3,2%.
  • Ancora migliore nei compiti più semplici: Su una versione più leggera del test (SWE-Bench-Lite), i guadagni sono stati ancora più alti, con il modello da 8B che è balzato del +5,4%.
  • Funziona ovunque: Questi miglioramenti si sono verificati anche quando i robot venivano addestrati usando metodi diversi successivamente. Ciò suggerisce che l'addestramento "fill-in-the-middle" ha fornito loro una solida base che è rimasta costante, indipendentemente da quanto venissero rifiniti in seguito.

La Sorpresa: Non ha distrutto altre abilità

Di solito, quando si addestra un robot per essere un super-specialista (come un agente per la correzione dei bug), esso dimentica come fare altre cose, come scrivere codice semplice o usare strumenti. Gli autori temevano che questo sarebbe accaduto.
Ma il "mid-training" ha effettivamente salvato le altre abilità dei robot!

  • Senza questo addestramento extra, i robot diventavano meno bravi a scrivere codice autonomamente (scendendo nei benchmark come LiveCodeBench).
  • Con l'addestramento FIM, non solo sono rimasti uguali, ma sono diventati più bravi (+11,1% su LiveCodeBench).
  • Nonostante i dati di addestramento fossero solo codice Python, i robot sono diventati più bravi a usare strumenti in contesti completamente diversi (come τ-bench e BFCL), suggerendo che hanno appreso una capacità generale di "pensare a causa ed effetto" che si è trasferita ad altri compiti.

Ciò che hanno esplicitamente escluso

Gli autori sono stati cauti nel precisare cosa questo metodo non sia:

  • Non è solo copiare un insegnante intelligente: Hanno testato se il robot stesse solo memorizzando le risposte di un'IA potente (Gemini-3-Flash) che ha aiutato a generare i dati di addestramento. Hanno scoperto che anche quando il robot generava le proprie note di ragionamento, migliorava comunque. Quindi, la magia non è solo "copiare l'insegnante"; è la struttura stessa del gioco.
  • Non è una bacchetta magica per tutto: Il metodo funziona meglio quando il codice è modulare (diviso in funzioni ordinate). Se il codice è un enorme script disordinato dove tutto è mescolato, il metodo non funziona altrettanto bene perché non riesce a trovare enigmi chiari basati sulle "chiamate di funzione".
  • Non è ancora provato per tutti i linguaggi: I dati di addestramento erano solo Python. Sebbene i robot siano diventati più bravi in altri compiti, gli autori ammettono di non aver ancora dimostrato che questo funzioni per Java, C++ o Rust.

Quanto sono sicuri?

Gli autori sono piuttosto fiduciosi nei loro numeri perché hanno eseguito i test tre volte con diversi seed casuali per assicurarsi che i risultati non fossero frutto del caso. Hanno misurato i miglioramenti con precisione (ad esempio, +2,8%, +3,0%) e hanno dimostrato che i robot risolvevano costantemente più problemi e commettevano meno errori quando si trovavano in difficoltà.

Suggeriscono che questo stadio di "mid-training" sia l'anello mancante fondamentale. È come dare al robot un tipo specifico di allenamento in palestra prima di mandarlo nel mondo reale, assicurandosi che abbia i muscoli giusti per gestire il complesso ciclo di "agire, osservare e continuare" senza perdere le sue altre capacità.

Sommerso dagli articoli nel tuo campo?

Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.

Prova Digest →