Last chance! 50% off DataCamp Premium
Sale ends in
几乎每周,具身/智能体 AI 领域都会出现新东西。 AWS Multi-Agent Orchestrator(多智能体编排器) 是一个用于管理多个 AI 智能体的全新框架。无论您是在构建客户支持系统还是一个专门的多智能体应用,这个框架都值得一试。
在本教程中,我将介绍 AWS Multi-Agent Orchestrator 的独特之处,手把手带您完成环境搭建,并开发一个演示项目,直观体验该框架的运行方式。
AWS Multi-Agent Orchestrator 是一个灵活且内置众多工具的框架,旨在管理 AI 智能体并支持复杂的多轮对话。借助其预构建组件,我们可以快速开发与部署,从而专注于业务应用,而无需从零搭建这些基础能力。
AWS Multi-Agent Orchestrator 提供以下特性:
该框架同时支持 Python 和 TypeScript 实现。

Multi-Agent Orchestrator 的工作方式概览。 (来源)
在上图中,分类器会综合可用的智能体、用户提示以及过往对话历史,选择最合适的智能体处理用户输入。随后,由该智能体处理请求。流程简单而高效。
想要快速完成环境搭建,您可以参考文档中的 快速开始指南。
首先,创建一个新文件夹和一个新的 Python 虚拟环境,用于安装所需的库。
mkdir test_multi_agent_orchestrator
cd test_multi_agent_orchestrator
python -m venv venv
source venv/bin/activate # On Windows use venv\\Scripts\\activate
激活虚拟环境后,安装库:
pip install multi-agent-orchestrator
接下来需要配置 AWS 账户。如果您还没有 AWS 账户,可以注册 免费套餐账户。注册完成后,请 下载 AWS CLI。
还需要对 AWS CLI 进行配置。详细说明请参阅 设置 AWS CLI,也可通过更简单的方式:运行 aws configure 命令并提供 AWS 访问密钥 ID 和私有访问密钥。这些密钥可在您的控制台中新建用户后获取。

创建新用户时提供的访问密钥。
拿到访问密钥后,运行 aws configure,输入密钥,选择区域名称(完整列表见 此处),请选择离您最近的区域,并将默认输出格式设置为 json。

如果 CLI 配置正确,运行 aws sts get-caller-identity 命令应显示您的 AWS 账户 ID、用户 ID 和 ARN。
完成 AWS CLI 配置后,我们需要在 AWS Bedrock 中开通所需的 LLM 访问权限。Amazon Bedrock 是一项服务,可通过 API 试用和调用基础模型(例如 Llama 3.2 或 Claude 3.5 Sonnet)。Multi-Agent Orchestrator 默认会调用两种模型:
当然,您可以更换这些模型,但这里我们先沿用默认配置。
要开通对这两个模型的访问,请前往 Amazon Bedrock > Model Access,选择“Modify model access”。勾选这两个模型(也可按需选择其他模型)并填写所需信息。界面如下所示:

提交申请后,模型通常在 1–2 分钟内可用。获得访问权限后,您会在对应模型前看到 “Access granted”。

注意: 您可能需要为新建用户分配策略。如果您在下一小节(测试您的设置)中遇到问题,可以先进行验证。如需参考,请查看 此页面。简言之,您需要为该用户授予 AmazonBedrockFullAccess 权限。

