Algomatic Tech Blog

Algomaticの開発チームによる Tech Blog です

Devin を含むAIソフトウェアエンジニアと周辺技術のざっくり紹介

こんにちは。LLM STUDIO 機械学習エンジニアの宮脇(@catshun_)です。 本記事では最近注目を集めている AI ソフトウェアエンジニアに関するプロダクトについてざっくりと紹介します。

社内勉強会に向けたキャッチアップ資料として作成しており、加筆修正する可能性がありますが、本記事を読んだ方の議論のネタ程度になってくれれば幸いです。

おことわり

  • 本記事では AI ソフトウェアエンジニアに関する 詳細な解説は含みません
  • Devin を参考に AI ソフトウェアエンジニアと呼称していますが、主語が大きく曖昧性の高い表現を使用しています。詳細については 参照元をご確認ください
  • 不十分また不適切な言及内容がございましたらご指摘いただけますと幸いです。
  • プロダクト等の利用時は 必ずライセンスや利用規約を参照して下さい。

本記事の目次

プログラム生成を伴う推論

はじめの 4 つは、著者が以前 Geography & Language Study Group 勉強会 #04 にて発表したスライドからの引用です。

Self-Refine (Madaan+'23, NeurIPS)

Self-Repair (Olausson+'23)

Self-Edit (Zhang+'23, ACL)

Self-Evolve (Jiang+'23)

CodeAct (Wang +’24)

CodeAct は、行動をコードとして記述するエージェント型の推論フレームワークです。行動を記述する中間媒体が、テキストや JSON である ReAct や関数呼び出し型の推論フレームワークとは異なり、事前定義されたツールの使い方・使い所をコードとして記述する ことで、対象タスクを解く上でのユーザインタラクション回数を削減します。また CodeVQA (Subramanian +’23) に近い推論方法ですが、コード実行およびヒトからの FB を反映したマルチターンの反復改良型エージェントを採用している点で異なります。

図1. [上] 行動の記述媒体が Text/JSON である推論手法 (左) と CodeAct (右) の比較. 行動の記述をコードとして記述することでインターリーブすることなく少ない LLM 呼び出しで推論が可能となる.[下] 複数ターンにおける複数のツール呼び出しを必要とする M3ToolEval における評価結果。

フィードバックを伴うコード生成と推論

CAMEL (Li+'23)

CAMEL はロールプレイ型の対話を採用した推論フレームワークで、ユーザからのタスク要求を解決するために AI User と AI Assistant の役割が付与された 2 つの言語生成器がコード生成等を伴う対話を展開します。

表2. CAMEL によるロールプレイ型の対話による推論。ユーザが「株式市場の取引ボットを開発する」というクエリを入力すると、Task Specifier がより詳細な要件を再定義する。ここではクエリに対して ❶ Python プログラマ (AI Assistant) ❷株式トレーダ (AI User) という 2 つの役割が付与されたエージェント間による対話によって指定されたタスクを解決する。

OpenCodeInterpreter (Zheng+'24)

OpenCodeInterpreter は、CodeInterpreter のようなコード生成・実行と反復改良を行うシステムで、CodeInterpreter とは異なりオープンソースとして公開されています。著者らは新たに ユーザ・インタープリタ・コード生成モデル間の複数ターンの対話データを収集した CodeFeedback と呼ばれるデータセットで CodeLlama (Roziere+'23), DeepSeekCoder (Guo+'24) をベースモデルとして学習しています。

図1. [右] OpenCodeInterpreter の概要と [右] HumanEval における pass@1 の評価。実行 FB およびヒトからの FB を用いることで、性能が大幅に改善される。

AgentCoder (Huang+'23)

AgentCoderプログラマ、テスト設計者、テスト実行者の 3 つのエージェントで構成されるマルチエージェント型の推論フレームワークです。❶ プログラマは特定のタスクを解決するため、問題の把握・明瞭化・アルゴリズムやメソッドの選択・擬似コード生成・コード生成による思考の連鎖を伴うコード生成を実行します。またコード実行が失敗した際のコード修正の役割も担っています。❷ テスト設計者は {基本的な, エッジとなる, 大規模な入力を伴う} テストケースを生成します。❸テスト実行者はローカル環境でテストを実行し、合否に応じてユーザおよびプログラマにその結果を返します。

図1. HumanEval における AgentCoder の概要図。

表3. 各評価ベンチマークにおける反復回数別の Pass@1 (GPT-3.5-turbo). 反復回数が増えるほど Pass@1 精度が向上する。

表6. 各評価ベンチマークにおけるシングルエージェント (SAS) とマルチエージェント (MAS) による Pass@1 比較。SAS に対して MAS が一貫して高い Pass@1 を示した。実験設定については論文を参照されたい。

ソフトウェアエンジニアリング

ここからはソフトウェア開発やデータ分析など、エンジニアとして要求されるより広義なタスクに関するフレームワークを紹介します。

ChatDev (Qian+'23)

ChatDev は、ソフトウェアテクノロジにおける開発組織を模倣したマルチエージェント型のソフトウェア開発システムです。各エージェントの役割は CEO, CTO, Programmer, Tester など様々で、ウォーターフォール型の開発モデルを採用することで各フェーズごとに任命されたエージェントがサブタスクとして実行し、ユーザからのタスク要求を満たします。

図2. ChatDev アーキテクチャ. (1) ソフトウェア開発のプロセスを (Designing, Coding, Testing, Documenting) の 4 つのフェーズに分割したウォーターフォール型開発を行う フェーズレベル、(2) 各フェーズのサブタスクを達成するために 2 つのエージェント間でタスク指向の協調的ロールプレイ型対話を行う チャットレベル に分割される。

以下の解説記事が参考になりますので、詳細はこちらを参照して下さい。

MetaGPT (Hong+'24, ICLR)

MetaGPT はマルチエージェント型のソフトウェア開発システムであり、標準作業手順書 (SOPs) を用いたメタプログラミングによる推論を採用しています。CAMEL, ChatDev と異なり、エージェントは厳格な作業手順に従い構造化文書 (要求定義書, 設計成果物, フローチャート, インターフェース仕様など) を生成します。

図2. MetaGPT によるソフトウェア開発の概要図。ユーザ要求を受け取ると MetaGPT は、複雑なタスクを分解し様々な役割が付与されたエージェント (PdM, Architect, PjM, Engineer, QA) に割り当てる。各エージェントは標準作業手順書を生成し、生成後は後段のエージェントがサブタスクを続ける。

こちらも以下の解説記事が参考になりますので、詳細はこちらを参照して下さい。

Devin

Devin は 2024.03.12 に Cognition から発表された AIソフトウェアエンジニア です。

もう少し丁寧に説明すると、ソフトウェアエンジニアリングで要求されるタスク等を実行するために設計された自律型エージェントで、シェル・コードエディタ・ウェブブラウザにアクセス可能なツールを組み込むことで、コード生成や修正を伴う推論を実行します。

2024.04.03 現在は、公開待ち (waiting list) となっており、デモ動画SWE-bench におけるテクニカルレポート が公開されています。

デモ動画 では、以下のようなクエリを Devin に入力しています。

Hey Devin, I’d like for you to benchmark Llama 2 on three different providers: Replicate, Together, Perplexity. Figure out their API formats and write a script that sends the same prompt/ params to all of them.

動画内にて Devin はクエリを受け取ると、タスク要求を満たすような計画をはじめに立案しています。計画立案後、Devin はブラウザから API ドキュメントを取得してクエリ要求を満たすための処理を実行します。実行エラーに遭遇すると実行ログからコードエディタにアクセスしてバグを修正し、修正後はクエリ要求に対する実行結果を表示するためのサイトをデプロイしています。

Microsoft Azure 上で Devin の利用が可能に

Microsoft Build 2024 にて、Microsoft と Cognition AI のパートナーシップが新たに発表されました。これにより、開発者は Devin を Azure 上で呼び出すことが可能となり、コードの移行や複雑なプログラム生成タスクが Devin を通して容易に支援が受けられるようになる見通しです。

SWE-bench における評価

Devin が注目を集めるきっかけとなった一つの要因は SWE-bench において、既存の Claude 2 や GPT-4 を大幅に凌駕する結果を示したことでしょうか。

ただレポートでも言及されていますが、Devin はおそらく内省やツール呼び出しを含む反復改良型のエージェント設定であり Claude 2, GPT-4 と精緻な比較が出来ていない可能性があるかもしれません。また評価結果については SWE-bench のみが言及されており、横断的な評価が出来ていない点も留意する必要があります。

SWE-bench における評価比較。Devin はエージェント設定であり Claude 2, GPT-4 と精緻な比較が出来ていない点に注意されたい。

--- SWE-bench について簡単な補足です。

SWE-Bench (Jimenez+'24, ICLR) は、現実世界のコードを作成するシステムの能力を評価することを目的として、GitHub 上の人気のオープンソース Python リポジトリから収集された 2,294 件の issues, プルリクエスト (PR) から構成されるデータセットです。PR には単体テストを含める必要があり、コード変更前は失敗、変更後は合格するようなテストが含まれます。

図1. SWE-Bench 概要。GitHub issue と関連するテストを解決する PR で構成され、Python コードが含まれるリポジトリに対して issue 文とスナップショットが提供され、モデルは単体・システムテストに対して評価されるパッチを生成します。

[左] SWE-bench で対象とする GitHub リポジトリ [右] SWE-bench タスク事例の様々な属性を特徴付ける (micro) 平均値と最大値。

Devika

Contributors Forks Stargazers Issues MIT License

Devika は Devin のような AI ソフトウェアエンジニアで、 Devin に代わるオープンソース化を目的に 2024.03.21 (あたり) に公開されました。ユーザからの指示をサブタスクに分解し、関連情報を調査し、要求タスクを達成するためのコードを記述します。

現在進行形で開発中のプロダクトで、以下のように記述されています。

This project is currently in a very early development/experimental stage. There are a lot of unimplemented/broken features at the moment. Contributions are welcome to help out with the progress!

OpenDevin

Contributors Forks Stargazers Issues MIT License

OpenDevin も Devika 同様、2024.03.27 (あたり) に公開されたオープンソースの AI ソフトウェアエンジニアです。シェル・コードエディタ・ウェブブラウザ等のツールを利用することで、ユーザからのタスク要求に取り組みます。

Devika との差分について明示な言及はありませんが、観測に基づくいくつかの差分が 投稿 されたりしています。

OpenDevin CodeAct

2024.05.08 追記

OpenDevin に CodeAct を統合した OpenDevin CodeAct も発表されており、v1.3 では SWE-Bench Lite で 23% の解決率を達成しています。

https://xwang.dev/blog/2024/opendevin-codeact-1.0-swebench/

SWE-agent

SWE-agent も同様に AI ソフトウェアエンジニアと呼ばれていますが、SWE-bench における評価が行われており、12.29 %の解決率を示しています(実験設定については公開予定の論文をご確認ください)。

(princeton-nlp/SWE-agent より引用)

AutoCodeRover (Zhang+'24)

AutoCodeRover は、GitHubの課題解決(バグ修正と機能追加)を完全に自動化したアプローチで、LLMと分析およびデバッグ機能を組み合わせて、最終的にパッチを適用する場所の優先順位を決定します。

300の実際のGitHub課題から構成されるSWE-bench liteにおいて、AutoCodeRoverは課題の~22%を解決し、AIソフトウェアエンジニアの現在の最先端の有効性よりも向上しています。

図2. AutoCodeRover のワークフロー図.

SWE-bench Lite における SWE-Agent との成功率比較. (github.com/nus-apr/auto-code-rover より引用)

AutoDev (Tufano+'24)

AutoDev は、複雑なソフトウェアエンジニアリングタスクの自律的な計画と実行のために設計された、自律駆動型のソフトウェア開発フレームワークです。ユーザはエージェントの数と動作を定義し特定のプロファイルや実行可能な行動を選択することが可能で、ファイル編集、検索、スクリプト実行、テスト、Github 操作など、コードベース上で様々な操作を選択できます。

AutoDev の構成要素は 4 つで、ユーザとエージェントの対話履歴を管理する Conversation Manager、様々なコードやツールが含まれる Tools Library、複数のエージェントのオーケストレーションを担当する Agent Scheduler、コードとテストの実行機能を有する Eval Environment から構成されます。

図2. AutoDev 概要

MAGIS (Tao+'24)

MAGIS は、GitHub issue の解決を行うマルチエージェント型の推論フレームワークで、ソフトウェア開発を行うためカスタマイズされた (Manager, Repository Custodian, Developer, Quality Assurance Engineer) の 4 つのエージェントで構成されます。

図2. MAGIS の概要図.

表2. SWE-bench における性能比較. 無作為に選択された 25% の SWE-bench で評価される。また比較対象となる GPT-3.5, Claude, GPT-4, SWE-Llama は言語モデルであり精緻な比較は出来ないことを示します。

データ分析

TaskWeaver (Qiao+'23)

TaskWeaver は、ユーザからのタスク要求を実行可能なコードに変換し、ユーザが事前に定義したプラグインを関数として呼び出しながら推論を行うコード生成を伴うインタラクティブなチャットフレームワークです。

ユーザからのタスク要求をサブタスクに分解する Planner、関連するプラグインの関数名・説明・引数・戻り値を含む定義からサブタスクを解決するためのコード生成を行う Code Generator、生成されたコードを実行する Code Executor の 3 つのコンポートで構成されてます。

TaskWeaver の概要図. (microsoft.github.io/TaskWeaver/docs/overview)

図3. TaskWeaver における具体的なワークフロー.

Data Interpreter (Hong+'24)

Data Interpreter は、データサイエンスの問題解決を目的としたコード生成を伴う LLM エージェントです。タスク要件を静的に分解する TaskWeaver, Code Interpreter, OpenInterpreter と異なり、よりデータ分析におけるワークフローに沿ったコーディング計画と計画の再定義を行います。

図2. Data Interpreter の設計概要. ❶ 動的な計画グラフと管理: タスク要求に対して計画を立案し、実行中に各タスクの状態を管理する ❷ ツールの利用と進化: 問題解決に適したツールの選択・作成、および継続的なツール改良を行う ❸ 自動化された信頼ベースの検証: 論理的に健全な解決策を検討し、投票を行う。

図3. Data Interpreter における計画の階層構造. (a) 特定のタスクにおけるワークフロー。(b) 計画に対してサブタスクに分解された有向非巡回グラフ (DAG)。(データ探索・相関分析・異常値検出・EDA・モデル学習・評価・可視化) の各タスクから構成される階層的な Task Graph と、タスクノードをより詳細な行動レベルに落とし込む Action Graph の 2 段階で構成される。

図4. Data Interpreter の動的計画の管理。(a) 人間による編集 (Human Editing) を用いたプランの洗練。人間がグラフ上のタスクを編集すると、後続するタスク 3.1', 3.2' が更新され、新たにタスク 3.3 が追加される。(b) 失敗したタスクに対する計画の再構成 (Self-debugging)。タスク 3.3 が失敗すると、タスク 3.3' が再構成され、後続する新たなタスク4.1~5 が追加される。

おわりに

Devin についてはデモ動画や SWE-Bench のテクニカルレポートが公開されているだけなので、その有効性については今後公開されたものを実際に触ってみたタイミングで判断したいと思います。また本文では言及しませんでしたが、Magic.dev, Code Repair, codium.ai なども関連するプロダクトになるかと思うので、引き続き注目しきたいと思います。

ここまで読んでいただきありがとうございました。Algomatic では LLM を活用したプロダクト開発等を行っています。 LLM を活用したプロダクト開発に興味がある方は、下記リンクからカジュアル面談の応募ができるのでぜひお話ししましょう!

参考