AIのめざましい発展によって近年では複数のAIが個々のエージェントとなり、複雑なタスクを解決する「マルチエージェントシステム」が注目されています。そのようななかMicrosoftではマルチエージェントフレームワーク「AutoGen」の開発を進め、業務効率化を目指す多くの企業や開発者から大きな関心を集めています。
そこでこの記事では、AI開発者や業務効率化に関心のある技術担当者の方へ、AutoGenの概要をはじめ、環境構築の手順や活用例、注意点を解説します。AutoGenを利用する際に押さえておくべき知識もまとめていますので、AI開発の際はぜひ参考資料の1つとしてお役立てください。

AutoGen(マルチエージェントフレームワーク)とは
AutoGenとは、LLM(大規模言語モデル)の能力を最大限に引き出すよう設計されたマルチエージェントフレームワークです。これまで単一のLLMでは困難だった複雑なタスクも、異なる専門知識を持つAIエージェントが協力することで解決を目指す環境をAutoGenによって容易に構築できる特徴があります。
例えばGitHub Copilotの場合、コードの補完や提案といった一部分に特化した仕様ですが、AutoGenはさらに複雑なワークフローの自動化に適したフレームワークのため、高度なカスタマイズによってはGPT-4や各種LLMと連携し、自然言語でのプロンプト提示のみで複雑なタスク処理も実現可能です。
マルチエージェントとは
AutoGenについて理解を深める前に、マルチエージェントについて押さえておきましょう。マルチエージェントとは複数の専門知識を持つAIエージェントが協力し合いながらユーザーの課題や問題を解決へ導く仕組みのことです。

