ByteDance の研究者と、ハルビン工業大学(深圳)の共著者 1 名によって書かれたこのレポートは、LLM を用いて実世界のコードリポジトリにおけるバグ修正を自動化するフレームワーク MarsCode Agent を紹介している。著者らの出発点は、実プロジェクトのバグ修正には複雑なコードベース、ファイル間の依存関係、文脈固有の問題の理解が必要であり、開発者のタスク ── 失敗するテスト、期待と一致しない出力、機能拡張、単純な欠陥修正 ── を 1 つの固定されたアプローチですべてうまく扱うことはできない、という観察である。

著者らの答えは、6 つの役割(Searcher、Planner、Reproducer、Programmer、Tester、Editor)を持つマルチエージェント協調フレームワークであり、各役割には自分のタスクに必要なツールだけが与えられる。Planner は各イシューを 2 つのワークフローのいずれかに振り分ける。1 つは動的デバッグのワークフローで、Docker ベースのサンドボックスで再現スクリプトを実行し、Tester がイシューの解決を確認するまで Programmer が反復する。もう 1 つは静的修復のワークフローで、Editor が複数の候補修正を生成し、投票によって 1 つを選ぶ。これを支えるのが、コード知識グラフと Language Server Protocol によるコード検索、AutoDiff と呼ばれる編集ツール、そして各編集に対する LSP ベースの静的診断である。

SWE-bench Lite での評価では、MarsCode Agent は 300 のイシューのうち 102(34%)を解決したとレポートは述べており、ファイルおよびコードスニペットの特定精度を、公開されていて追跡可能な他のソリューションと比較している。

主なポイント

  • このフレームワークは、すべてのイシューに 1 つの固定されたアプローチを使うのではなく、各イシューの性質に応じて静的または動的な解決パイプラインを割り当てる。
  • エージェントには意図的にすべてのツールが与えられているわけではない。各フェーズの難しさを下げ、安定性を高めるため、役割ごとのツールセットは制限されている。
  • コードとドキュメントに対するプログラム解析で構築されるコード知識グラフは、コードエンティティを頂点、それらの関係(呼び出し、参照、継承、ファイル構造)を辺として表現する。レポートによれば 12 のプログラミング言語をサポートしている。
  • 対象プロジェクト外の定義や同名のエンティティをカバーするために LSP ベースの検索が追加されており、エージェントは数値による位置指定が苦手なため、曖昧な位置指定が用いられる。
  • 著者らの経験では、LLM に unified diff を求める方法、開始行と終了行の番号を求める方法、ファイル全体の書き直しを求める方法はいずれも失敗するか非実用的であったと報告されており、これが Aider のアプローチを手本とした AutoDiff 編集形式につながった。
  • SWE-bench Lite では、300 のイシューのうち 102(34%)を解決し、ファイルの特定は 300 のうち 265(88.3%)、コードスニペットの特定は 300 のうち 206(68.7%)で正しかったとレポートは述べている。
  • 300 のイシューのうち 84(28%)が動的解決に、216(72%)が静的解決に適していると判定された。動的デバッグは 84 のうち 32(38.1%)、静的修復は 216 のうち 70(32.4%)を解決しており、著者らはこの差を動的デバッグにおける再現と検証のステップによるものとしている。

補足

評価は、SWE-Bench の 300 インスタンスからなるサブセットである SWE-bench Lite に限られている。レポート自身の結果表では静的修復に進んだイシューの割合が 300 のうち 202(72.0%)とされている一方、分析部分では 300 のうち 216 とされている。上に挙げた解決数は本文で述べられているものである。著者らは今後の課題として、LLM 呼び出しコストの削減、ユーザーとエージェントの協調の改善、環境の汚染を避けるための実際のユーザーワークスペース内での動的デバッグのサポート、エラー箇所の特定とコード修正の精度向上を挙げている。本研究は LLM ベースの 自動プログラム修復 および ソフトウェアイシュー解決 システムの系譜に属し、レポートはこれを SWE-Agent、AutoCodeRover、Agentless と並べて位置づけている。