AI コラム

Coding Agentが「外側のループ」で失敗する理由

コードを書くAIが、だんだん賢くなっている。

それなのに、長い仕事を任せると、なぜか途中で迷子になる。
テストに落ちているのに「直りました」と終わったり、同じ場所を何度も直したりする。

問題は、コードを書く力だけではないのかもしれない。

AlibabaのDreamXチームとUNSWの研究者は昨日、arXivで「LoopArena」(2608.28281)を公開した。これは、言語モデルが長時間動くCoding Agentの「司令塔」として、どれだけうまく振る舞えるかを見るベンチマークだ。

いまのClaude CodeやDevinのようなツールは、ひとつのプロンプトを投げて終わり、ではない。

実際には、その外側で「次に何をさせるか」を決めるループが動いている。

タスクを読み、Workerに指示を出す。

コード差分やテストログを受け取り、進み具合を確かめる。

まだ続けるのか、方向を変えるのか、それとも終わるのかを決める。

この「外側のループ」が、仕事全体の交通整理をしている。

ところがSWE-benchのような標準的なベンチマークでは、一連の実行をひとつの黒い箱として扱う。

失敗しても、最後のエラーログだけでは、どこで壊れたのかがわかりにくい。

Workerが文法エラーを書いたのかもしれない。

Controllerが、存在しない「テスト成功」を信じたのかもしれない。

回帰を見落としたのか、あと3手必要なのに早く終わらせたのかもしれない。

LoopArenaがおもしろいのは、ここを分けて見ようとしたところだ。

役割はふたつある。

Workerは固定されたCoding Agentで、ファイルを編集し、ターミナルコマンドを実行し、テストを走らせる。

Controllerが評価対象のモデルだ。

各ステップのあとに構造化された実行サマリーを受け取り、「新しい指示を出す」「特定の確認をする」「ロールバックする」「提出する」といった次の行動を選ぶ。

つまり、手を動かす人と、仕事を見張る人を分けた。

ベンチマークは、実行コストの違う3段階でControllerを試す。

Type Iは、過去の実行履歴を見て「次に何をすべきか」を答える静的な問題。ライブ環境は動かさない。

Type IIは、開発タスクの一部分だけを対話的に操作し、特定の問題から何ステップで立て直せるかを見る。

Type IIIは、リポジトリの初期状態から完了まで走り切る、長い本番型のタスクだ。

そして、数字はかなり厳しい。

Type IIIの完全タスクでは、テストされたControllerの中で最も高いStrict Success Rateでも24.69%だった。

下で動くコード生成モデルが優秀でも、複数ファイルにまたがる変更を最後まで導くのは難しい。

一方で、うまいControllerには大きな利点もあった。

不要な推論を削ることで、総推論コストは平均64.4%減った。

同じテストを何度も回さない。

堂々巡りの修正を止める。

見込みのない経路は、トークンを使い切る前に切る。

「賢く考える」だけでなく、「無駄に続けない」ことも性能の一部になる。

さらにType IIの短い区間評価は、Type IIIの完全実行とSpearman順位相関0.9747を示した。

つまり、毎回何百ドルもかけてリポジトリ全体を走らせなくても、短い実行区間でControllerのプロンプトや制御方針をかなり正確に比較できる。

ここは、Agentを作る側には実務的に大きい。

Agentが失敗すると、つい「もっと強い基盤モデルに替えよう」「ドキュメントをもっとContext Windowに入れよう」と考えたくなる。

でもLoopArenaが示しているのは、Context Windowが足りなくなるより前に、実行中の判断そのものが失敗を生んでいる場合がある、ということだ。

たとえばWorkerが「docstringのバグを直しました」と報告する。

Controllerがその言葉を信じ、テストを走らせずに終了する。

人間の仕事でも、少し見覚えがある。
「たぶん大丈夫です」で会議が終わり、翌朝に大丈夫ではなかったことがわかる、あの感じだ。

もうひとつはloop thrashing。

ふたつの矛盾する修正を行ったり来たりしながら、Controllerだけが「進捗あり」と判断し続ける。

これを防ぐには、WorkerとControllerの間の「約束」を厳しくする必要がある。

完了条件には、実行可能なテスト成功を必須にする。
Workerの自然言語による「直りました」だけでは終わらせない。

同じ5行を3回変えているのにテスト結果が変わらないなら、もう一度自由にやり直させるのではなく、ロールバックさせる。

Controllerには、ターミナルの生ログを丸ごと渡すのではなく、整理された実行サマリーを渡す。
観察と判断を分けるためだ。

Coding Agentの性能は、コードを書くモデルだけで決まらない。

いつ確かめるか。
いつ疑うか。
いつ戻すか。
そして、いつ終わるか。

長い仕事ほど、最後に効いてくるのは、その判断なのだと思う。

LoopArenaのリポジトリと評価コードは、GitHubのAMAP-ML/LoopArenaで公開されている。

  • この記事を書いた人

麻倉光舟

大手SIer・飲食メディア・FinTechを経験。 現在シニアエンジニア。 サーバーサイド/設計/組織運用に関する記事を担当。

よく読まれている記事

条件の0=0は全てが正であるを意味するSQL 1

SQLの条件に0=0のような記述を見かけます。 変わった書き方の条件ですが、これは「全てが正である」事を意味しており、結合条件の場合はCROSS JOINと同じです。 下記の例で言えば、結合するsub ...

DISTINCTを使わないで重複排除を考えるSQL 2

SQLのDISTINCTはEXISTSとかGROUP BYでなんとかする事もできます。 DISTINCTは暗黙的なソートがされますが、何のDBを使うにせよ過去のバージョンならともかく、最近のバージョン ...

RFC 5322に準拠させた正規表現言語別 3

RFC5322で定義されている正規表現を、各言語の正規表現に変化させた形になります。 完全な電子メール正規表現は存在しないので、結局のところ何かの公式基準に従っていたとしても、自分が携わるサービスのル ...

-AI, コラム