アーパボー(ARPABLE)
アープらしいエンジニア、それを称賛する言葉・・・アーパボー
AI

AutoGen徹底解説:AIエージェント協調の最前線

Table of Contents

AutoGen徹底解説:AIエージェント協調の最前線

人工知能(AI)研究の最前線では、単一のAIモデルから複数のAIエージェントが協調して動作するMulti Agent System (MAS)へと paradigm shift が起きています。
従来の単一AIモデルでは解決が困難だった複雑な問題に対し、それぞれの役割を持つAIエージェントが連携することで、より高度な問題解決能力を発揮するこの技術は、次世代AI応用の鍵として注目を集めています。

これは人間社会において、複雑なプロジェクトがチームによって遂行されるのと同様の原理です。一人の専門家では対応できない多面的な課題も、異なる専門性を持つ人々のチームであれば効率的に解決できるように、AIもまた「分業と協業」の恩恵を受けることができるのです。

本稿では、MASを実現するための主要フレームワークの一つとして、Microsoft研究所が開発した「AutoGen」を中心に解説し、最後に「CrewAI」と「MetaGPT」と比較してみます。これらのフレームワークはそれぞれ異なるアーキテクチャと思想に基づいており、用途や要件に応じた適切な選択が求められます。

マルチエージェントシステム(MAS)が注目される背景

単一AIモデルの限界

大規模言語モデル(LLM)の急速な発展により、ChatGPTなどの単一AIモデルはテキスト生成や情報検索などのタスクで驚異的な能力を示してきました。しかし、これらのモデルには以下のような本質的な限界があります:

  • 専門性の分散: 一つのモデルが全ての領域に高い専門性を持つことは困難
  • プロセス管理の課題: 複雑なタスクを順序立てて実行する能力の制約
  • リソース効率: 全てのタスクに同じ大規模モデルを使うことによる非効率性

マルチエージェントによるブレイクスルー

マルチエージェントのアプローチでは、複数のAIが特定の役割や専門性を持ち、協調して動作することでこれらの課題を克服します:

  • 分業によるスケーラビリティ: タスクを専門化された複数のエージェントに分割
  • 相互補完: 各エージェントが他のエージェントの弱点を補完
  • 効率的なリソース配分: タスクの複雑さに応じた適切なリソース配分

AutoGenの構成とアーキテクチャをわかりやすく解説

AutoGenは、Microsoftの研究チームによって開発された柔軟性の高いマルチエージェントフレームワークです。その最大の特徴は、エージェント間の自然な会話を通じた協調的な問題解決にあります。

AutoGenの基本コンポーネント

        図1 AutoGenフレームワークのアーキテクチャ

 

AutoGenのアーキテクチャは以下の主要コンポーネントから構成されています:

1,会話型エージェント (Conversational Agents)
  • LLMを基盤とし、他のエージェントや人間と自然言語で対話するエージェントです
  • 指示に従い、質問に回答し、議論を行う能力を持ちます
  • カスタマイズ可能なシステムメッセージによって専門性や振る舞いを定義できます
2,関数呼び出しエージェント (Function Calling Agents)
  • 定義された関数やAPIを実行するエージェントです
  • 外部データやツールへのアクセスを提供し、計算やデータ処理を担当します
  • Pythonコードの実行やAPIリクエストなど、会話だけでは解決できないタスクを処理します
3,プロキシエージェント (Proxy Agents)
  • メッセージの中継や条件付きでのエージェント起動を担当します
  • 人間とAIエージェント間の橋渡し役を果たし、人間の介入ポイントを提供します
  • ユーザープロキシは特に重要で、人間の入力モードや外部ツールへのアクセスを管理します
4,会話フロー管理 (Conversation Flow Management)
  • エージェント間のメッセージングと会話進行の制御を担当します
  • 条件分岐やループを含む複雑な会話フローの設計が可能です
  • グループチャット機能により、複数エージェントの同時参加による議論も実現できます

AutoGenの特徴的な4つの設計思想

AutoGenの最も重要な設計思想には以下の点が挙げられます:

1,会話による協調
エージェント間の相互作用が自然言語での「会話」として設計されています。これにより、エージェント間の連携が直感的に理解しやすく、デバッグも容易になります。
2,ツール利用の透明性

