Amazon Bedrock 的多智能体协作(Multi Agent Collaboration):实现高级智能体联动

前言

今天我将结合实际运行的示例代码,为大家讲解 2024 年 12 月发布的 Amazon Bedrock 新功能 ——“多智能体协作(Multi Agent Collaboration)”。

什么是多智能体协作(Multi Agent Collaboration)

1. 概述

多智能体协作(Multi Agent Collaboration)是 Amazon Bedrock 推出的新功能,支持多个 AI 智能体(Agent)协同完成任务。AWS 官方博客中以社交媒体营销活动为例,介绍了其应用模式:

  1. 由管理智能体(Supervisor Agent)接收用户的请求;
  2. 委托专门负责内容创作的智能体撰写帖子;
  3. 委托专门负责互动量预测的智能体确定发帖时机;
  4. 将各智能体返回的结果整合后,向用户反馈最终响应。

通过管理智能体为各专业智能体分配相应任务,实现了多智能体协同生成输出的能力。

2. 与其他智能体服务的对比

在涉及多智能体管理的服务中,与多智能体协作(Multi Agent Collaboration)功能相似的是多智能体编排器(Multi Agent Orchestrator)。下表总结了普通智能体、多智能体协作(Multi Agent Collaboration)及多智能体编排器(Multi Agent Orchestrator)各自的特点与适用范围。

特征普通的智能体(通常Agent)多智能体协作(Multi Agent Collaboration)多智能体编排器(Multi Agent Orchestrator)
目的由单个智能体负责所有处理,完成简单任务。多个智能体联动分工,高效处理复杂任务。集中管理多个智能体,将任务分配给最优智能体。
结构单个智能体接收用户请求,独立完成所有处理流程。管理智能体拆分任务、分配给各智能体,并整合结果。管理角色分析请求,选择合适的智能体执行任务。
主要功能1. 简单任务处理2. 一致性响应1. 多智能体高效分工2. 发挥各智能体专业性开展处理1. 依据请求灵活选择智能体2. 动态分配任务
优点1. 结构简单,易于实现2. 适用于小规模任务1. 可高效处理复杂任务2. 最大限度发挥各智能体的专业能力1. 设计简洁,便于新增和修改2. 可灵活适配各类任务
缺点1. 单个智能体承担所有处理,可扩展性低2. 难以应对复杂任务1. 需实现智能体间联动,管理难度大2. 需进行复杂的系统设计1. 智能体间协作性弱,不适用于复杂任务2. 处理过程高度依赖中央管理

github.com

相较于使用普通智能体或多智能体编排器,借助多智能体协作(Multi Agent Collaboration)似乎能够应对更为复杂的任务。

运行示例场景

接下来,让我们实际操作使用多智能体协作(Multi Agent Collaboration)功能。本次将基于 AWS 官方提供的资源,搭建一个股票分析助手。

github.com

1. 股票分析助手概述

我们将要搭建的股票分析助手如下所示:

通过运行示例代码,将创建以下 4 个智能体:

  • Stock Analysis(管理智能体 / Supervisor Agent)接收用户的股票相关请求,分析股价数据与新闻数据;将处理工作委托给各专业智能体,最终生成汇总报告。
  • Stock Data Researcher(股价数据研究智能体)获取股价历史数据,分析价格波动;通过 Lambda 函数获取实时市场数据。
  • News Researcher(新闻研究智能体)获取指定股票代码(Ticker)的相关新闻,分析市场情绪与趋势;通过 Lambda 函数调用网络搜索 API,收集最新新闻。
  • Financial Analyst(金融分析师智能体)整合股价分析与新闻分析的结果,提供投资判断建议;生成最终推荐内容及面向用户的报告。

流程上,用户输入股票相关信息后,上述 2-4 号智能体将围绕请求的股票信息开展收集与解析工作,再由 1 号 Stock Analysis 智能体对结果进行整合。

2. 搭建方法

