MetaGPT: マルチエージェント協調フレームワークのためのメタプログラミングについて
本記事について
本記事は以下の論文の意訳記事になります。
METAGPT: META PROGRAMMING FOR A MULTI-AGENT COLLABORATIVE FRAMEWORK
https://arxiv.org/pdf/2308.00352
概要
大規模言語モデル(LLM)を活用したエージェントの研究が急激に進展しています。これらのエージェントは複雑なタスクを解決する能力を示していますが、まだ多くの課題が残されています。
既存のLLMベースのマルチエージェントシステムは、対話タスクといったような単純なタスクであれば解決できますが、タスクが複雑になるとさまざまな問題が発生します。代表的な問題として、ハルシネーション(幻覚)があります。また,マルチエージェントのように複数のLLMを単純に連鎖させるとハルシネーションが連鎖的に発生して結果的に論理性の欠如などがよく見られます。
このようなマルチエージェントの抱える問題を解決するために、標準化された作業手順であるSOP (Standard Operating Procedures) をソフトウェア開発プロセスに導入しました。これにより複雑なタスクであるソフトウェア開発をマルチエージェントで一貫して行うことに成功しました。
SOPを導入することで、各エージェントの責任範囲を明確にして、要件定義→アーキテクチャ設計→システム設計→コード生成→テストという人間のワークフローをエージェントに模倣させています。これにより、それぞれのエージェントは定義された役割と品質基準に沿ったタスクの一貫した正確な実行が可能になります。
そこで、本論文では、ソフトウェア開発を行うLLMを用いたマルチエージェントフレームワークとしてMetaGPTを提案し、標準的な運用手順であるSOPにより機能が明確化されたエージェントを活用することで高品質なソフトウェア生成を行いました。また、コード生成能力を評価する標準的なベンチマークであるHumanEvalなどでSOTA(State-of-the-Arts)を達成しました。
提案手法
MetaGPTのフレームワークは、主に以下の2つの重要な側面から構成されています:
SOPにおけるエージェント
エージェント間の会話プロトコル
これらの要素が連携して、複雑なタスクを効率的に解決するためのシステムを構築しています。
SOPにおけるエージェント
この部分では、MetaGPTがどのようにSOPを活用してエージェントの役割を定義し、ワークフローを確立しているかを説明します。
役割の専門化
MetaGPTでは、複雑なタスクを小さなタスクに分解し、専門的な知識を持ったエージェントにそれぞれのタスクを解かせるという手法をとっています。Product Manager、Architect、Project Manager、Engineer、QA Engineerなど、ソフトウェア開発で一般的な役割をエージェントとして定義しています。各エージェントには、名前、目標、制約条件、使用可能なツールなどを含むプロファイルが指定されます。
例: Engineerのプロファイル
ワークフロー
各エージェントの役割と操作スキルを事前に定義することで、基本的なワークフローを確立します。ソフトウェア開発のSOPに従って、全エージェントが順序立てて作業を行います。
具体的には、まずProduct Managerがユーザーから”ペイントソフトを作成して”などといった要求を受け取ると、製品要求仕様書(PRD)を作成し、ユーザーストーリーや競合分析、要件プールを生成します。また、必要に応じてWeb検索ツールも使用可能で、市場調査も担当し、実現可能性の分析を行うことから始まります。
上の図はProduct Managerがペイントソフトを作成する際の4象限マトリクスを作成して、市場調査を行なっている様子です。
次にArchitectがProduct Managerから受け取った出力をもとにMermaidなどを使用してシステム全体の設計を行います。以下のように、システムアーキテクチャ図の作成、インターフェース定義、ファイルリスト、データ構造の設計などを作成します。
この段階で、プロジェクトの技術的な骨組みが形成されます。
そこから、Project Managerは、Architectの設計を基にEngineerが行うべきタスクリストを作成します。タスクリストには具体的なクラスやファイル名とその詳細なコード設計が含まれます。
最後にEngineerがこれらのタスクリストをもとに実装を行い、QA Engineerにより包括的なテストを実施します。
このように、単一のエージェントでは品質が保証されない複雑なタスクをMetaGPTではSOPの導入により、一貫された効率的なワークフローを提供しています。
エージェント間の会話プロトコル
MetaGPTのエージェント間では共有されたメッセージプールを通じて相互にコミュニケーションをとることで、それぞれによって処理される詳細な情報が受け渡されています。
Structured Communication Interfaces
まず、各エージェントは特定のスキーマとフォーマットを確立しており、それぞれの役割に応じて必要な出力を提供するようにプロンプトされています。
例えば、Architectはシステムインターフェース設計やシーケンス図をMermaidを用いて作成します。
これらのエージェントが互いにコミュニケーションを行う際に、自然言語で行うと曖昧な情報であったり、一貫性のない情報が受け渡される可能性があり、ハルシネーションを起こす危険性があります。
なのでエージェントは自然言語ではなく、構造化された文章や図表を通じてコミュニケーションを行うことでそれらのリスクを低減しています。
Publish-Subscribe Mechanism
エージェント間のコミュニケーションは全てグローバルなメッセージプールに保存され、エージェント間で直接メッセージを交換できるようになっています。これによりエージェントは構造化されたメッセージを送信し、他のエージェントからのメッセージに透過的にアクセスできます。
この時、透明性を保ちつつ、各エージェントは必要に応じて関連情報を選択的に受け取るPubSub方式を採用しています。
上の図は各エージェントがどのようにコミュニケーションをとっているかを表しているものとなっています。各エージェントは流れてきたメッセージを受け取るか、どのようなメッセージを流すかをプロフィールに基づき自律的に判断します。
これらの要素により、MetaGPTは複雑なタスクを効率的に処理し、高品質なソフトウェアを生成することができます。また、中間成果物として構造化された出力(要求文書、設計成果物、フローチャート、インターフェース仕様など)を生成することで、目標コード生成の成功率を大幅に向上させています。
実験結果
MetaGPTはコード生成能力を測るために2つの公開されたデータセットおよび一貫したソフトウェア開発能力を測るために独自に新たなSoftwareDevデータセットを用いて評価を行いました。
コード生成能力を測るために標準的なHumanEvalデータセットおよびMBPPデータセットを用いました。各タスクには、関数の仕様、説明、レファレンスコード、およびテストなどの情報が含まれています。評価指標としては、unitテストにどれだけ成功したかを表すpass@1を使用し、ベースラインにはGPT-4やCodexなどといったコード生成能力が高い標準的な手法を用いました。
SoftwareDevにはミニゲーム(2048, Flappy birdなど)、画像処理アルゴリズムといったような合計で70の代表的なソフトウェア開発タスクに関するデータセットです。このデータセットはHumanEvalなどとは違いエンジニアリングの側面に焦点を当てたデータセットとなっています。評価指標としては、実用性を重視した5つの評価指標、実行可能性、コスト、コード統計、生産性、人間による修正コストを使用しました。ベースライン手法としてはソフトウェア生成で使われているChatDevが用いられました。
HumanEvalおよびMBPPにおいての評価を比較した結果が下の図になります。
図を見るとベースライン手法であるGPT-4などを上回っていることがわかります。このことからMetaGPTはより高品質なコード生成能力を有しているということがわかります。
次に、SoftwareDevにおいての評価を比較した結果が下の表になります。
Executability(実行可能性): 1: 機能しない(失敗)2: 実行可能だが不完全 3: ほぼ完璧 4: 完璧な動作
Productivity(生産性): トークン使用量をコード行数で割った値
Human Revision Cost(人間による修正コスト): デバッグやパッケージインポートなどの介入頻度
表からMetaGPTがほとんどの評価指標でChatDevを上回っていることがわかります。トークン量がChatDevの約1.5倍となっていますが、このトークン量とのトレードオフで高品質なソフトウェアが生成できているとわかります。
また以下の表のを見ると一回の生成に約$1.4しかかかっていないことから、従来のソフトウェア開発にかかる費用の約1000分の1以下に削減できていることがわかります。
まとめ
MetaGPTは、人間のワークフローを効果的に模倣し、構造化された通信を活用したことで高品質なソフトウェアが生成できたと考えられます。特に、SOPの導入により、エージェント間の不要なやり取りを減らし、より効率的な協力を実現しています。
MetaGPTは、複雑なソフトウェア開発タスクを効率的に処理できることを示しましたが、さらなる改善の余地があります。例えば、より動的なワークフローの実装や、エージェント間の学習の継続などが今後の課題として挙げられます。
この記事が気に入ったらサポートをしてみませんか?