関数実行やツール利用が会話の流れの中で明示的に行われます。エージェントがツールを使用する際の思考プロセスや意図が可視化されるため、動作の予測可能性と透明性が向上します。

3,人間の介在

必要に応じて人間がエージェント間の会話に参加できます。完全な自動化だけでなく、人間の判断や創造性を取り入れたハイブリッドなワークフローを構築できます。

4,柔軟な設定

カスタマイズ可能なエージェント定義と連携パターンにより、様々なユースケースに適応できます。エージェントの数や役割、連携方法を自由に設計できるため、幅広い応用が可能です。

AutoGenのコード実装ステップと使用例

基本的なエージェント設定とタスク実行

AutoGenの基本的な使い方を理解するため、以下に「情報収集と分析レポート作成」タスクを例にしたコード実装を紹介します。

import autogen
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json

# LLM設定の読み込み
config_list = config_list_from_json(env_or_file="config.json")
llm_config = {"config_list": config_list, "seed": 42}

# 1. 情報収集エージェントの定義
researcher = AssistantAgent(
    name="Researcher",
    system_message="""あなたは優れた調査員です。与えられたトピックについて情報収集し、
    関連する事実やデータ、最新の動向などを詳細に調査します。
    情報は常に正確で信頼性の高いソースから取得するよう心がけてください。""",
    llm_config=llm_config,
)

# 2. 分析エージェントの定義
analyst = AssistantAgent(
    name="Analyst",
    system_message="""あなたは優れたデータアナリストです。提供された情報やデータを
    分析し、重要なパターン、トレンド、洞察を特定します。
    分析は常に客観的であり、データに基づいていることを確認してください。""",
    llm_config=llm_config,
)

# 3. ユーザープロキシエージェントの定義
user_proxy = UserProxyAgent(
    name="UserProxy",
    human_input_mode="TERMINATE",  # 'TERMINATE'で自動会話が終了、必要に応じて人間が介入可能
    max_consecutive_auto_reply=10,
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False,
    },
)

# 4. 会話フローの開始
user_proxy.initiate_chat(
    researcher,
    message="""「AIマルチエージェントフレームワーク」について最新の情報を収集してください。
    特に、AutoGen、CrewAI、MetaGPTの3つのフレームワークの特徴と比較に焦点を当ててください。"""
)

# 5. 研究者から分析者への会話継続
researcher.initiate_chat(
    analyst,
    message="""収集した情報を分析し、3つのフレームワークの主な違いと、
    それぞれが最適に機能するユースケースを特定してください。"""
)

# 6. 最終結果をユーザープロキシに送信
analyst.initiate_chat(
    user_proxy,
    message="""分析が完了しました。結果をご確認ください。"""
)

 

【コードの解説】以下、このコードを逐次解説していきます。

【事前準備】インポートと設定の読み込み

import autogen
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json

# LLM設定の読み込み
config_list = config_list_from_json(env_or_file="config.json")
llm_config = {"config_list": config_list, "seed": 42}

ここではまず、必要なモジュールをインポートし、LLMの設定を読み込んでいます。config_list_from_jsonは外部のJSON設定ファイルからLLMの設定(APIキーやモデル名など)を読み込む関数です。

llm_configの中の"seed": 42は乱数生成器の初期値を設定するパラメータです。
この値を設定することで、LLMの生成プロセスが毎回同じ結果を出力するようになり(疑似乱数の為)、開発・テスト段階でのシステムの挙動が予測可能になります。
特に複数エージェントの連携が必要なAutoGenでは、全体の会話フローが再現可能になるため、デバッグが容易になります。本番環境では通常このシード値を指定せず、より自然で多様な応答を生成します。

ここで、LangChainエンジニア向けにAutoGen特有のLLM設定構造を説明しておきます。

# config.jsonから読み込まれた設定例
config_list = [
    {
        "model": "gpt-4",           # ここでモデル名が定義されている
        "api_key": "sk-xxxxx...",
        "api_base": "https://api.openai.com/v1"
    },
    {
        "model": "claude-3-opus",   # 別のモデル定義
        "api_key": "sk-ant-xxxxx...",
        "api_base": "https://api.anthropic.com/v1"
    }
]