在 Bedrock Agent 中搭建多智能体协作(Multi Agent Collaboration)非常简便,仅需完成以下设置:

  1. 创建需要参与多智能体协作的各智能体;
  2. 按照以下配置创建用于统筹的管理智能体(Supervisor Agent):
    • 创建管理智能体时,开启 “Enable multi-agent collaboration”(启用多智能体协作)选项;
    • 按以下形式设置由 Supervisor Agent(主管代理)进行统括的 Collaborator Agent(协作代理)。

本次将通过运行以下示例代码,实现基于 boto3 的多智能体系统搭建。

github.com

我们将按照 README 文档的说明逐步搭建系统。

1. 执行以下命令搭建环境

git clone https://github.com/awslabs/amazon-bedrock-agent-samples

cd amazon-bedrock-agent-samples

python3 -m venv .venv

source .venv/bin/activate

pip3 install -r src/requirements.txt

2. 执行以下命令创建示例智能体

python3 examples/multi_agent_collaboration/portfolio_assistant_agent/main.py --recreate_agents "true"

3. 生成的智能体列表

执行上述命令后,将创建以下智能体:

生成的智能体概要

系统将 portfolio_assistant 智能体设置为管理智能体(Supervisor Agent),并将其他智能体注册为协作智能体(Collaborator Agent)。

Stock Analysis(管理智能体 / Supervisor Agent)

通过执行以下代码创建管理智能体:

portfolio_assistant = SupervisorAgent.direct_create(
    "portfolio_assistant",
    role="Portfolio Assistant",
    goal="分析特定的潜在股票投资标的,提供包含一系列投资考量因素的报告",
    collaboration_type="SUPERVISOR",
    instructions="""
             请以分析特定股票潜在投资价值的资深专家身份开展工作。
             为掌握最新股价走势及相关新闻动态,需进行调研分析。
             提交内容详实、论证充分且兼顾潜在投资者需求的报告。
             借助分析师协作智能体完成最终分析,并将新闻与股价数据作为输入传递给分析师。
             对协作智能体的调用需按顺序进行,不可并行调用。
             最终输出内容需全部以日语呈现。""",
    collaborator_agents=[
        {
            "agent": "news_agent",
            "instructions": """
             如需查找特定股票的相关新闻,请调用此协作智能体。""",
        },
        {
            "agent": "stock_data_agent",
            "instructions": """
             如需查询特定股票的价格历史,请调用此协作智能体。""",
        },
        {
            "agent": "analyst_agent",
            "instructions": """
             如需获取原始调研数据,并生成详细报告及投资考量建议,请调用此协作智能体。""",
        },
    ],
    collaborator_objects=[news_agent, stock_data_agent, analyst_agent],
    guardrail=no_bitcoin_guardrail,
    llm="us.anthropic.claude-3-5-sonnet-20241022-v2:0",
    verbose=False,
)

github.com

上述代码中的核心配置项说明如下:

  • goal:设置智能体整体预期输出目标。
  • instructions:定义对管理智能体的操作指引,包括如何与协作智能体协同工作。
  • collaborator_agents:定义各协作智能体的配置,确保管理智能体可正常调用协作智能体。

在 AWS 控制台中也可确认:portfolio_assistant 已被设为管理智能体,其余 3 个智能体均已注册为协作智能体。

此外,通过以下提示词指令,要求管理智能体与其他协作智能体协同完成股票分析任务。(原始提示词为英文,为实现日语输出已进行修正)。本次通过提示词指定智能体按顺序执行任务,但协作智能体也支持并行执行模式。

请以分析特定股票潜在投资价值的资深专家身份开展工作。为掌握最新股价走势及相关新闻动态,需进行调研分析。

提交内容详实、论证充分且兼顾潜在投资者需求的报告。借助分析师协作智能体完成最终分析,并将新闻与股价数据作为输入传递给分析师。

对协作智能体的调用需按顺序进行,不可并行调用。最终输出内容需全部以中文呈现。

