Function-Aware Fill-in-the-Middle as Mid-Training for Coding Agent Foundation Models
本論文は、コーディングエージェントのループと関数呼び出しの間の構造的類似性を活用することで、SWE-Benchのようなベンチマークにおけるコーディングエージェントの性能を大幅に向上させると同時に、標準的な事後学習によってしばしば低下する一般的なコーディングおよびツール使用能力を維持する、自己教師あり学習による関数認識型フィルイン・ザ・ミドル(FIM)中間学習を導入するものである。
原論文は CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/) でライセンスされています。 これは以下の論文のAI生成解説です。著者が執筆または承認したものではありません。技術的な正確性については原論文を参照してください。 免責事項の全文を読む
巨大で乱雑なコードのライブラリにあるバグを修正するロボットに、その方法を教えていると想像してみてください。通常、私たちはロボットに対し、本を最初から最後まで左から右へと読み進めるように教えます。しかし、問題があります。実際にバグを修正しに行く際、ロボットはただ前方に読み進めるだけではありません。一歩踏み出し、何が起きたか(例えばツールがエラーを出したなど)を確認し、次に何をすべきかを決定します。これはループなのです:アクション → 観測 → 次のステップ。
この論文の著者たちは、面白いことに気づきました。このロボットのループは、通常のコンピュータコードにおける**関数呼び出し(function call)**と全く同じ形をしているのです。
- ロボットのアクションは、ある関数が別の関数を呼び出すことに似ています。
- ロボットの観測は、その関数が値を返すことに似ています。
- ロボットの次のステップは、その値を使用して残りのコードを実行することに似ています。
ここでの大きなアイデアとは?単にコードを前方へ読み進めるのではなく、著者たちはロボットモデルに、これらの関数呼び出しを用いた「穴埋めゲーム」を教えたのです。彼らはこれを関数認識型・中間埋め込み(Function-Aware Fill-in-the-Middle: FIM)ミッドトレーニングと呼んでいます。
ゲームの内容:「欠けているピースを推測せよ」
物語の中で、登場人物(「呼び出し手」)が友人(「呼び出される側」)にタスクを依頼しますが、友人が実際に行った作業は隠されています。ロボットは、前後の文脈のみに基づいて、その友人が何をしたのか、そして「なぜ」そうしたのかを推測しなければなりません。
このゲームを効果的なものにするために、著者たちは単にランダムに単語を隠したわけではありません。彼らはコードの特別なマップ(プログラム依存グラフ:Program Dependency Graph)を使用して、完璧なパズルを見つけ出しました。彼らは以下の条件を満たす関数を探しました:
- 良い挑戦となるのに十分な複雑さを持っていること(簡単すぎず、不可能でもない)。
- 周囲の手がかりからロボットが実際に解明できるほど予測可能であること。
また、彼らはロボットに、コードを書く前に「推論ノート(Chain-of-Thought)」を書かせ、人間プログラマーが行うように、行動する前に考えさせるようにしました。
結果:それは機能するか?
著者たちは、3つの異なるロボットの脳(モデル)でテストを行いました。Qwen2.5-Coderファミリーの2つ(70億および140億パラメータ)と、新しいQwen3ファミリーの1つ(80億パラメータ)です。彼らは、968個の実世界のPythonコードリポジトリから抽出された、26億トークン(単語や記号)という膨大なデータセットを用いて、これらのロボットを訓練しました。
結果は以下の通りです:
- バグ修正能力の向上: 実世界のソフトウェアの問題をシミュレートした有名なベンチマークであるSWE-Bench-Verifiedでテストしたところ、ロボットは大幅に改善しました。
- 7Bモデルは**+2.8%**向上。
- 14Bモデルは**+3.0%**向上。
- 8Bモデルは**+3.2%**向上。
- より簡単なタスクではさらに高い成果: より軽量なバージョンのテスト(SWE-bench-Lite)では、改善幅はさらに大きく、8Bモデルは**+5.4%**跳ね上がりました。
- どこでも通用する: これらの改善は、その後異なる手法で訓練を行った場合でも発生しました。これは、「中間埋め込み(fill-in-the-middle)」による訓練が、後の微調整に関わらず定着する強固な基礎を与えたことを示唆しています。
驚きの事実:他のスキルを壊さなかった
通常、ロボットを特定のスペシャリスト(バグ修正エージェントなど)として訓練すると、単純なコードを書いたりツールを使ったりといった他の能力を忘れてしまいます。著者たちもこれが起こるのではないかと懸れていました。
しかし、「ミッドトレーニング」は、ロボットの他のスキルをむしろ救い上げました!
- この追加訓練がなかった場合、ロボットは自力でコードを書く能力が低下していました(LiveCodeBenchなどのベンチマークで低下)。
- しかし、FIMトレーニングを行うことで、低下するどころか、むしろ向上しました(LiveCodeBenchで**+11.1%**)。
- 訓練データはPythonコードのみであったにもかかわらず、ロボットは全く異なるコンテキスト(τ-benchやBFCLなど)でのツールの使用においても向上しました。これは、彼らが「原因と結果について考える方法」という一般的なスキルを学習し、それがタスクを超えて転移したことを示唆しています。
明確に否定されたこと
著者たちは、この手法が「何ではないか」についても慎重に述べています:
- 賢い教師の模倣ではない: 彼らは、訓練データの生成を助けた強力なAI(Gemini-3-Flash)をロボットが単にコピーしているだけではないかを検証しました。ロボットが独自の推論ノートを生成した場合でも、依然として改善が見られたため、魔法の正体は単なる「教師のコピー」ではなく、ゲームの構造そのものであることが分かりました。
- あらゆるものに対する万能薬ではない: この手法は、コードがモジュール化(関数ごとに綺麗に分割)されている場合に最も効果を発揮します。もしコードが、すべてが混ざり合った巨大で乱雑なスクリプトである場合、明確な「関数呼び出し」のパズルを見つけることができないため、この手法はうまく機能しません。
- まだ全ての言語で証明されていない: 訓練データはPythonのみでした。ロボットが他のタスクでも向上したことは示されましたが、著者らは、この手法がJava、C++、あるいはRustでも機能することをまだ証明できていないと認めています。
どの程度確信しているのか?
著者たちは、結果が単なる偶然ではないことを確認するために、異なるランダムシードを用いてテストを3回実行しており、その数字に強い自信を持っています。彼らは改善(例:+2.8%、+3.0%)を正確に測定し、ロボットが詰まった際に、より多くの問題を解決し、より少ないミスを犯すようになったことを示しました。
彼らは、この「ミッドトレーニング」が極めて重要な欠落していた要素であると考えています。それは、ロボットを実世界に送り出す前に、特定の種類のジムでのトレーニングを与えるようなものです。これにより、複雑な「行動し、観測し、継続する」というループを、他の能力を失うことなく処理できる適切な筋肉を備えさせることができるのです。
自分の分野の論文に埋もれていませんか?
研究キーワードに一致する最新の論文のダイジェストを毎日受け取りましょう——技術要約付き、あなたの言語で。