AutoGenでは、複数のモデル設定をconfig_listとして管理し、レート制限やエラー発生時に自動的に次のモデルにフォールバックする機能が組み込まれています。
これはLangChainとの大きな違いで、長時間実行されるマルチエージェントシステムの安定性を高めています。

ステップ1:情報収集エージェントの定義

# 1. 情報収集エージェントの定義
researcher = AssistantAgent(
    name="Researcher",
    system_message="""あなたは優れた調査員です。与えられたトピックについて情報収集し、
    関連する事実やデータ、最新の動向などを詳細に調査します。
    情報は常に正確で信頼性の高いソースから取得するよう心がけてください。""",
    llm_config=llm_config,
)

AssistantAgentクラスを使用して、情報収集を担当するエージェントを定義しています。
このエージェントには:

  • name: エージェントを識別するための名前
  • system_message: エージェントの役割や振る舞いを規定する指示文
  • llm_config: 使用するLLMの設定情報

が設定されています。システムメッセージによって、このエージェントは「調査員」としての役割を与えられています。

ステップ2:分析エージェントの定義

# 2. 分析エージェントの定義
analyst = AssistantAgent(
    name="Analyst",
    system_message="""あなたは優れたデータアナリストです。提供された情報やデータを
    分析し、重要なパターン、トレンド、洞察を特定します。
    分析は常に客観的であり、データに基づいていることを確認してください。""",
    llm_config=llm_config,
)

同様に、情報分析を担当するエージェントを定義しています。注目すべき点は、同じllm_configを使用していることで、これにより両方のエージェントが同じシード値を共有し、開発時の挙動の一貫性が確保されます。

ステップ3:UserProxyAgent設定について

この部分のコードはAutoGenフレームワークにおけるユーザープロキシエージェントの設定を行っています。LangChainエンジニアの視点から見ると、これはエージェントの動作フローや交互作用の制御に関する重要な設定です。

# 3. ユーザープロキシエージェントの定義
user_proxy = UserProxyAgent(
    name="UserProxy",
    human_input_mode="TERMINATE",  # 'TERMINATE'で自動会話が終了、必要に応じて人間が介入可能
    max_consecutive_auto_reply=10,
    code_execution_config={
        "work_dir": "coding",
        "use_docker": False,
    },
)
各パラメータの詳細解説

name="UserProxy"

  • 意味: エージェントの識別子として”UserProxy”という名前を設定しています
  • LangChainとの関連: LangChainのAgentと同様に、複数エージェント間の対話において識別子として機能します

human_input_mode="TERMINATE"

  • 意味: 自動会話の終了条件を指定するパラメータです
  • 詳細:
    • "TERMINATE": エージェント間の自動会話が一定の条件で終了した後に、人間の入力を要求します
    • LangChainのcallbackshuman_in_the_loopのような機能に相当します
    • 他の選択肢には"ALWAYS"(常に人間の入力を要求)や"NEVER"(人間の入力を要求しない)があります

max_consecutive_auto_reply=10

  • 意味: エージェントが連続して自動返信できる最大回数を10回に制限しています
  • 実用的な意味:
    • エージェント間の対話が無限ループに陥るのを防止します
    • 10回の自動応答後はhuman_input_modeの設定に従って動作します
    • LangChainでは明示的な同等機能はありませんが、カスタムコールバックで実装可能な機能です

code_execution_config

  • 意味: コード実行環境の設定を定義しています
  • 詳細:
    • "work_dir": "coding": コード実行用の作業ディレクトリをcodingに設定
    • "use_docker": False: Dockerコンテナを使用せずにコードを実行

 

ステップ4: ユーザープロキシから研究者への指示

この部分のコードはAutoGenフレームワークにおける複数エージェント間の会話フローを制御しています。LangChainエンジニアの視点から、これはマルチエージェントの連携ワークフローを構築するための重要な部分です。

