ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #12 - Multi-Agent Orchestrator」という勉強会を開催しました。
generative-agents.connpass.com
アーカイブ動画はこちらです。
Multi-Agent Orchestrator
今回は、AWSが公開したマルチエージェントフレームワーク「Multi-Agent Orchestrator」について、公式ドキュメントを読んだり動かしたりしてみました。
Multi-Agent OrchestratorのGitHubリポジトリはこちらです。
公式ドキュメントはこちらです。
今回のポイント
Multi-Agent Orchestratorの概要
Multi-Agent Orchestratorの概要は、ドキュメントの「How it works」のページで説明されています。
非常にシンプルなフレームワークで、以下のように動作します。
- ユーザーの入力を受け付ける
- 「Classifier」が複数のAgentから適したAgentを選択する
- 選択されたAgentが今までの会話履歴をもとに回答する
前回扱った「Magentic-One」とも少し似ていますが、より単純な挙動ということになります。
Quickstart
Quickstartのコードを試したところ、しっかり動作しました。
Quickstartのコードの重要な箇所を抽出すると以下のようになります。
orchestrator = MultiAgentOrchestrator(
options=OrchestratorConfig(
:
),
)
tech_agent = BedrockLLMAgent(
BedrockLLMAgentOptions(
name="Tech Agent",
streaming=True,
description="Specializes in technology areas including software development, hardware, AI, \
cybersecurity, blockchain, cloud computing, emerging tech innovations, and pricing/costs \
related to technology products and services.",
callbacks=BedrockLLMAgentCallbacks(),
),
)
orchestrator.add_agent(tech_agent)
:
async def handle_request(
_orchestrator: MultiAgentOrchestrator,
_user_input: str,
_user_id: str,
_session_id: str,
):
response: AgentResponse = await _orchestrator.route_request(
_user_input,
_user_id,
_session_id,
)
:
簡単に言えば、以下のような使い方になります。
MultiAgentOrchestratorを初期化- 「BedrockLLMAgent」などのAgentをnameやdescription、toolなどを与えて初期化
orchestrator.add_agentとしてAgentをOrchestratorに登録_orchestrator.route_requestのようにしてOrchestrator実行
個人的な感覚としては、このようなマルチエージェントフレームワークはよく見かけます。
Agent
Multi-Agent Orchestratorにおける「Agent」はかなり広い概念です。
BedrockのLLMやAgent機能を使ったり、AnthropicやOpenAIのAPIを使うこともできれば、LambdaやCustom Agentで任意の関数を実行することもできます。 LLMによる処理に限らず、ルールベースの処理なども自由に実装できるということです。
「ChainAgent」を使用すれば、Agentを連鎖的に呼び出すことも可能とのことです。
Classifier
Multi-Agent Orchestratorにおいて、Agentを選択するのが「Classifier」です。
Quickstartのコードを実行すると、以下のようなログが表示されます。

You: プログラミング初心者にPythonについて説明して INFO:multi_agent_orchestrator.utils.logger: ** CLASSIFIED INTENT ** INFO:multi_agent_orchestrator.utils.logger:======================= INFO:multi_agent_orchestrator.utils.logger:> Text: プログラミング初心者にPythonについて説明して INFO:multi_agent_orchestrator.utils.logger:> Selected Agent: Tech Agent INFO:multi_agent_orchestrator.utils.logger:> Confidence: 0.95 INFO:multi_agent_orchestrator.utils.logger: INFO:multi_agent_orchestrator.utils.logger: ** AGENT TECH-AGENT CHAT HISTORY ** INFO:multi_agent_orchestrator.utils.logger:=================================== INFO:multi_agent_orchestrator.utils.logger:> - None - INFO:multi_agent_orchestrator.utils.logger: はい、プログラミング初心者にPythonについて説明させていただきます。
Selected Agent: Tech Agentという出力から、「Tech Agent」が選択されたことが分かります。
また、Confidence: 0.95という出力から、確信度が0.95であることが分かります。
ClassifierとしてはデフォルトでClaude 3.5 SonnetのTool useが使われています。
ソースコードを参照すると、Tool useでAgentを選択し確信度(Confidence)を出力させていることが分かります。
self.tools = [
{
:
"selected_agent": {
"type": "string",
"description": "The name of the selected agent",
},
"confidence": {
"type": "number",
"description": "Confidence level between 0 and 1",
},
:
LLMでAgentを選択するようなコードを書くときの定番で簡単な実装です。
Agent Overlap Analysis
ドキュメントを見ていて気になったのが「Agent Overlap Analysis」という機能です。
複数のエージェントの役割が重複しないよう、Agentのdescriptionに対してTF-IDFのコサイン類似度を算出して分析するという機能です。
Classifierがエージェントを明確に選択できるようにするための機能と思われます。
残念ながらPython版にはこの機能はないようだったので動かしませんでしたが、他のフレームワークでもあまり見ない機能だったので面白かったです。
次回のご案内
以上、今回は「Multi-Agent Orchestrator」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #13 - Model Context Protocol (MCP)」ということで、Anthropicが公開した「Model Context Protocol (MCP)」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!