stock_data_agent(股价数据研究智能体)

如图所示,该智能体将用于获取股票价格信息的 Lambda 函数配置为行动组。通过此行动组获取股票价格信息,是该智能体的核心职责。

以下代码定义了该智能体的功能:通过从管理智能体传递的提示词中提取 tool_defs 里定义的参数,实现股价信息的获取。

# Define Stock Data Agent
stock_data_agent = Agent.direct_create(
    name="stock_data_agent",
    role="财务数据采集员",
    goal="获取特定股票代码(Ticker)的准确股价趋势",
    instructions="实时财务数据提取专家",
    tool_code=f"arn:aws:lambda:{region}:{account_id}:function:stock_data_lookup",
    tool_defs=[
        {  # lambda_layers: yfinance_layer.zip, numpy_layer.zip
            "name": "stock_data_lookup",
            "description": "获取指定股票代码的1个月股价历史,返回格式为JSON",
            "parameters": {
                "ticker": {
                    "description": "The ticker to retrieve price history for",
                    "type": "string",
                    "required": True,
                }
            },
        }
    ],
)

github.com

news_agent(新闻研究智能体)

如图所示,该智能体将用于搜索和获取股票相关新闻的 Lambda 函数配置为行动组。通过此行动组获取股票相关新闻,是该智能体的核心职责。

analyst_agent(金融分析师智能体)

通过以下提示词配置,该智能体可根据输入的股价信息与新闻内容开展分析工作:

角色:财务分析师

目标:通过分析股价趋势与市场新闻获取洞察

操作说明:作为资深分析师提供战略性建议。接收新闻摘要与股价摘要作为输入。无可用工具,仅可依赖自身知识开展工作。

3. 运行示例场景

接下来,我们立即运行已搭建的智能体系统。本次将通过 AWS 控制台进行操作。

我们向作为管理智能体创建的 portfolio_assistant 智能体发送以下请求,查询亚马逊股票相关信息:

请求

ticker:Amazon

回答

在本次案例中,大约 30 秒左右就收到了回复。尽管执行时间会因所运行的智能体(Agent)而异,但如果要执行多个像搜索这类耗时的操作,整体花费的时间也会相应增加。

此外,我们能够通过以下形式查看协作智能体(Collaborator Agent)是如何开展处理工作的。可以看到,news_agent、stock_data_agent、analyst_agent 这几个智能体相互协作,成功回答了问题。

接下来,让我们看看管理智能体(Supervisor Agent)是如何向协作智能体下达指令的。通过跟踪步骤,能够查看各个智能体的运行情况,具体如下:

从以下内容可以看出,协作智能体能够从管理智能体传递的提示词中提取出参数。

管理智能体向协作智能体(stock_data_agent)发送的提示词

[{text = 请提供股票代码为 ‘Amazon’ 的股票价格历史。}]

协作智能体执行行动组的输入

"invocationInput": [
{
"actionGroupInvocationInput": {
"actionGroupName": "actions_stock_data_agent",
"executionType": "LAMBDA",
"function": "stock_data_lookup",
"parameters": [
{
"name": "ticker",
"type": "string",
"value": "Amazon"
}
]
},
"invocationType": "ACTION_GROUP",
"traceId": "1f373c5c-12b9-4d07-8a24-1317d66f5115-0"
}
]

对于管理智能体接收到的请求,我们可以轻松构建出向各个协作智能体分配任务的流程。在将任务拆分给多个专业智能体来解决时,多智能体协作(Multi Agent Collaboration)的优势有望得到充分发挥。

总结

本次我们对 2024 年 12 月发布的 Amazon Bedrock 多智能体协作(Multi Agent Collaboration)功能进行了讲解。特别令人欣喜的是,仅通过 Bedrock Agent 就能构建出专业智能体以及对其进行统筹的管理智能体。鉴于该功能在各类应用场景中都有潜在的使用可能,我打算今后继续进行更多尝试。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注