例えば企業にはさまざまな部門が設置され、それぞれに適した従業員が在籍していますが、従業員たちが必要なコミュニケーションを取りながら業務に取り組む構造がマルチエージェントの基本構造です。
そしてAutoGenは、この基本構造を企業の目的や業務プロセスに合わせて自由にカスタマイズして、社内運用につなげるための環境を提供するサービスを指します。
AutoGenの基本要素と設計思想
AutoGenは、オープンソースのマルチエージェントフレームワークのなかでも、エージェント間の自然な会話を中核として設計されています。そのためAI開発者は、複雑なコードで直接プログラミングをしなくても、エージェントの役割や対話ルールを定義するのみで高度なAIシステムを構築できます。ここからは、AutoGenの基本要素と設計思想について解説します。
基本要素
AutoGenの基本要素は以下の要素で構成されています。これらの要素が組み合わさることで、柔軟なタスク実行を実現できます。
会話型エージェント
ユーザーやほかエージェントとの間で自然言語による対話に対応した、LLMを基盤に持つエージェントです。タスクの要件や進捗を理解できる特徴があり、必要に応じて質問を投げかけることで会話の流れをスムーズに進めます。
なお、AI開発者であるユーザーは特定の領域に対応可能な会話型エージェントを構築することで、行動を詳細に制御できます。
関数呼び出しエージェント
具体的な行動を実行するために設計されたエージェントです。Pythonコードの実行、WebAPIへのリクエスト送信など、外部ツールとの連携を担う役割を持ちます。関数呼び出しエージェントの存在によってAutoGenはLLMの言語理解能力と実際のシステム操作能力をスムーズに結合できます。
プロキシエージェント
人間とエージェントのパイプ役を担うエージェントで、人間による介入・承認ポイントを提供します。例えばAI開発者がAutoGenシステムに介入を図りたい場合、プロキシエージェントを介すことで具体的な指示を提示できます。
会話フロー管理
エージェント間のメッセージングと会話進行の制御を自律的に行えるエージェントです。グループチャット機能により、どのエージェントが次に話すべきか、どのようなアクションを取るべきかを判断します。
思想設計
ここからは、AutoGenの思想設計について解説します。具体的には以下の4つです。
会話
タスクの実行を単なる処理ではなく対話として捉えることで、人間同士のやり取りのように自然に進みます。エージェントはそれぞれの意図や特性を理解した上で情報交換ができるため、各エージェントが協力し合いながら目標達成を目指すことができます。
透明性
エージェント間のすべての会話ログは記録されています。そのためAI開発者はエージェントがどのように考え、どのような会話によって現在の結論に至ったのかプロセスや状況を把握・追跡できます。
人間の介入
AutoGenはエージェントの自律性を尊重しつつも、タスクや会話の状況によっては人間がいつでも会話に介入できる設計になっています。そのため、方向性がズレた会話がはじまった場合は速やかに方向修正の指示を出したり、適切な指示をエージェントに出すことができます。
カスタマイズ性と拡張性
AutoGenはエージェントの役割や技術・知識、会話フローについて自由に定義・カスタマイズできる仕様です。そのため特定のタスクに応じて適切なマルチエージェントシステムを構築できます。このほか、既存エージェントの拡張や新たなタイプを持つエージェントを追加することも可能です。
環境を構築する手順
AutoGenを使ってマルチエージェントシステムを構築する際は、これから開設する以下の手順に沿って進めることをおすすめします。
インポート・LLM設定
まずはPython環境にAutoGenライブラリをインストールし、必要なモジュールをインポートします。次にタスクを実行するために使用するLLMのAPIキーやモデル名を指定し、設定リストを準備します。
import autogen
# LLMの設定例(your_key_file.json にAPIキーなどを記述)
# {
# "api_key": "YOUR_OPENAI_API_KEY",
# "model": "gpt-4-turbo"
# }
config_list = autogen.config_list_openai_aoai(key_file_path='your_key_file.json')
# または直接辞書で設定
# config_list = [
# {
# "model": "gpt-4-turbo",
# "api_key": "YOUR_OPENAI_API_KEY",
# }
# ]
|
各エージェントに与える役割を定義する
次にシステム内で協調しながらタスク解決を目指すため、エージェントの役割と能力を定義します。一例としては以下の通りです。
| アシスタントエージェント |
一般的な指示を理解し、タスクの計画を立てる役割を担う |
| ユーザープロキシエージェント |
ユーザーからの入力を受け付ける、あるいは生成されたコードを実行する役割を担う |
これらを交えたコードは下記の通りです。
# アシスタントエージェントの定義
assistant = autogen.AssistantAgent(
name="assistant",
llm_config={"config_list": config_list},
system_message="あなたは熟練したプログラマーです。ユーザーの要望に応じてコードを書き、問題を解決します。",
)
# ユーザープロキシエージェントの定義
user_proxy = autogen.UserProxyAgent(
name="user_proxy",
human_input_mode="NEVER", # NEVER, TERMINATE, ALWAYS から選択
max_consecutive_auto_reply=10,
is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"),
code_execution_config={"work_dir": "coding", "use_docker": False}, # Dockerの使用有無を設定
llm_config={"config_list": config_list},
system_message="あなたはコードを実行し、その結果を報告します。必要に応じてAssistantにフィードバックを提供します。",
)
|
会話フロー環境の構築
最後に定義したエージェントを連携し、タスクを開始します。「initiate_chat」メソッドを使用し、エージェント間の会話を開始して、指定されたタスクを解決させます。
# 会話を開始
user_proxy.initiate_chat(
assistant,
message="Pythonでフィボナッチ数列の最初の10項を計算するコードを書いてください。",
)
|
AutoGenの活用例
AutoGenは、柔軟性と拡張性に優れていることから、多種多様な業界・シーンで活用できます。ここからは活用例の一部について解説します。
数学に関する問題の自動解決
複雑な数学の問題を複数のエージェントが協力しながら解決する例です。人間があらかじめ問題を提示したのち、アシスタントエージェントが計画を立案し、必要に応じてコード実行エージェントが計算をはじめます。こうした活用方法によって方程式の解や積分などの高度な問題も計算できます。またデータセットの統計分析やグラフ生成も可能です。
例えば、AutoGenを使って数学の問題を解くコードです。アシスタントエージェントが問題の解決策を考える役割を、ユーザープロキシエージェントがPythonコードを実行しながら答えを検証します。
import autogen
config_list = autogen.config_list_openai_aoai()
# 数学の問題を解くためのアシスタントエージェント
assistant = autogen.AssistantAgent(
name="assistant",
system_message="あなたは数学の専門家で、問題を解くためにPythonコードを書くことができます。",
llm_config={"config_list": config_list},
)
# コードを実行するエージェント(ユーザーを代理)
user_proxy = autogen.UserProxyAgent(
name="user_proxy",
is_termination_msg=lambda x: x.get("content", "") and "terminate" in x.get("content", "").lower(),
human_input_mode="NEVER",
max_consecutive_auto_reply=10,
code_execution_config={"work_dir": "math_example", "use_docker": False},
)
# 会話の開始
user_proxy.initiate_chat(
assistant,
message="`x^2 + 5x + 6 = 0`の方程式の解を計算してください。",
)
|
検索補助付きコード生成
Web検索を伴うタスクに対してエージェントが自律的に検索を行い、その結果に基づいたコードを生成・修正する例です。最新のライブラリやAPIの使用方法を調べながらコード生成できるほか、リアルタイムデータを利用したアプリケーション開発を可能にします。
import autogen
config_list = autogen.config_list_openai_aoai()
# 検索ツールを持つエージェントとしてユーザープロキシを設定
user_proxy = autogen.UserProxyAgent(
name="user_proxy",
is_termination_msg=lambda x: x.get("content", "") and "terminate" in x.get("content", "").lower(),
human_input_mode="NEVER",
code_execution_config={"work_dir": "search_code_gen", "use_docker": False},
)
# コード生成を専門とするアシスタントエージェント
assistant = autogen.AssistantAgent(
name="assistant",
llm_config={"config_list": config_list},
system_message="あなたは熟練したプログラマーです。検索結果を参考にしながら、Pythonコードを生成します。",
)
# 検索ツールを呼び出す関数
def search_tool(query):
# ここにWeb検索APIを呼び出すコードを実装
# 例:Google Search API, Serper API など
return f"Web検索結果:{query}に関する情報がここに表示されます。"
# 関数呼び出しを有効化
user_proxy.register_function(
function_map={
"search_tool": search_tool,
}
)
# 会話の開始
user_proxy.initiate_chat(
assistant,
message="Pythonで「requests」ライブラリを使って、特定のURLからデータを取得するコードを書いてください。ライブラリのインストール方法も教えてください。",
)
|
仮想環境における意思決定・タスクの実行
エージェントが複雑な仮想環境内で行動し、タスクを計画・実行する例です。複数のエージェントが環境の状態を観察しながら行動を決めていきます。ゲーム内での戦略策定やキャラクターの行動制御などに有効です。
import autogen
config_list = autogen.config_list_openai_aoai()
# 計画立案エージェント
planner = autogen.AssistantAgent(
name="planner",
system_message="あなたは戦略家で、与えられた仮想環境の目標を達成するためのステップを計画します。",
llm_config={"config_list": config_list},
)
# 行動実行エージェント
executor = autogen.UserProxyAgent(
name="executor",
is_termination_msg=lambda x: x.get("content", "") and "terminate" in x.get("content", "").lower(),
human_input_mode="NEVER",
code_execution_config={"work_dir": "virtual_env_example", "use_docker": False},
)
# 仮想環境と連携するツール
def execute_action(action_plan):
# 仮想環境にアクションを送信するAPIを呼び出す
print(f"仮想環境でアクションを実行中: {action_plan}")
return f"アクション'{action_plan}'が完了しました。"
executor.register_function(
function_map={
"execute_action": execute_action,
}
)
# 会話の開始
executor.initiate_chat(
planner,
message="仮想環境で「宝箱を探す」というタスクを達成するためのステップを計画してください。完了したら、`execute_action`関数を使ってタスクを実行してください。",
)
|
なお、このコードは概念的なものであるため、実際は特定の仮想環境に依存することを視野に入れておきましょう。
動的グループチャットの構築
タスクの進行に応じて必要な専門知識を持つエージェントが自発的に会話に参加する例です。タスクの定義やコード生成などを各エージェントに自動的に割り振ることができます。また、異なる視点を持つ複数のエージェントを参加・議論させることで、本来人間で行う可能性があった議論を繰り広げながら課題解決に期待できる企画の策定にもつながります。
import autogen
config_list = autogen.config_list_openai_aoai()
# ユーザーの代わりとなるエージェント
user_proxy = autogen.UserProxyAgent(
name="user_proxy",
is_termination_msg=lambda x: x.get("content", "") and "terminate" in x.get("content", "").lower(),
human_input_mode="NEVER",
code_execution_config={"work_dir": "group_chat_example", "use_docker": False},
)
# 計画立案エージェント
planner = autogen.AssistantAgent(
name="planner",
system_message="あなたはタスクを計画し、適切なエージェントにタスクを割り振ります。",
llm_config={"config_list": config_list},
)
# コーディングエージェント
coder = autogen.AssistantAgent(
name="coder",
system_message="あなたはPythonコードを生成します。",
llm_config={"config_list": config_list},
)
# デバッギングエージェント
debugger = autogen.AssistantAgent(
name="debugger",
system_message="あなたはコードのエラーを特定し、修正案を提案します。",
llm_config={"config_list": config_list},
)
# グループチャットの設定
groupchat = autogen.GroupChat(
agents=[user_proxy, planner, coder, debugger],
messages=[],
max_round=12,
speaker_selection_method="auto", # 最も適切なエージェントが自動で発言
)
manager = autogen.GroupChatManager(
groupchat=groupchat,
llm_config={"config_list": config_list}
)
# グループチャットの開始
user_proxy.initiate_chat(
manager,
message="1から10までの偶数を表示するPythonコードを作成してください。もしエラーがあれば修正してください。",
)
|
会話型でのチェスゲーム
各プレイヤーをエージェントとして設定し、会話を通じてチェスで遊ぶ例です。エージェントは相手の手や進み具合などを分析し、状況に最適な一手を提案します。その結果、複雑なルールに縛られたタスクを会話のみで実行できたり、シミュレーションを通じた戦略を学んだりすることにつながります。
import autogen
config_list = autogen.config_list_openai_aoai()
# チェスプレイヤー1(白)
white_player = autogen.AssistantAgent(
name="WhitePlayer",
system_message="あなたはチェスの白のプレイヤーです。最善手を考え、`move`関数を呼び出して手を指します。",
llm_config={"config_list": config_list},
)
# チェスプレイヤー2(黒)
black_player = autogen.AssistantAgent(
name="BlackPlayer",
system_message="あなたはチェスの黒のプレイヤーです。相手の手を分析し、最善手を指します。",
llm_config={"config_list": config_list},
)
# ゲーム管理エージェント(ユーザーを代理)
game_master = autogen.UserProxyAgent(
name="GameMaster",
is_termination_msg=lambda x: x.get("content", "") and "ゲームが終了しました" in x.get("content", ""),
human_input_mode="NEVER",
code_execution_config={"work_dir": "chess_example", "use_docker": False},
)
# チェス盤を管理する関数
chess_board = {} # 実際にはライブラリを使用
def make_move(player, move):
# ここにチェスの動きを検証・実行するロジックを実装
# 実際には、`chess`ライブラリなどが利用される
print(f"{player}が{move}を指しました。")
return "次のプレイヤーの手番です。"
game_master.register_function(
function_map={
"make_move": make_move,
}
)
# 会話の開始
game_master.initiate_chat(
white_player,
message="ゲームを開始します。`WhitePlayer`は`e2`から`e4`へ動かし、`make_move`関数を使ってください。",
chat_history=[{"role": "user", "content": "チェスゲームを開始します。あなたは白です。"}],
config={"recipient": black_player, "messages": []},
)
# 2プレイヤー間のチャットを設定
game_master.initiate_chat(
black_player,
message="次に黒の手番です。",
chat_history=[],
config={"recipient": white_player, "messages": []},
)
|
AutoGenの注意点
AutoGenは柔軟性や利便性に優れたツールである一方、導入や運用にあたってはいくつかの注意点があります。
| 項目 |
リスク・注意点 |
対策 |
| プライバシー保護・セキュリティ面 |
API連携によって外部にデータを送信する特徴から、使用方法を誤ると機密情報が漏洩するリスクがある |
・機密性の高い情報ほど入力・送信しない ・オンプレミスタイプのLLMを活用する |
| パフォーマンス・スケーラビリティ |
複数のエージェントが連携することで処理速度が遅くなったり応答時間が長くなったりすることがある |
・エージェントの役割を最適化する ・並列処理を活用する ・キャッシュを利用し負荷を分散させる |
| コスト面 |
OpenAI APIを利用する際、リクエストごとに課金されるため、エージェントが増えるごとにコストが増える |
・APIにおける使用制限を設定する ・ローカルLLMを導入する ・キャッシュを活用して無駄なリクエストを削減する |
| エージェントの誤作動 |
エージェント同士のやり取りが制御不能になることがある |
・適切な停止条件を設定する ・ログ監視やエージェント間の制約を明らかにする |
| ハルシネーション |
参考にするデータ・情報によっては誤情報を生成するリスクがある |
・人間によるファクトチェックや確認業務を必須項目にする ・根拠の提示を求めるプロンプトを盛り込む |
AutoGenの使用にあたってはこれらのリスク・注意点に留意するだけでなく、あらかじめ適切な対策やアプローチ法を策定してから導入・活用することをおすすめします。
まとめ
AutoGenは複数のエージェントが会話を通じてコミュニケーションを取り、自律的なタスクを解決するためのエージェントを開発できるフレームワークです。AutoGenを活用して社内業務に有効なエージェントを開発できれば、さまざまなタスクを自動的に処理し、人間は人間にしかできない業務に従事できるようになるなど、従業員配置の最適化につながるでしょう。
AutoGenの導入や使用にあたって不安や人的リソースに課題がある際は、Peaceful Morningが提供する「DX Boost」をおすすめします。DX BoostはDX推進を加速させるプロ人材を紹介するサービスで、グループ600万名を超える人材データベースから、貴社に最適なDX人材を即日ご提案できるため、スピード感を持ってDXを推進できます。

コメントを残す