# 4. 会話フローの開始
user_proxy.initiate_chat(
    researcher,
    message="""「AIマルチエージェントフレームワーク」について最新の情報を収集してください。
    特に、AutoGen、CrewAI、MetaGPTの3つのフレームワークの特徴と比較に焦点を当ててください。"""
)
意味:
UserProxyエージェントがresearcherエージェントに対して情報収集の依頼を開始
実行フロー:
  1. UserProxyが「AIマルチエージェントフレームワーク」についての情報収集タスクをresearcherに依頼
  2. researcherはこの指示に基づいて情報収集を実行(LLMを使用したり、外部ツールにアクセスしたりする可能性あり)
  3. 収集した結果をUserProxyに返す
  4. human_input_mode="TERMINATE"により、会話が終了条件に達した場合に人間の入力を待つ

ステップ5: 研究者から分析者への引き継ぎ

# 5. 研究者から分析者への会話継続
user_proxy.initiate_chat(
    researcher,
    message="""「AIマルチエージェントフレームワーク」について最新の情報を収集してください。
    特に、AutoGen、CrewAI、MetaGPTの3つのフレームワークの特徴と比較に焦点を当ててください。"""
)
意味
researcherエージェントが収集した情報をanalystエージェントに渡して分析を依頼
実行フロー
  1. researcherがステップ4で収集した情報(コンテキスト)を保持している状態
  2. その状態でanalystとの会話を開始し、分析タスクを依頼
  3. analystはresearcherから得た情報を基に分析を実行
  4. 分析結果をresearcherに返す

 

ステップ6: 分析者からユーザープロキシへの結果報告

# 6. 最終結果をユーザープロキシに送信
analyst.initiate_chat(
    user_proxy,
    message="""分析が完了しました。結果をご確認ください。"""
)
意味
 analystエージェントが分析結果をUserProxyエージェントに報告
実行フロー:
  1. analystがステップ5で完了した分析結果(コンテキスト)を保持している状態
  2. その状態でUserProxyとの会話を開始し、結果を報告
  3. UserProxyはこの結果を受け取り、最終的にユーザーに表示

 

【全体のまとめ】

ここでは、initiate_chatメソッドを使って会話のフローを設計しています。
先に設定したシード値により、このフロー全体が再現可能になります。同じプロンプトで実行すれば、毎回同じ結果が得られるため、開発時のデバッグや挙動の分析が容易になります。

この設計により、「情報収集→分析→報告」という論理的なワークフローが実現されています。各エージェントは独自の役割を担いながらも、自然な会話を通じて連携することができます。

外部ツール統合のシンプルな例

AutoGenのもう一つの強みは、外部ツールやAPIを簡単に統合できる点です。以下は、単純なデータ分析と可視化を行う例です。

import autogen
from autogen import AssistantAgent, UserProxyAgent, config_list_from_json

# LLM設定
config_list = config_list_from_json(env_or_file="config.json")
llm_config = {"config_list": config_list}

# データ分析エージェント定義
data_analyst = AssistantAgent(
    name="DataAnalyst",
    system_message="""あなたはデータサイエンスの専門家です。
    与えられたデータセットを分析し、Pythonコードを使用して
    適切なグラフや統計情報を生成します。""",
    llm_config=llm_config,
)

# コード実行エージェント定義
executor = UserProxyAgent(
    name="Executor",
    human_input_mode="NEVER",  # 完全自動実行モード
    code_execution_config={
        "work_dir": "data_analysis",
        "use_docker": False,
    }
)

# シンプルな分析タスクの実行
executor.initiate_chat(
    data_analyst,
    message="""以下のAIフレームワークのGitHubスター数を分析し、
    棒グラフで可視化してください:

    frameworks = ['AutoGen', 'CrewAI', 'MetaGPT', 'LangChain', 'LlamaIndex']
    stars = [52000, 18000, 32000, 75000, 26000]
    """
)

 

Executor: 実行結果:

基本統計:

  • 最も人気のあるフレームワーク: LangChain (75,000 スター)
  • 最も新しいフレームワーク: CrewAI (18,000 スター)
  • 平均スター数: 40,600.0
  • 合計スター数: 203,000
         図2 AIフレームワークのGitHubスター数比較

 

実行結果の解説:

この例は、AutoGenフレームワークにおける自動化されたデータ分析プロセスを示しています。データ分析エージェントがPythonコードを生成し、実行エージェントがそのコードを実行するという分業が行われています。
この連携により、人間の介入なしで完全自動化された分析が可能になっています。エージェントはデータの特性を理解し、適切な可視化方法を選択しながら、単なる数値データだけでなく、視覚的なグラフと洞察を含めた分析結果を提供しました。
このシンプルな例からも、AutoGenが異なる役割を持つエージェント間の連携を通じて、コード生成・実行・データ可視化といった一連の処理を自動化できることがわかります。

