← Derniers articles
💬 NLP

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

Ce document introduit le pré-entraînement de type « fill-in-the-middle » (FIM) sensible aux fonctions, une approche auto-supervisée qui exploite la similitude structurelle entre les boucles d'agents de codage et les appels de fonctions pour augmenter considérablement les performances des agents de codage sur des benchmarks tels que SWE-Bench, tout en préservant simultanément les capacités générales de codage et d'utilisation d'outils souvent dégradées par le post-entraînement standard.

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

Publié 2026-07-15
📖 6 min de lecture🧠 Analyse approfondie

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

Article original sous licence CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Ceci est une explication générée par l'IA de l'article ci-dessous. Elle n'a pas été rédigée ni approuvée par les auteurs. Pour une précision technique, consultez l'article original. Lire la clause de non-responsabilité complète

Imaginez que vous enseigniez à un robot comment corriger des bugs dans une immense et désordonnée bibliothèque de code. Habituellement, nous enseignons ces robots en les laissant lire des livres du début à la fin, de gauche à droite. Mais il y a un problème : quand un robot va réellement corriger un bug, il ne se contente pas de lire vers l'avant. Il fait un pas, regarde ce qui s'est passé (peut-être qu'un outil a renvoyé une erreur), puis décide de ce qu'il doit faire ensuite. C'est une boucle : Action → Observation → Étape suivante.

Le cerveau du robot suit une boucle : l'Action du Robot est comme un appel de fonction dans un code informatique normal.

  • L'Action du Robot est comme une fonction qui en appelle une autre.
  • L'Observation du Robot est comme cette fonction qui renvoie une valeur.
  • L'Étape Suivante du Robot est comme le reste du code utilisant cette valeur.

La grande idée ? Au lieu de simplement lire le code vers l'avant, les auteurs ont appris à leurs modèles de robots à jouer à un jeu de « texte à trous » avec ces appels de fonctions. Ils appellent cela le Function-Aware Fill-in-the-Middle (FIM) Mid-Training (Entraînement intermédiaire par remplissage au milieu sensible aux fonctions).

Le Jeu : « Devine la pièce manquante »

Imaginez que vous avez une histoire où un personnage (l'« appelant ») demande à un ami (le « appelé ») d'accomplir une tâche, mais le travail réel de l'ami est caché. Le robot doit deviner ce que l'ami a fait et expliquer pourquoi il l'a fait, en se basant uniquement sur le contexte avant et après.

Pour rendre ce jeu efficace, les auteurs n'ont pas simplement choisi des mots au hasard pour les cacher. Ils ont utilisé une carte spéciale du code (un « Graphe de Dépendance de Programme » ou Program Dependency Graph) pour trouver les puzzles parfaits. Ils ont cherché des fonctions qui étaient :

  1. Assez complexes pour constituer un bon défi (ni trop faciles, ni impossibles).
  2. Assez prévisibles pour que le robot puisse réellement les déduire grâce aux indices environnants.

Ils ont également fait écrire au robot une « note de raisonnement » (une Chaîne de Pensée ou Chain-of-Thought) avant d'écrire le code manquant, le forçant ainsi à réfléchir avant d'agir, tout comme un programmeur humain le ferait.

Les Résultats : Est-ce que ça marche ?

Les auteurs ont testé cette méthode sur trois cerveaux de robots différents (modèles) : deux issus de la famille Qwen2.5-Coder (7 milliards et 14 milliards de paramètres) et un issu de la nouvelle famille Qwen3 (8 milliards de paramètres). Ils ont entraîné ces robots sur un ensemble massif de données de 2,6 milliards de tokens (mots et symboles) provenant de 968 dépôts de code Python réels.

Voici ce qu'ils ont trouvé :

  • Meilleure correction de bugs : Testés sur un benchmark célèbre appelé SWE-Bench-Verified (qui simule des problèmes logiciels réels), les robots se sont nettement améliorés.
    • Le modèle 7B s'est amélioré de +2,8 %.
    • Le modèle 14B s'est amélioré de +3,0 %.
    • Le modèle 8B s'est amélioré de +3,2 %.
  • Encore meilleur sur les tâches plus simples : Sur une version plus légère du test (SWE-Bench-Lite), les gains étaient encore plus élevés, avec le modèle 8B bondissant de +5,4 %.
  • Cela fonctionne partout : Ces améliorations se sont produites même lorsque les robots étaient entraînés avec différentes méthodes par la suite. Cela suggère que l'entraînement « fill-in-the-middle » leur a donné une base solide qui perdure, peu importe la façon dont ils sont polis plus tard.

La Surprise : Cela n'a pas cassé les autres compétences

Généralement, quand on entraîne un robot pour qu'il soit un super-spécialiste (comme un agent de correction de bugs), il oublie comment faire d'autres choses, comme écrire du code simple ou utiliser des outils. Les auteurs craignaient que cela ne se produise.

Mais le « mid-training » a en fait sauvé les autres compétences des robots !

  • Sans cet entraînement supplémentaire, les robots devenaient moins bons pour écrire du code de manière autonome (en chutant sur des benchmarks comme LiveCodeBench).
  • Avec l'entraînement FIM, ils n'ont pas seulement maintenu leur niveau, ils sont devenus meilleurs (+11,1 % sur LiveCodeBench).
  • Même si les données d'entraînement étaient uniquement du code Python, les robots sont devenus meilleurs pour utiliser des outils dans des contextes complètement différents (comme τ-bench et BFCL), ce qui suggère qu'ils ont appris une compétence générale de « réflexion sur la cause et l'effet » qui se transfère d'une tâche à l'autre.

Ce qu'ils ont explicitement écarté

Les auteurs ont pris soin de préciser ce que cette méthode n'est pas :

  • Ce n'est pas juste copier un professeur intelligent : Ils ont testé si le robot se contentait de mémoriser les réponses d'une IA puissante (Gemini-3-Flash) qui a aidé à générer les données d'entraînement. Ils ont découvert que même lorsque le robot générait ses propres notes de raisonnement, il s'améliorait toujours. Donc, la magie n'est pas simplement de « copier le professeur », c'est la structure même du jeu.
  • Ce n'est pas un remède miracle pour tout : La méthode fonctionne mieux lorsque le code est modulaire (découpé en fonctions nettes). Si le code est un script géant et désordonné où tout est mélangé, la méthode fonctionne moins bien car elle ne peut pas trouver de puzzles clairs de type « appel de fonction » à résoudre.
  • Ce n'est pas encore prouvé pour tous les langages : Les données d'entraînement étaient uniquement en Python. Bien que les robots soient devenus meilleurs dans d'autres tâches, les auteurs admettent qu'ils n'ont pas encore prouvé que cela fonctionne pour Java, C++ ou Rust.

À quel point sont-ils sûrs d'eux ?

Les auteurs sont assez confiants dans leurs chiffres car ils ont effectué les tests trois fois avec différentes graines aléatoires (random seeds) pour s'assurer que les résultats n'étaient pas dus à la chance. Ils ont mesuré les améliorations avec précision (par exemple, +2,8 %, +3,0 %) et ont montré que les robots résolvaient systématiquement plus de problèmes et commettaient moins d'erreurs lorsqu'ils étaient bloqués.

Ils suggèrent que cette étape de « mid-training » est un maillon manquant crucial. C'est comme donner au robot un type d'entraînement spécifique à la salle de sport avant de l'envoyer dans le monde réel, afin de s'assurer qu'il possède les bons muscles pour gérer la boucle complexe « agir, observer et continuer » sans perdre ses autres capacités.

Noyé(e) sous les articles dans votre domaine ?

Recevez des digests quotidiens des articles les plus récents correspondant à vos mots-clés de recherche — avec des résumés techniques, dans votre langue.

Essayer Digest →