实验手册
一、前言
Strands Agent 是由亚马逊开源的一款 AI Agent
开发工具包(SDK
),旨在通过模型驱动和极简的开发方式,帮助开发者用少量代码快速构建、运行和部署 AI Agent
。
核心理念与工作方式
Strands Agent
的核心是“模型驱动”架构,与需要开发者定义复杂工作流程的传统框架不同,Strands
充分利用现代大语言模型(LLM
)自身的规划、推理和工具调用能力。开发者只需专注于三件事:
- 模型(
Model
):选择一个大语言模型作为Agent
的大脑。 - 工具(
Tools
):为Agent
提供一系列可以使用的工具,如API
调用、代码执行或信息检索。 - 提示(
Prompt
):用自然语言描述Agent
需要完成的任务目标和行为准则。
在这种模式下,Agent
会运行一个“Agent
循环”(agentic loop
),不断与模型和工具交互,直到任务完成。模型会根据任务动态地规划步骤、决定调用哪个工具,而 Strands
框架则负责执行工具并将结果返回给模型,从而省去了复杂的编排逻辑,将开发周期从数月缩短到几天或几周。
二、环境准备与验证
点击 “开始实验” 按钮,即可扫码进入实验环境。测试账号有效期仅为一天,过期后系统将自动回收清理,请不要上传您的重要数据。
同时,点击 “立即注册” 按钮即可免费注册属于你的亚马逊云科技海外区账号,开启个性化的系统构建之旅,进一步探索更广泛、更深入的云服务领域并保留实验中构建的系统应用,尽情享受云上构建的无限可能!
如果您在自己的亚马逊云科技账户上进行实验,请务必在实验完成后根据清理资源板块部分的说明删除和关闭所有实验资源,以避免产生不必要的费用。
扫码登陆
填写邮箱
如果您之前没有填写过邮箱,则需要填写一下邮箱,并勾选隐私协议,点击前往实验,及可进入实验室。
地区确认
注意: Amazon 地区请选择弗吉尼亚北部(us-east-1
),请检查确认所在地区是否为 us-east-1
。
三、Strands Agent 基础入门
3.1、Strands Agent 简介
Strands Agent 是由 Amazon
开源的轻量级 Python SDK
,是简单易用、代码优先的 AI Agent
构建框架。它让开发者仅用几行代码,就能构建从简单对话助手到复杂自主工作流的完整 AI Agent
系统。
与传统 AI
框架不同,Strands Agent
聚焦简化开发流程,开发者安装 SDK 并创建简单 Python
文件即可快速上手。其核心设计秉持 “轻量且灵活” 原则,提供简洁又高度可定制的Agent
循环系统。
作为生产级解决方案,Strands Agent
内置完备可观测性、追踪功能与多元部署选项,保障Agent
在大规模生产环境稳定运行。模型支持上,兼容 Amazon Bedrock
、Claude
等多厂商主流 AI
模型,开发者可依需求与成本灵活选型。
框架还构建了强大内置工具生态,涵盖文件操作、系统执行、API
交互、数学运算等能力,支持多Agent
协作与自主工作流。同时,全面适配对话/非对话、流式/非流式等各类交互模式,且始终将安全与数据保护置于首位。
目前项目处于公开预览阶段,依托活跃开源社区,为 AI Agent
开发开辟了全新可能。
3.2、Strands Agent 框架安装及配置
- 首先,在
Amazon
控制台主页,输入Cloudformation
,右键在新标签页中打开。在打开的CloudFormation
中,点击已创建的堆栈,选择“资源”中的NotebookInstance
并右键访问物理ID
链接。 - 在弹出的页面中,点击“打开 JupyterLab”,即可进入程序
Notebook
代码环境。 - 点击左侧栏中的
01_introduction
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。 - 接下来,您需要点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。
- 等待依赖安装完成,结果参考如下图所示。
- 4. 在依赖项安装完成后,您需要配置亚马逊云科技的访问凭证。请继续运行程序进行设置,具体步骤如下所示,则表示配置完成:
- 在完成亚马逊云科技凭证设置后,您可以创建您的第一个
Agent
商。点击“运行程序”按钮,具体结果如下图所示: - 接下来请继续运行代码,以查看并分析
Agent
的响应内容。 - 自定义
Agent
:Strands
Agent
的一个强大功能是支持通过系统提示(System Prompt
)来自定义Agent
的行为。系统提示用于定义Agent
的角色、个性、行为准则以及执行任务时需要遵守的约束条件。在这里我们定义了三个Agent
,分别为:technical expert
、beginners
、storyteller
。依次执行Notebook
的代码,现在让我们问每个Agent
同样的问题,并比较他们的回答: - 执行结果参考如下:
- 多向对话:
Strands
的链式Agent
具备跨多个对话回合持续维护上下文的能力,使其在复杂任务中表现得更具连贯性和智能性。这种多轮对话能力对于需要连续推理、任务拆解或状态跟踪的场景尤为重要。请继续依次执行代码: - 执行结果参考如下:
- 在创建
Agent
时,您可以配置几个参数来定制它们的行为。具体结果及操作如下: - 在某些场景中,您可能希望向
Agent
提供除用户即时查询之外的额外上下文信息,以提升其响应的准确性与相关性。这些上下文可以包括历史数据、外部文档摘要、用户偏好设置,甚至是运行时生成的变量。依次参考以下操作执行代码: - 执行结果参考如下:
Strands Agent
最强大的功能之一,就是它们具备调用工具(Tools
)执行任务的能力。工具是Agent
可访问的函数接口,通常用于:通过调用这些工具,
Agent
不仅能够提供语言上的响应,还能够真正“动手”完成工作,实现从“对话智能”到“执行智能”的跨越。参考以下操作进行实现:- 执行特定操作(如计算、转换、文件处理等)
- 检索结构化或实时信息(如数据库查询、
API
请求) - 与外部系统进行集成(如云服务、消息队列、自动化脚本等)
- 执行结果参考如下:
- 有效
Agent
的最佳实践,要创建有效的催发剂,请牢记以下最佳实践: - 清除系统提示符:在系统提示符中提供详细和具体的说明
- 专注的
Agent
:创建具有良好定义的职责的Agent
,而不是试图做所有事情 - 适当的工具:为座席配备符合其预期目的的工具
- 错误处理:预测并处理
Agent
实现中的潜在错误 - 测试:使用各种输入彻底测试
Agent
,以确保它们的行为符合预期 - 迭代改进:根据
Agent
的表现和用户反馈改进Agent
四、Strands Agent 功能与工具
4.1、Strands Agent 基础工具解析
内置工具简介
Strands Agent
最强大的功能之一是其调用工具(Tools)的能力。工具极大地扩展了Agent
的功能,使其不仅能够进行自然语言理解与生成,还能与外部系统交互、处理数据,以及执行各种专门操作。
在本章中,我们将重点介绍由 strands-agents-tools
包提供的一系列内置工具,了解它们的功能特点和使用方法,帮助您快速赋能Agent
,实现更丰富、更高效的智能应用
- 点击左侧栏中的
02_basic_tools
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。 -
- 在开始运行代码之前,请点击
Launcher
标签页,然后选择左下角的Terminal
,双击运行。复制以下命令行,在弹出的终端中并执行: wget "https://gist.githubusercontent.com/davidshtian/a3ce2edd7249fa85cf05f774f862a7e1/raw/b0025af516619842a5163c5074d5157db17aa13b/patch.sh" -O ~/patch.sh sh ~/patch.sh
复制- 回到
02_exploring_builtin_tools
Notebook
文件中,点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。 -
- 执行后,系统会提示我们导入必要的模块,并使用
Amazon Nova Lite
模型创建一个基础Agent
。 -
执行结果参考如下:
Strands Agent
内置的计算器工具允许Agent
执行各种数学计算。让我们从这个简单却功能强大的工具开始体验,请按照图片中指示运行代码:-
执行结果参考如下:
Strands Agent
内置的当前时间工具 ——current_time
,用于提供系统的当前日期和时间信息。 接下来,请按照图片中指示运行代码:-
执行结果参考如下:
Strands
提供了文件读写工具,这对于许多任务非常重要;下面我们先创建一个文件,再使用file_read
工具读取其内容。具体操作如下:-
执行结果参考:
Sample file created successfully!
执行结果参考如下:
Strands
文件写入工具file_write
允许 Agent 创建新文件或修改已有文件内容。-
执行结果参考如下:
9. 接下来,让我们来验证文件已经创建并检查其内容:
执行结果参考如下:
Strands
提供的Python REPL
工具 ——python_repl
,允许Agent
执行任意Python
代码,因而在数据处理、计算等任务中非常强大且灵活。继续执行代码:-
执行结果参考如下:
11.
Strands
的Shell
工具允许Agent
执行Shell
命令,非常适合用于系统操作和自动化任务。执行结果参考如下:
12.
Strands
提供的Web
网络工具 ——http_request
,允许Agent
发送HTTP
请求,便于与各类Web
服务和API
进行交互。执行结果参考如下:
Strands
综合工具中的图像阅读器工具image_reader
,允许Agent
对图像进行分析。让我们先创建一个简单的图像进行演示:-
执行结果参考如下:
- 同样的,您可以继续运行代码来调用内置工具实现图片的信息的解释说明。
-
执行结果参考如下:
- 在实际应用中,
Agent
往往需要组合使用多个工具,以解决更复杂的任务。现在,让我们创建一个配备多个工具的Agent
,并观察它如何协同使用这些工具完成一个更具挑战性的目标任务。 -
执行结果参考如下:
- 在了解了多个内置工具的功能之后,我们来探讨一些高效使用工具的最佳实践与常见模式,以帮助构建更加智能、稳定的
Agent
系统。当为Agent
配置工具时,系统提示(System Prompt)应尽可能清晰明确。良好的提示不仅能帮助Agent
理解其角色,还能准确引导其如何、何时使用特定工具。 -
- 在实际使用中,工具可能因各种原因失败,例如输入不合法、网络异常、权限不足或外部系统响应错误等。因此,理解并妥善处理这些错误,是构建可靠
Agent
系统的关键。Strands 允许Agent
识别工具执行过程中的异常,并通过提示或逻辑控制进行处理,从而提高整体稳定性。让我们看一个简单的错误处理示例: -
执行结果参考如下:
4.2、Strands Agent 自定义工具开发
自定义工具介绍
虽然内置工具为多数通用任务提供了坚实的基础,但 Strands 真正的强大之处在于您可以根据具体需求 创建、改进和扩展自定义工具,从而增强Agent
的适应性和执行能力。
自定义工具使您能够:
- 将
Agent
连接到您自己的API
和内部服务 - 创建面向特定领域的专属功能模块
- 构建用于复杂数据处理的专用工具
- 实现与数据库或其他外部系统的集成
- 编写符合业务需求的自定义逻辑
在本章中,我们将使用课程指定的 Amazon Nova Lite
模型(us.amazon.nova-lite-v1:0
),逐步演示如何构建并注册您自己的工具,进一步提升Agent
的智能与灵活性。
- 点击左侧栏中的
03_customized_tools
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。
- 接下来,您需要点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。
- 创建第一个自定义工具:在 Strands Agent 中,创建自定义工具的最简单方式是使用
Python
函数配合@tool
装饰器。这种方式可以快速将任何函数封装为Agent
可调用的工具。
执行结果参考如下:
- 要有效设计和使用自定义工具,我们需要理解其在
Strands Agent
中的核心组成部分。以下是构建一个实用工具时应考虑的关键要素:- 什么时候使用它
- 它期望什么样的输入
- 它产生什么输出?
执行结果参考如下:
Strands
支持多种输入与输出类型,使工具具备更强的表达能力和灵活性。在构建自定义工具时,合理设计其参数和返回值结构至关重要。
- 在构建高级工具时,我们经常需要处理更复杂的数据结构,如列表、嵌套字典、
JSON
对象等。Strands
支持使用这些复杂类型作为工具的输入和输出,使Agent
能够执行更丰富的数据处理任务。
执行以下代码提示开始创建 Agent
并测试使用:
- 在使用 Strands 构建生产级
Agent
系统时,健壮的错误处理机制至关重要。工具在运行过程中可能会遇到无效输入、系统异常,或与外部服务交互时发生故障。 设计良好的错误处理逻辑不仅可以防止程序崩溃,还能帮助Agent
在出现问题时优雅地应对并向用户提供清晰反馈,显著提升系统的稳定性与用户体验。
@tool
def robust_text_analyzer(text: str, analysis_type: str) -> Dict[str, Any]:
"""
Analyze text using different analysis methods with robust error handling.
Args:
text (str): The text to analyze
analysis_type (str): The type of analysis to perform. Valid options are:
'word_count', 'char_count', 'sentence_count', 'readability'
Returns:
dict: Results of the analysis, or an error message if something went wrong
"""
try:
# Input validation
if not isinstance(text, str):
return {"error": "Input text must be a string"}
if not text.strip():
return {"error": "Input text is empty"}
analysis_type = analysis_type.lower() # Normalize input
valid_types = {'word_count', 'char_count', 'sentence_count', 'readability'}
if analysis_type not in valid_types:
return {
"error": f"Invalid analysis type: '{analysis_type}'.",
"valid_options": list(valid_types)
}
# Perform the requested analysis
if analysis_type == 'word_count':
words = text.split()
return {
"total_words": len(words),
"unique_words": len(set(words))
}
elif analysis_type == 'char_count':
return {
"total_chars": len(text),
"letters": sum(c.isalpha() for c in text),
"digits": sum(c.isdigit() for c in text),
"spaces": sum(c.isspace() for c in text)
}
elif analysis_type == 'sentence_count':
import re
sentences = re.split(r'[.!?](?:\s|$)', text)
sentences = [s for s in sentences if s.strip()]
return {
"sentence_count": len(sentences),
"avg_sentence_length": len(text) / max(len(sentences), 1)
}
elif analysis_type == 'readability':
words = text.split()
if not words:
return {"error": "Cannot calculate readability for empty text"}
avg_word_length = sum(len(word) for word in words) / len(words)
if avg_word_length < 4:
difficulty = "Easy"
elif avg_word_length < 6:
difficulty = "Medium"
else:
difficulty = "Complex"
return {
"avg_word_length": avg_word_length,
"difficulty_estimate": difficulty
}
except Exception as e:
# Catch and report any unexpected errors
return {"error": f"Analysis failed with error: {str(e)}"}
# Create an agent with our robust tool
robust_agent = Agent(
model="us.amazon.nova-lite-v1:0",
tools=[robust_text_analyzer],
system_prompt="You are an assistant that can analyze text with high reliability."
)
复制
- 在实际应用中,自定义工具通常需要借助外部库或第三方依赖来实现更复杂或专业的功能。
Strands
支持在工具中导入并使用这些外部模块,从而显著扩展Agent
的能力。下面是一个使用 NLTK(Natural Language Toolkit) 进行简单文本分词的示例:
# This is an example - you'd need to install NLTK first with:
# !pip install nltk
@tool
def nlp_tool(text: str, operation: str) -> Dict[str, Any]:
"""
Process text using NLP techniques.
Args:
text: The text to process
operation: The NLP operation to perform ('tokenize', 'pos_tag', 'entities')
Returns:
Dict containing the results of the NLP processing
"""
try:
import nltk
# You would need to download nltk data packages first:
# nltk.download('punkt')
# nltk.download('averaged_perceptron_tagger')
if operation == 'tokenize':
return {
"tokens": nltk.word_tokenize(text),
"sentences": nltk.sent_tokenize(text)
}
elif operation == 'pos_tag':
tokens = nltk.word_tokenize(text)
return {"tagged": nltk.pos_tag(tokens)}
else:
return {"error": f"Unknown operation: {operation}"}
except Exception as e:
return {"error": str(e)}
# Note: This is just an example and would require NLTK to be installed
复制
- 定制工具的最佳实践
在为 Strands agent
创建自定义工具时,请牢记以下最佳实践:
- 编写清晰的文档字符串:文档字符串是模型理解工具的目的和参数的方式。要详细而明确。
- 使用类型注解:类型提示帮助模型理解工具期望和返回的数据类型。
- 优雅地处理错误:返回信息性错误消息,而不是允许异常传播。
- 保持工具的重点:每个工具应该做好一件事,而不是试图处理多个不相关的任务。
- 提供输入验证:尽早验证输入以防止处理无效数据。
- 使用描述性名称:选择函数和参数名称时,要清楚地表达它们的目的。
- 返回结构化数据:如果可能,返回模型易于处理的结构化数据(字典、列表)。
- 考虑性能:优化可能经常被调用或处理大量数据的工具。
- 彻底测试:使用各种输入(包括边缘情况)测试您的工具,以确保它们的行为符合预期。
- 版本依赖:如果您的工具依赖于外部库,请指定版本需求。
五、Strands Agent 集成与落地
5.1、MCP 与 Strands Agent 协同集成
什么是模型上下文协议?
模型上下文协议(Model Context Protocol,MCP
)是一种用于 AI
模型与外部工具和资源进行交互的标准化协议。它建立了一个统一的接口规范,使 AI
系统能够无缝地访问各种功能和服务,实现不同平台和工具之间的高效协作。
MCP的核心特性
- 标准化通信机制:
MCP
为AI
模型和外部工具建立了统一的通信语言和规范,消除了不同系统间的接口差异,确保交互过程的一致性和可靠性。 - 动态工具发现:
MCP
服务器能够向客户端公开多种工具和功能,客户端可以自动发现并识别可用的工具资源,实现动态的能力扩展。 - 多样化资源访问:除了传统的工具调用(函数执行),
MCP
还支持访问各种类型的资源,包括文件系统、数据库、外部API
接口等,为AI
系统提供更丰富的数据源。 - 传输层无关性:
MCP
协议设计具有良好的传输层抽象,支持多种通信机制,如HTTP
流式传输、WebSocket
连接等,适应不同的技术栈和部署环境。 - 跨平台互操作性:基于
MCP
开发的工具具有出色的跨平台兼容性,一个平台上开发的工具可以被其他平台的AI Agent
无缝使用,真正实现了"一次开发,处处运行"的理念。
- 点击左侧栏中的
04_model_context_protocol
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。
- 接下来,您需要点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。
Strands Agent
可以通过内置模块提供的类来连接MCP
服务器,实现与外部工具和资源的交互。最常用的连接方式是采用标准输入输出(stdio)作为传输机制。您可以使用MCPClient
类(位于strands.tools.mcp
模块中)来建立与MCP
服务器的通信。
执行结果参考如下:
- 接着继续执行代码,调用另外一个
tool
:
执行结果参考如下:
- 连接到
MCP
服务器并获取可用工具后,我们就可以基于这些工具创建一个Agent
,使其能够调用MCP
提供的功能,完成更复杂的任务。
执行结果参考如下:
Strands Agent
的强大之处在于它能够灵活地组合多种类型的工具,包括:- MCP 工具:通过
MCP
服务器提供的外部工具和资源 - 内置工具:
Strands
自带的常用工具,如计算器、文件读写等 - 自定义工具:根据特定需求编写的专属功能模块
这种组合方式让
Agent
可以充分利用各类工具的优势,应对更加复杂和多样化的任务场景。- MCP 工具:通过
- 除了连接现有的
MCP
服务器外,您还可以搭建属于自己的 MCP 服务器,用于公开自定义功能和工具,方便不同Agent
或客户端调用。例如这里创建一个demo-weather mcp
服务。
执行结果参考如下:
5.2、Strands Agent 生产环境部署指南
部署概述
在完成 Strands Agent
的本地开发后,下一个关键步骤是将其部署到生产环境中。本指南将详细介绍如何使用 Amazon Lambda
这一优秀的无服务器平台来部署和运行 AI Agent
。
本章将涵盖以下核心内容:
Amazon Lambda
在Strands Agent
部署中的优势分析Agent
部署前的准备工作和配置API Gateway
的配置与Web
访问设置- 生产环境中的监控策略和扩展考虑
注意:本指南中的所有示例都基于课程指定的 Amazon Nova Lite
模型 us.amazon.nova-lite-v1:0
。
为什么选择 Amazon Lambda?
Amazon Lambda
为 Strands Agent
的部署提供了显著的技术和经济优势:
- 无服务器架构:完全托管的计算服务,无需关注底层服务器的配置、维护和管理,让开发者专注于业务逻辑的实现。
- 成本效益的定价模式:采用按需计费机制,仅对实际的计算时间和资源使用付费,避免了传统服务器的闲置成本。
- 弹性自动扩展:根据实际负载自动调整计算资源,无需手动干预即可应对流量峰值和低谷,确保服务的稳定性和性能。
- 深度
Amazon
生态集成:与Amazon
云服务生态系统无缝集成,包括数据库、存储、监控等服务,简化了复杂应用的构建和部署。 - 原生
Python
支持:提供对Python
运行时的完整支持,包括丰富的库生态系统和优化的执行环境,特别适合基于Python
的AI
应用。
通过合理利用 Lambda
的这些优势,您可以构建一个既经济高效又高度可扩展的 AI Agent
部署方案。
- 点击左侧栏中的
05_lambda_deployment
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。
- 接下来,您需要点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。
- 安装完成依赖后,我们将创建一个简单的天气查询
Agent
(weather agent
),并为后续在Amazon Lambda
等无服务器环境中的部署做好准备。
执行结果参考如下:
- 接下来,让我们通过编写
Lambda
处理程序函数,来构建完整的Lambda
部署代码,实现Agent
在无服务器环境中的运行。
- 本实验环境中所提供的账号已预先配置了所需的
IAM
角色,您可以直接跳过本步骤。如果您需要自行创建IAM
角色以供 Lambda 使用Amazon Bedrock
模型,以下是参考步骤和示例IAM
策略:
- 在部署到
Amazon Lambda
之前,您需要将代码及其依赖项打包成一个ZIP
文件。首先您需要下载对应依赖,然后运行示例脚本,帮助您自动完成部署包的创建:
执行完成后将创建部署包:deploy.zip
- 您可以使用
Amazon CLI
快速将函数及其部署包上传并部署到 Lambda。继续执行代码:
执行下一步
!sh deploy.sh
复制
- 部署后,您可以通过发送请求来测试您的
Agent
:
import boto3
import json
def invoke_weather_agent(location_query):
"""
Invokes the strands_agents_lambda with a weather query
Args:
location_query (str): The weather query (e.g. "What's the weather in Tokyo?")
Returns:
dict: The response from the Lambda function
"""
# Create Lambda client
lambda_client = boto3.client('lambda', region_name='us-east-1')
try:
# Invoke the Lambda function
response = lambda_client.invoke(
FunctionName='strands_agents_lambda',
InvocationType='RequestResponse', # Synchronous call
Payload=json.dumps({
'body': json.dumps({
'message': location_query
})
})
)
# Parse the response
payload = json.loads(response['Payload'].read().decode('utf-8'))
return {
'status_code': response['StatusCode'],
'response': json.loads(payload.get('body', '{}'))
}
except Exception as e:
print(f"Error invoking Lambda: {str(e)}")
return {
'status_code': 500,
'error': str(e)
}
# Example usage
if __name__ == "__main__":
result = invoke_weather_agent("What's the weather like in Tokyo?")
print("Lambda Response:\n\n", result['response']['message']['content'][0]['text'])
复制
高级部署选项
对于生产部署,请考虑以下高级选项:
API
网关 设置API Gateway
以通过HTTP
公开您的Agent
。Amazon CDK Amazon Cloud Development Kit (CDK)
允许您使用Python
代码定义基础设施。- 无服务器框架
Serverless Framework
简化了Lambda
函数和相关资源的部署: Lambda
层 对于大型依赖项,您可以使用Lambda
层将依赖项与函数代码分开。
六、多 Agent 系统构建与管
6.1、构建多 Agent 系统
注意: 本小节内容仅供学习参考,实验账号暂时无法进行本小节实验。
多智能体系统导论
在最后一章中,我们将探讨如何通过组合多个专门的Agent
来构建复杂的人工智能系统。多Agent
系统可以通过协作、专门化和协调工作流来处理复杂的任务。
我们将讨论:
- 多
Agent
体系结构的好处 - 使用
Strands
内置功能的Agent
协作模式 - 构建实用的多智能体系统
- 与前几章一样,我们将对所有
Agent
使用Amazon Nova Lite
模型(us.amazon.nova-lite-v1:0
)。
为什么要使用多个Agent
?
设计多智能体系统有几个令人信服的理由:
- 专业化:每个
Agent
都可以使用目标工具和提示来擅长特定的任务 - 模块化:更容易开发、测试和维护独立的组件
- 可伸缩性:独立
Agent
可以并行工作 - 关注点分离:每个
Agent
可以处理复杂问题的不同方面 - 弹性:如果一个
Agent
失败,其他Agent
可以继续运行
- 点击左侧栏中的
06_building_multi_agent_systems
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。
- 接下来,您需要点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。
Strands Agent
提供了多种强大机制,支持多个Agent
之间的协作与协同工作。以Agent
为工具的管理者-工人模式,即“Agent
即工具”的方法让我们能够构建管理者-工人的层次结构: 管理者Agent
(Manager
)可以将其他Agent
(Workers
)作为工具调用,从而实现任务分配、协作处理和结果整合。这种模式适合复杂任务的拆分和分工,提升系统的灵活性和扩展性。
执行结果参考如下,将生成一段根据当前场景提示的依据所产出的理解:
- 除了传统的“管理者-工人”模式,Strands Agent 还支持通过
Swarm
实现点对点协作(Peer-to-Peer Collaboration)。该机制允许多个Agent
在一个“集群”或“网络”中平等通信、共享信息、协同解决问题,而无需中央协调者。
- 在复杂任务或多阶段工作流中,单一
Agent
或点对点协作(Swarm
)可能无法满足对结构化协作和信息流的需求。 此时,Strands 提供的Agent Graph
工具,可以帮助我们构建一个结构化的智能体网络,每个Agent
节点扮演特定角色,彼此之间通过定义好的路径进行通信和信息传递。
执行结果参考:生成一份关于人工智能对医疗保健诊断影响的全面研究报告。
- 在某些应用中,我们希望构建一个有序、线性的数据处理流程,即“一个
Agent
的输出直接作为下一个Agent
的输入”。这正是 Strands Agent 提供的Workflow
工具所擅长的:通过Agent
的串联实现顺序处理(Pipeline)。
多Agent
系统的最佳实践
使用 Strands Agent
设计多Agent
系统时,请考虑以下最佳实践:
- 选择正确的协作模式:
- 用于经理-工作人员层次结构
agent_as_tool
- 用于对等协作
swarm
- 用于具有多种交互类型的复杂网络
agent_graph
- 用于顺序线性过程
workflow
- 用于经理-工作人员层次结构
- 明确的职责边界:为每个
Agent
定义明确的角色和职责 - 适当的工具:为
Agent
配备与其专业任务相关的工具 - 错误处理:实施强大的错误处理来管理
Agent
故障 - 迭代规划:设计协作模式以支持迭代改进
- 受控信息流:管理
Agent
之间信息流动的方式 - 输出标准化:定义
Agent
间通信的标准格式
6.2、Strands Agent 监控与可观测性
智能体可观察性简介
当您将 Strands Agent
部署到生产环境中时,了解它们的执行方式、调试问题和确保可靠运行变得至关重要。本章重点介绍 Strands Agent
的监控和可观察性技术,帮助您构建可在生产中有效维护的可靠 AI 系统。
我们将讨论:
- 记录整个生命周期操作
- 监视性能和延迟
- 跟踪
Agent
操作 - 与前几章一样,我们将使用为课程指定的
Amazon Nova Lite
模型(us.amazon.nova-lite-v1:0
)。
- 点击左侧栏中的
07_monitoring_and_observability
双击鼠标右键以打开Notebook
,然后在Select Kernel
中选择conda_python3
。
- 接下来,您需要点击“运行程序”按钮,具体如图中红色箭头所示,以安装框架及其相关依赖项。
Strands Agent
为记录Agent
操作提供了内置功能。让我们从一些基本的日志方法开始:
执行结果参考如下:
- 继续执行后续代码,将输出以下结果:
Strands Agent SDK
提供了两种“进程呈现”机制:- 标准日志:用于内部操作、调试和错误(主要针对开发人员)
- 回调系统:用于面向用户的输出、流响应和工具执行通知
在创建智能体对象时,通过
callback_handler
参数配置回调。你可以使用内置处理程序(默认为PrintingCallbackHandler
),或者根据应用程序的特定需求创建自定义回调处理程序来处理流事件。
- 默认情况下,
Strands Agent
为您提供完整的指标来跟踪和分析您的Agent
的表现。这些指标是自动收集的,可以在Agent
执行后访问。这些数据可以帮助您优化Agent
的性能、监控资源使用并控制运营成本,而无需任何额外配置。您可以通过编程方式访问这些指标,以便与监视系统集成,或者为应用程序生成性能报告。
- 在生产环境中,监控令牌使用和成本对控制预算和评估系统效率至关重要。Strands 提供了灵活的方式用于跟踪每个
Agent
调用中所消耗的资源。
七、 资源清理
在完成实验后,删除对应的资源。登录到控制台,然后选择 CloudFormation
服务,选择对应的 Stack
,点击右上角删除。
八、小结
Strands Agent
作为亚马逊的开源 AI Agent
工具包,通过模型驱动架构显著简化了Agent
开发流程。开发者只需关注模型选择、工具提供和任务描述三个要素,就能让大语言模型自主规划和决策,无需编写复杂工作流程。这种方法不仅降低了开发门槛,还将开发周期从数月缩短至数天,为构建智能应用提供了高效直观的新范式。
现在,是时候将所学付诸实践了。轻轻一点“立即注册”,即可免费注册亚马逊云科技海外区域云服务账号, 立即免费踏入属于您的云端构建世界。作为新注册的您,更能体验到长达12个月的免费使用权,涵盖云计算、云数据库、云存储与前沿的生成式 AI 服务等 100 余种云产品与服务。更值一提的是,您还将全面享受亚马逊云科技的海外区域节点,为您的实战构建之旅铺设坚实的基石。不再等待,立即开启您的云上探索之旅吧!
同时,在云上探索实验室中,我们还有更多丰富多彩的实验内容,让您的学习之旅永不止步。期待您的热情参与,共同体验这场技术的盛宴,一起成长,一起探索更广阔的科技天地。