CrewAI・MetaGPTとの比較と違いのポイント

AutoGenと比較して、競合フレームワークの特徴を簡潔に紹介します:

表1 AutoGen CrewAI MetaGPTの比較
特徴 AutoGen CrewAI MetaGPT
開発元 Microsoft Research CrewAI, Inc. DeepWisdom
設計思想 柔軟なエージェント設定と会話フロー チームワークと役割分担 ソフトウェア開発プロセスの模倣
エージェント設計 多様な役割、機能実行エージェント 明確な役割定義(リーダー、リサーチャーなど) 役割ベース(プロジェクトマネージャー、エンジニアなど)
会話フロー 柔軟に定義可能、条件分岐、ループなど 役割間の連携とタスク遂行に合わせたフロー ソフトウェア開発プロセスに沿った標準化されたフロー
ツール連携 Python関数を簡単に統合可能 ツール利用のための基本的な仕組みを提供 ツール利用のための仕組みを提供
得意なタスク 複雑な情報収集、分析、多様なタスク 知識集約型のタスク、調査、レポート作成 ソフトウェア開発、プロジェクト管理

CrewAI: チームワークと明確な役割分担に特化、プロジェクト管理の概念を取り入れたフレームワーク。エージェント間の協調性を重視した設計。

MetaGPT: ソフトウェア開発プロセスを模倣したアプローチを採用。プロジェクトマネージャー、アーキテクト、エンジニアといった開発ロールを定義し、組織的なタスク解決を志向。

※)CrewAIの詳細に関しては以下のサイトをご参照ください。
CrewAI: マルチAIエージェントの新たなフロンティア

※)MetaGPTの詳細は以下の記事をご参照下さい。
MetaGPT完全ガイド:AIエージェント協調によるソフトウェア開発革命

AutoGen/CrewAI/MetaGPTのユースケース別使い分け

AutoGenに最適なユースケース

AutoGenは以下のようなユースケースに特に適しています:

複雑な情報収集と分析タスク
  • 複数のデータソースからの情報収集と統合
  • 様々な角度からのデータ分析と洞察抽出
  • 市場調査、競合分析、トレンド分析など
対話型問題解決
  • ユーザーとAIの対話を通じた問題解決
  • 複数のエージェントによる協調的な問題解決
  • カスタマーサポートや技術サポートなど
外部ツール連携が重要なタスク
  • APIやデータベースとの連携が必要なシナリオ
  • データ処理、ファイル操作、ウェブスクレイピングなど
  • 計算やシミュレーションが必要なタスク

他フレームワークが優位なケース

一方で、以下のようなケースでは他のフレームワークが優位性を持つことがあります:

CrewAIが適したケース
  • チーム協働型の知識集約タスク
  • 明確な役割分担と階層構造が必要なプロジェクト
  • レポート作成や調査分析など、定型的なチームワーク
MetaGPTが適したケース
  • コード生成を含む標準的なソフトウェア開発プロジェクト
  • 要件定義から実装までの一貫したプロセスが必要なケース
  • ドキュメント生成と設計書に基づく開発

AutoGenの導入事例と今後の可能性

AutoGenの実際の応用事例

AutoGenは様々な分野で実際に活用が始まっています:

  1. 研究開発支援:複雑な科学文献の分析と洞察抽出
  2. コンテンツ生成:複数の情報源に基づく自動記事作成
  3. データ分析自動化:データ前処理、分析、可視化の一連のプロセス自動化
  4. 顧客サポート:複雑な問い合わせに対する複数エージェントによる協調的解決
  5. 教育支援:学習者の質問に応じた専門エージェントによるチュートリアル生成
               図3 AutoGen応用領域の図

 

図6: AutoGenの主要応用領域 – AutoGenの柔軟性を活かした様々な実用領域を示しています。中心にAutoGenフレームワークがあり、それを取り囲むように5つの主要応用分野があります。

ケーススタディ:Microsoft Research によるAI開発者支援への応用