要检查前述步骤是否正确,请使用以下代码:
import uuid
import asyncio
import json
import sys
from typing import Optional, List, Dict, Any
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator, OrchestratorConfig
from multi_agent_orchestrator.agents import (
BedrockLLMAgent,
BedrockLLMAgentOptions,
AgentResponse,
AgentCallbacks,
)
from multi_agent_orchestrator.types import ConversationMessage, ParticipantRole
orchestrator = MultiAgentOrchestrator(
options=OrchestratorConfig(
LOG_AGENT_CHAT=True,
LOG_CLASSIFIER_CHAT=True,
LOG_CLASSIFIER_RAW_OUTPUT=True,
LOG_CLASSIFIER_OUTPUT=True,
LOG_EXECUTION_TIMES=True,
MAX_RETRIES=3,
USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED=True,
MAX_MESSAGE_PAIRS_PER_AGENT=10,
)
)
class BedrockLLMAgentCallbacks(AgentCallbacks):
def on_llm_new_token(self, token: str) -> None:
# handle response streaming here
print(token, end="", flush=True)
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."
),
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
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
)
# Print metadata
print("\nMetadata:")
print(f"Selected Agent: {response.metadata.agent_name}")
if response.streaming:
print("Response:", response.output.content[0]["text"])
else:
print("Response:", response.output.content[0]["text"])
if __name__ == "__main__":
USER_ID = "user123"
SESSION_ID = str(uuid.uuid4())
print("Welcome to the interactive Multi-Agent system. Type 'quit' to exit.")
while True:
# Get user input
user_input = input("\nYou: ").strip()
if user_input.lower() == "quit":
print("Exiting the program. Goodbye!")
sys.exit()
# Run the async function
asyncio.run(handle_request(orchestrator, user_input, USER_ID, SESSION_ID))
如果您能够输入提示并收到回答,说明一切正常。
AWS Multi-Agent Orchestrator 仓库提供了多个 TypeScript 和 Python 示例项目。现在我们将编写一个简化的 Python 应用程序,包含两个智能体:Python 开发者智能体 和 机器学习专家智能体。
我们还将使用 Chainlit(一个开源 Python 包)为应用实现简易 UI。首先安装必要的库:
chainlit==1.2.0
multi_agent_orchestrator==0.0.18
下面是演示应用的代码。在给出代码前,我们先做说明:
“anthropic.claude-3-haiku-20240307-v1:0” 作为分类器模型。该分类器会在新用户输入到达时选择使用哪个智能体。MultiAgentOrchestrator,并设置一些配置项。BedrockLLMAgent 类用于创建智能体。需要为每个智能体提供 name 和 description。模型可以选择任一已开通访问的模型,甚至可通过 Ollama 在本地运行。设置 streaming=True 并传入 ChainlitAgentCallbacks() 作为 callback,可让智能体以流式而非一次性完整方式返回响应。最后,将每个智能体添加到 orchestrator 中。user_session,并定义处理用户与智能体消息的主体逻辑。### 1
import uuid
import chainlit as cl
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator, OrchestratorConfig
from multi_agent_orchestrator.classifiers import BedrockClassifier, BedrockClassifierOptions
from multi_agent_orchestrator.agents import AgentResponse
from multi_agent_orchestrator.agents import BedrockLLMAgent, BedrockLLMAgentOptions, AgentCallbacks
from multi_agent_orchestrator.orchestrator import MultiAgentOrchestrator
from multi_agent_orchestrator.types import ConversationMessage
import asyncio
import chainlit as cl
class ChainlitAgentCallbacks(AgentCallbacks):
def on_llm_new_token(self, token: str) -> None:
asyncio.run(cl.user_session.get("current_msg").stream_token(token))
### 2
# Initialize the orchestrator & classifier
custom_bedrock_classifier = BedrockClassifier(BedrockClassifierOptions(
model_id='anthropic.claude-3-haiku-20240307-v1:0',
inference_config={
'maxTokens': 500,
'temperature': 0.7,
'topP': 0.9
}
))
### 3
orchestrator = MultiAgentOrchestrator(options=OrchestratorConfig(
LOG_AGENT_CHAT=True,
LOG_CLASSIFIER_CHAT=True,
LOG_CLASSIFIER_RAW_OUTPUT=True,
LOG_CLASSIFIER_OUTPUT=True,
LOG_EXECUTION_TIMES=True,
MAX_RETRIES=3,
USE_DEFAULT_AGENT_IF_NONE_IDENTIFIED=False,
MAX_MESSAGE_PAIRS_PER_AGENT=10,
),
classifier=custom_bedrock_classifier
)
### 4
def create_python_dev():
return BedrockLLMAgent(BedrockLLMAgentOptions(
name="Python Developer Agent",
streaming=True,
description="Experienced Python developer specialized in writing, debugging, and evaluating only Python code.",
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
callbacks=ChainlitAgentCallbacks()
))
def create_ml_expert():
return BedrockLLMAgent(BedrockLLMAgentOptions(
name="Machine Learning Expert",
streaming=True,
description="Expert in areas related to machine learning including deep learning, pytorch, tensorflow, scikit-learn, and large language models.",
model_id="anthropic.claude-3-sonnet-20240229-v1:0",
callbacks=ChainlitAgentCallbacks()
))
# Add agents to the orchestrator
orchestrator.add_agent(create_python_dev())
orchestrator.add_agent(create_ml_expert())
### 5
@cl.on_chat_start
async def start():
cl.user_session.set("user_id", str(uuid.uuid4()))
cl.user_session.set("session_id", str(uuid.uuid4()))
cl.user_session.set("chat_history", [])
@cl.on_message
async def main(message: cl.Message):
user_id = cl.user_session.get("user_id")
session_id = cl.user_session.get("session_id")
msg = cl.Message(content="")
await msg.send() # Send the message immediately to start streaming
cl.user_session.set("current_msg", msg)
response:AgentResponse = await orchestrator.route_request(message.content, user_id, session_id, {})
# Handle non-streaming or problematic responses
if isinstance(response, AgentResponse) and response.streaming is False:
# Handle regular response
if isinstance(response.output, str):
await msg.stream_token(response.output)
elif isinstance(response.output, ConversationMessage):
await msg.stream_token(response.output.content[0].get('text'))
await msg.update()
if __name__ == "__main__":
cl.run()
现在可以运行应用了。首先运行 chainlit run [app.py](<http://app.py/>) -w 。随后在浏览器新打开的标签页中测试您的应用。

如截图所示,我们现在有了一个用于测试应用并与智能体聊天的 UI。
请注意,由于首个提示 “法国的首都是哪里?” 与我们的任一智能体都无关,系统不会给出答案。这一点对于保持对话相关性、在使用这些模型时避免不必要的额度消耗非常关键。然而,当提出相关问题时,机器学习专家 智能体便会介入并给出回答,这得益于多智能体编排器的智能路由能力。
本文介绍了最新的 AWS Multi-Agent Orchestrator 框架,重点展示了其独特特性,梳理了环境搭建步骤,了解了 Amazon Bedrock 提供的基础模型,并完成了一个演示项目。
在撰写本文时,该框架的文档尚不够全面与细致。若想使用记忆、工具调用等其他功能,您需要阅读代码库,并参考提供的示例项目。
紧跟智能体 AI 框架的迭代是把握这一快速发展领域的明智之举。基于 AWS 服务基础设施构建的 AWS Multi-Agent Orchestrator 颇具潜力,值得持续关注其发展。
用这些课程学习 AI!
学习路径
课程
课程