
ソフトウェア自律開発エージェントの現在地点 (2024年8月)
ソフトウェア自律開発エージェントが注目されています。2024年3月にDevinが登場し、人間の指示を必要としない完全自律なソフトウェア開発が登場しました。それとともにソフトウェア自律開発の難しさも明らかになってきました。2024年8月の現在地点をお話しします。
ソフトウェア開発の自動化の難しさ
ソフトウェア開発においては大きなプログラムを自動生成する難しさとともにすでに作られたソフトウェアのバグを修正する難しさもあります。
ソフトウェアのバグにおいては、複数のファイルを一度に直す必要もあり、そのような処理を大規模言語モデルで実現するのにはハードルがあります。
ソフトウェア自律エージェント開発が明らかにしたこと
コンテクストが大きい
オリジナルのSWE-benchの論文によるとコードベースは平均438K行からなります ([jimenez])。SWE-benchが対象とする大規模言語モデルの2023年10月のコンテクストウィンドウでは当然これは入りません。最新のGeminiなら1Mトークンサイズなので多くをカバーできる可能性はあります。GPT-4oおよびGPT-4o miniでは128Kです。Gemini以外ではなんらかの方法で分割して大規模言語モデルに与える必要があります。この分割によって精度が落ちる可能性があります。
正しくファイルが見つけられない
オリジナルのSWE-benchの論文によるとOkapi BM25による検索では半分のケースで編集すべきファイルを関連するファイルとして検索することに失敗しています。これではどんなに推論しても正解にはたどり着きません。
ソフトウェア開発に限らず、任意の問題解決で課題となる部分です。
BM25を使わず、ベクトルDBで意味検索するという方法もありますが、後続の論文でもそもそも20%は正しいファイルにたどり着かないという結果が報告されています。
試行錯誤が難しい
ソフトウェアのデバッグ作業は単にどこかに答えが書いてあるというようなものではないです。さまざまな仮説をたて、検証して、問題点を発見する仮定が必要になります。このような試行錯誤に対応するためにReActフレームワークやTree of Thoughtsのような問題解決技法を適用する必要があります。
大量のファイルを入力すると精度が落ちる
どこが問題なのかわからないとなると大量の情報を投入したくなります。似たような情報を大量にいれると生成AIの精度は落ちます。問題がどこにあるかがわからないので他に方法もないのですが、たくさんのファイルを入力した場合、それぞれのファイルの関係は間接的にしかわかりません。ファイルの相互関係がわからないまま、大量のファイルを入力すると生成AIの精度が落ちて問題解決ができなくなります。このため大規模なソフトウェアのデバッグは困難になります。
生成AI向きの開発インタフェースが必要
たいていの開発環境は人間向きに設計されています。AIエージェントが効果的に仕事をするためにはAIエージェント向けの開発環境とインタフェースが必要です。ユーザインタフェースが長い時間をかけて進化したようにエージェント向けインタフェースも今後、精度をあげるための試行錯誤が必要です。SWE-benchの開発者がつくったSWE-agentではこれをエージェントコンピュータインタフェースと呼んでいます ([yang])。
時間に依存
ネットワーク系のデバッグでは、通信を行ってエラーになっても外部要因や一時的要因であることもあります。これを推論過程に組み込むのはより高度な推論が必要です。
ソフトウェア自律エージェントの進化
最初にSWE-benchが提案された2023年10月、開発チームが生成AIを使って解けたのは1.96%でした ([jimenz])。2024年8月現在、SWE-bench liteで43%、SWE-bench fullで30.8%が最高記録です。さまざまなスタートアップが記録更新を競っています ([ai300lab])。
なお、SWE-benchのリーダーボードには Cosine Ginieの30.08%は掲載されていません ([cosineai])。
進化の原動力
コンピュータ・エージェント・インタフェース
SWE-agentの論文では生成AIによるソフトウェア開発エージェントに特化したインタフェースが精度を上げることが提案されています。
問題解決フレームワーク
MicrosoftのMASAIでは部分的に問題を解く複数のエージェントにそれぞれ適した問題解決フレームワークを利用することが提案されています。
テストテンプレート作成:ReAct
再現:ReAct
ファイル決定:ReAct
編集:CoT
ランカー:CoT
CodiumAIというスタートアップがAlphaCodiumという「テスト駆動型の多段階コード生成フロー」による最適化を提案しています。
前処理
問題文から目標、入力、出力、ルール、制約などを抽出し、AIによって箇条書き
問題文の理解に基づき、複数の解答コードの候補を生成
生成された解答コードをランク付けし、優れたものを選択
選択された解答コードに対して検証テストを実行
検証テストの結果を分析し、追加のテストケースを作成
反復フェーズ
前処理フェーズで選択された解答コードを初期コードとする
初期コードを「公開テスト」でテスト
テスト結果を分析し、コードを修正・改善
改善したコードを再度テストし、結果が向上したらそのコードを採用
「AIが生成した追加テスト」を使ってさらに反復改善
改善したコードを再度テストし、結果が向上したらそのコードを採用
戦略をたてて、その戦略に基づいて繰り返し試行する、というのはソフトウェア開発以外の問題解決にも共通の考え方だと思います。
むすび
人間の指示なしにプログラムのバグを解決する自律ソフトウェア開発エージェントは、複雑な現実社会の問題を解くために必要な能力を生成AIに付与します。ソフトウェア開発以外にも適用できる手法が多いので興味深いです。
参考文献
[ai300lab] 次々に誕生する自律ソフトウェア開発エージェントスタートアップ https://note.com/ai300lab/n/ne2cec37158ba 2024年
[arora] MASAI: Modular Architecture for
Software-engineering AI Agents by Daman Arora et al. https://arxiv.org/abs/2406.11638 2024年[cosineai] Genie has the highest score in the world on SWE-Bench https://cosine.sh/ 2024年
[jimenez] SWE-bench: Can Language Models Resolve Real-World GitHub Issues? by Calos E. Jimenez et al. https://arxiv.org/abs/2310.06770 2023年
[ridnik] Code Generation with AlphaCodium: From Prompt Engineering to Flow Engineering by Tal Ridnik et al. https://arxiv.org/abs/2401.08500 2024年
[yang] SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering by John Yang et al. https://arxiv.org/abs/2405.15793 2024年