上記の応用分野の中でも、特に注目すべき成功事例として、Microsoft Research チームが自社の開発者支援にAutoGenを活用した事例が挙げられます。この取り組みでは、ソフトウェア開発のライフサイクル全体を複数のAIエージェントが協調して支援する仕組みを構築しました。

具体的なワークフローは以下の通りです:

  1. 要件理解エージェント:開発者の要求を自然言語で理解し、明確な仕様に変換
  2. 設計エージェント:ソフトウェアアーキテクチャと設計パターンを提案
  3. コーディングエージェント:実装コードを生成し、潜在的なバグを検出
  4. テストエージェント:ユニットテストとエッジケースの検証を実行
  5. デバッグエージェント:発見された問題を分析し修正案を提案

この導入により、以下の成果が報告されています:

  • 開発者の初期コード生成時間が平均で45%短縮
  • コードの品質向上と初期バグの30%削減
  • 特に経験の浅い開発者のスキルギャップを埋める効果

Microsoft Researchのブログでは、特にAutoGenのグループチャット機能が開発プロセスの透明性向上に役立ったと報告されています。開発者はエージェント間の対話を観察し、必要に応じて介入することで、AIと人間の協働開発モデルが実現されました。

この事例は、AutoGenの「会話による協調」と「人間の介在」という2つの設計思想が実際の業務でどのように価値を生み出すかを具体的に示しています。複数のエージェントが自然言語で連携しながらも、人間の専門知識や判断を適切に取り入れる仕組みが、高度な開発タスクにおいて効果的であることが確認されています。

出典: Microsoft Research Blog “AutoGen: Enabling Next-Generation Large Language Model Applications”

AutoGenの将来展望と課題

AutoGenの今後の発展において、いくつかの重要な展望と課題が考えられます:

展望
  • 医療や法律などの専門分野への特化が進み、領域固有のエージェントが発展
  • 非技術者でも利用できるGUIベースの設計ツールの登場による普及拡大
  • エージェントの自己学習・自己改良メカニズムの強化
  • テキスト以外の画像や音声などマルチモーダル対応の進展
課題
  • 複数エージェントの同時動作による計算コスト増大の最適化
  • エージェント間の相互作用がもたらす予期せぬ結果への安全対策
  • 複雑なエージェント連携のデバッグと問題解決手法の確立
  • 意思決定プロセスの透明性確保と説明可能性の向上

これらの展望と課題のバランスを取りながら、AutoGenは更なる発展を遂げていくでしょう。

まとめ:AutoGenの可能性と今後の展望

Microsoft開発のマルチエージェントシステムのフレームワーク「AutoGen」は、AIエージェント連携の新たな可能性を切り開いています。柔軟なエージェント設計、自然言語による会話型協調、外部ツール統合の容易さ、そして必要に応じた人間の介入を可能にするハイブリッドアプローチが特長です。

GitHubでの人気に見られるように、AutoGenは急速に注目を集めており、情報収集・分析、データ処理、教育支援など様々な分野での実用例が登場しています。一方で、計算リソースの最適化、安全性と倫理面での配慮、複雑なエージェント連携のデバッグなど、解決すべき課題も残されています。

マルチエージェントシステム技術は、単一AIでは困難だった複雑なタスクを自動化し、専門エージェント間の連携による集合知を活用する新たな可能性をもたらします。AutoGenは単なる効率化ツールを超え、人間とAIの新しい協働モデルを実現する基盤技術として、今後ますます重要性が高まるでしょう。

AIマルチエージェント技術はまだ発展の初期段階ですが、AutoGenはその最前線を走るフレームワークとして、引き続き注目に値します。

※)より詳しい情報をお知りになりたい方は以下の公式サイトをご参照ください

    以上

    筆者プロフィール
    ケニー狩野(中小企業診断士、PMP、ITコーディネータ)
    キヤノン(株)でアーキテクト、プロマネとして多数のプロジェクトをリード。
    現在、株式会社ベーネテック代表、株式会社アープ取締役、一般社団法人Society 5.0振興協会評議員ブロックチェーン導入評価委員長。
    これまでの知見を活かしブロックチェーンや人工知能技術の推進に従事。趣味はダイビングと囲碁。2018年「リアル・イノベーション・マインド」を出版。