Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models
Dieses Paper führt die funktionsbewusste Fill-in-the-Middle (FIM) Mid-Training-Methode ein, einen selbstüberwachten Ansatz, der die strukturelle Ähnlichkeit zwischen Coding-Agent-Schleifen und Funktionsaufrufen nutzt, um die Leistung von Coding-Agenten auf Benchmarks wie SWE-Bench signifikant zu steigern und gleichzeitig die allgemeinen Coding- und Tool-Use-Fähigkeiten bewahrt, die durch Standard-Post-Training oft beeinträchtigt werden.
Originalarbeit lizenziert unter CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Dies ist eine KI-generierte Erklärung des untenstehenden Papers. Sie wurde nicht von den Autoren verfasst oder gebilligt. Für technische Genauigkeit konsultieren Sie das Originalpaper. Vollständigen Haftungsausschluss lesen
Stellen Sie sich vor, Sie bringen einem Roboter bei, Fehler in einer riesigen, unordentlichen Bibliothek aus Code zu beheben. Normalerweise bringen wir diese Roboter bei, indem wir sie Bücher von Anfang bis Ende lesen lassen, von links nach rechts. Aber es gibt ein Problem: Wenn ein Roboter tatsächlich einen Fehler behebt, liest er nicht einfach nur vorwärts. Er macht einen Schritt, schaut sich an, was passiert ist (vielleicht hat ein Werkzeug eine Fehlermeldung ausgegeben), und entscheidet dann, was als Nächstes zu tun ist. Es ist eine Schleife: Aktion → Beobachtung → Nächster Schritt.
Die Autoren dieser Arbeit haben etwas Cooles bemerkt: Diese Roboterschleife sieht exakt wie ein Funktionsaufruf in normalem Computercode aus.
- Die Aktion des Roboters ist wie ein Funktionsaufruf einer anderen Funktion.
- Die Beobachtung des Roboters ist wie der Rückgabewert, den diese Funktion liefert.
- Der nächste Schritt des Roboters ist wie der Rest des Codes, der diesen Wert verwendet.
Die große Idee? Anstatt den Code einfach nur vorwärts zu lesen, brachten die Autoren ihrem Robotermodell ein „Lückentext-Spiel“ mit diesen Funktionsaufrufen bei. Sie nennen dies Function-Aware Fill-in-the-Middle (FIM) Mid-Training.
Das Spiel: „Rate das fehlende Teil“
Stellen Sie sich eine Geschichte vor, in der eine Figur (der „Aufrufer“) einen Freund (den „Aufgerufenen“) bittet, eine Aufgabe zu erledigen, aber die eigentliche Arbeit des Freundes ist verborgen. Der Roboter muss erraten, was der Freund getan hat, und erklären, warum er es getan hat, basierend auf dem Kontext davor und danach.
Um dieses Spiel effektiv zu machen, haben die Autoren nicht einfach zufällige Wörter versteckt. Sie nutzten eine spezielle Karte des Codes (einen „Program Dependency Graph“), um die perfekten Rätsel zu finden. Sie suchten nach Funktionen, die:
- Komplex genug waren, um eine gute Herausforderung zu sein (nicht zu einfach, nicht unmöglich).
- Vorhersehbar genug waren, damit der Roboter sie tatsächlich aus den umgebenden Hinweisen ableiten konnte.
Sie brachten dem Roboter auch bei, eine „Begründungsnotiz“ (einen Chain-of-Thought) zu schreiben, bevor er den fehlenden Code schreibt, was ihn dazu zwingt, nachzudenken, bevor er handelt – genau wie ein menschlicher Programmierer.
Die Ergebnisse: Funktioniert es?
Die Autoren testeten dies an drei verschiedenen Robotern (Modellen): zwei aus der Qwen2.5-Coder-Familie (7 Milliarden und 14 Milliarden Parameter) und eines aus der neueren Qwen3-Familie (8 Milliarden Parameter). Sie trainierten diese Roboter auf einem massiven Datensatz von 2,6 Milliarden Token (Wörtern und Symbolen), der aus 968 realen Python-Code-Repositories stammt.
Hier ist, was sie herausfanden:
- Besser im Beheben von Fehlern: Bei einem Test auf einem berühmten Benchmark namens SWE-Bench-Verified (der reale Softwareprobleme simuliert), verbesserten sich die Roboter signifikant.
- Das 7B-Modell verbesserte sich um +2,8 %.
- Das 14B-Modell verbesserte sich um +3,0 %.
- Das 8B-Modell verbesserte sich um +3,2 %.
- Noch besser bei leichteren Aufgaben: Auf einer leichteren Version des Tests (SWE-Bench-Lite) waren die Gewinne sogar noch höher, wobei das 8B-Modell um +5,4 % sprang.
- Es funktioniert überall: Diese Verbesserungen traten auch auf, wenn die Roboter danach mit verschiedenen Methoden weiter trainiert wurden. Dies deutet darauf an, dass das „Fill-in-the-Middle“-Training ihnen ein solides Fundament gab, das Bestand hatte, egal wie sie später noch verfeinert wurden.
Die Überraschung: Es hat andere Fähigkeiten nicht zerstört
Normalerweise trainiert man einen Roboter zu einem Super-Spezialisten (wie einem Bug-Fixing-Agenten), und er vergisst dabei andere Dinge, wie das Schreiben von einfachem Code oder die Nutzung von Werkzeugen. Die Autoren befürchteten, dass dies passieren würde.
Aber das „Mid-Training“ hat die anderen Fähigkeiten der Roboter sogar gerettet!
- Ohne dieses zusätzliche Training wurden die Roboter schlechter im eigenständigen Code schreiben (sie fielen in Benchmarks wie LiveCodeBench ab).
- Mit dem FIM-Training blieben sie nicht nur gleich, sondern wurden sogar besser (+11,1 % auf LiveCodeBench).
- Obwohl die Trainingsdaten nur aus Python-Code bestanden, wurden die Roboter auch besser darin, Werkzeuge in völlig anderen Kontexten zu nutzen (wie τ-bench und BFCL), was darauf hindeutet, dass sie eine allgemeine Fähigkeit zum „Nachdenken über Ursache und Wirkung“ gelernt haben, die auf andere Aufgaben übertragbar ist.
Was sie explizit ausgeschlossen haben
Die Autoren waren vorsichtig zu betonen, was diese Methode nicht ist:
- Es geht nicht nur darum, einen klugen Lehrer zu kopieren: Sie testeten, ob der Roboter lediglich die Antworten eines leistungsfähigen KI-Modells (Gemini-3-Flash) auswendig lernte, das bei der Generierung der Trainingsdaten half. Sie fanden heraus, dass sich der Roboter selbst dann verbesserte, wenn er seine eigenen Begründungsnotizen generierte. Der Zauber liegt also nicht im bloßen „Kopieren des Lehrers“, sondern in der Struktur des Spiels selbst.
- Es ist kein Allheilmittel für alles: Die Methode funktioniert am besten, wenn der Code modular ist (in saubere Funktionen unterteilt). Wenn der Code ein riesiges, unordentliches Skript ist, in dem alles vermischt ist, funktioniert die Methode nicht so gut, weil sie keine klaren „Funktionsaufruf“-Rätsel finden kann.
- Es ist noch nicht für alle Sprachen bewiesen: Die Trainingsdaten waren nur Python. Obwohl die Roboter in anderen Bereichen besser wurden, geben die Autoren zu, dass sie noch nicht bewiesen haben, dass dies auch für Java, C++ oder Rust gilt.
Wie sicher sind sie sich?
Die Autoren sind sehr zuversichtlich in ihre Zahlen, da sie die Tests dreimal mit unterschiedlichen Random Seeds durchgeführt haben, um sicherzustellen, dass die Ergebnisse nicht nur Glück waren. Sie haben die Verbesserungen präzise gemessen (z. B. +2,8 %, +3,0 %) und gezeigt, dass die Roboter konsistent mehr Probleme lösten und weniger Fehler machten, wenn sie feststeckten.
Sie legen nahe, dass dieses „Mid-Training“ ein entscheidendes fehlendes Bindeglied ist. Es ist, als würde man dem Roboter vor dem Einsatz in der echten Welt ein spezifisches Krafttraining geben, um sicherzustellen, dass er die richtigen „Muskeln“ hat, um die komplexe Schleife aus „Handeln, Beobachten und Fortfahren“ zu bewältigen, ohne dabei seine anderen Fähigkeiten zu verlieren.
Ertrinken Sie in Arbeiten in Ihrem Fachgebiet?
Erhalten Sie tägliche Digests der neuesten Arbeiten passend zu Ihren Forschungsbegriffen — mit technischen Zusammenfassungen, in Ihrer Sprache.