ジェネラティブエージェンツの大嶋です。
「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などあれば教えてください!