Strands Agents 是 AWS 生态下的模型驱动工具使用 Agent:把「调用什么工具、传什么参数」的决策权交给大模型,由模型在每轮推理中输出结构化函数调用(function call),运行时负责执行工具并把结果回填给模型继续推理。它解决的核心问题是传统硬编码工作流无法覆盖开放式任务——用户请求无法预枚举,工具组合需要模型在运行时动态决定。核心特征:工具注册一次(Action Group + API Schema)即可被模型调用;会话状态由 Agent Runtime 托管;与 Lambda、Bedrock Knowledge Base 等 AWS 服务原生集成。本文按「速览 → 安装 → 上手 → 能力 → 生产」的顺序组织,给出可直接执行的命令与代码,读者按步骤操作即可跑通第一个工具调用 Agent。

岗位关联

掌握模型驱动工具使用 Agent 的设计与部署,意味着你能在 AWS 生产环境中落地可扩展的工具编排能力,这是当前 AI 工程岗位的核心加分项。

目录
  1. 为什么需要 Strands Agents:硬编码调度 → 模型自主决策
  2. 安装与环境配置:3 步就绪(CLI、凭证、SDK)
  3. 快速上手:30 分钟跑通第一个工具调用 Agent
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. AI 应用场景
  7. 常见误区
  8. 面试题
  9. 参考来源
工具类型
模型驱动 Agent 框架(AWS 托管服务 + 开源示例)
开发商
Amazon Web Services(AWS)
开源协议
服务托管(官方示例代码 Apache 2.0)
GitHub Stars
无
主要语言
Python(boto3、AWS CLI)
当前版本
持续演进中(依赖 Amazon Bedrock Agent Runtime)
安装方式
pip install boto3、AWS CLI v2
上手难度
★★★☆☆(中等)
适合人群
AI/LLM 工程师、RAG 与 Agent 团队、AWS 应用开发者
同类工具
LangChain Agent · Anthropic Tool Use · AutoGen
托管服务

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 Strands Agents:硬编码调度 → 模型自主决策

传统上,把订单、库存、物流等多个外部系统接入聊天机器人,靠 if-else 或状态机硬编码「用户说 A 就调 A 接口」。问题有两个:分支组合爆炸——「查订单 + 查物流」这种组合请求需要额外代码路径,意图一变规则就失效;维护成本高,且永远无法覆盖未预枚举的开放式请求。每接入一个新接口,都要改一遍流程代码并重新发布。

Strands Agents 把编排从代码搬到模型推理:每个外部能力注册为工具(Action Group),模型根据用户输入与工具描述(Schema)自主输出「调用哪个函数、传什么参数」;运行时执行工具后把结果回填给模型,模型再决定下一步或给出最终回答。新增一个工具不需要改流程代码,只需注册 Schema 并准备 Agent 版本。用户的开放式提问(「库存不足的话帮我推荐同价位商品」)由模型在推理中拆解为连续多次工具调用。

与 LangChain 的显式图编排、AutoGen 的多 Agent 协商不同,Strands Agents 的差异点在于「模型驱动 + AWS 原生」:工具即 Lambda 函数,会话与别名由 Bedrock Agent Runtime 管理,权限边界用 IAM 控制,适合已有 AWS 存量的企业直接落地生产。

安装与环境配置:3 步就绪(CLI、凭证、SDK)

步骤一:安装 AWS CLI v2。 Strands Agents 的所有管理操作(创建 Agent、查看列表)都通过 AWS CLI 或控制台完成,本地至少需要 CLI 客户端。Linux/macOS 使用官方安装脚本,Windows 使用 MSI 安装包;安装后执行 aws --version 确认版本不低于 2.x。

步骤二:配置 IAM 凭证。 运行 aws configure 依次输入 Access Key ID、Secret Access Key、默认区域(如 us-east-1,Bedrock 在该区域可用)与输出格式。生产环境建议改用 IAM Identity Center 短时凭证,避免把长期密钥写入环境变量。

步骤三:安装 Python SDK 并验证服务可达。 pip install boto3 后,用 aws bedrock-agent list-agents 验证凭证有效、Agent 服务可访问。若返回 AccessDeniedException,检查 IAM 角色是否附加 AmazonBedrockFullAccess 策略。

bash14 行
# 安装 AWS CLI v2(Linux / macOS)curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"unzip awscliv2.zipsudo ./aws/installaws --version # 配置凭证(交互输入 Access Key / Secret / 区域 / 输出格式)aws configure # 安装 Python SDKpip install boto3 --upgrade # 验证:列出已有 Agent,确认服务与凭证可用aws bedrock-agent list-agents --region us-east-1

快速上手:30 分钟跑通第一个工具调用 Agent

最小可用流程 = 一个 Lambda 工具函数 + 一个 Agent + 一次 invoke_agent 调用。工具函数返回库存 JSON;Agent 通过 Action Group 感知该工具;用户提问触发模型输出函数调用,运行时执行并把结果拼进回复。全程在控制台点选 + 一段 Python 客户端代码即可。

1. 创建 Lambda 工具函数:AWS 控制台 → Lambda → 创建函数 → 运行时选 Python 3.12 → 粘贴下方 handler 代码 → Deploy。函数按 product_id 返回值,响应体使用 Bedrock Agent 规定的 messageVersion 1.0 结构。

2. 创建 Agent:Amazon Bedrock 控制台 → Agents → Create Agent → 名称填 inventory-agent → 模型选 Claude 3.5 Sonnet(或控制台可用的最新 Claude 系列)→ IAM 权限选「创建新角色」→ 创建。

3. 添加 Action Group:Agent 详情页 → Action groups → 添加 → 类型选「Define with API schemas」→ Lambda 函数选刚创建的函数 → Schema 选内联 JSON 并粘贴下方 OpenAPI schema → 保存。

4. 准备并测试:点击 Prepare 生成 Agent 版本,记下 Agent ID;测试环境别名直接填 TSTALIASID;运行下方客户端代码发起第一次调用。

结果说明:控制台输出应包含库存 JSON(42 件 / 199 元)。进阶技巧:在 schema 的 description 里写清「何时该调用此函数 + 参数示例」,能显著提升模型选对工具的比例;将测试用的 TSTALIASID 换成正式 Alias 即可做灰度发布。

python12 行
# 工具函数(Lambda · Python 3.12)import json def lambda_handler(event, context):    params = {p["name"]: p["value"] for p in event.get("parameters", [])}    inventory = {"SKU-001": {"stock": 42, "price": 199.0},                 "SKU-002": {"stock": 0, "price": 89.0}}    data = inventory.get(params.get("product_id", "SKU-001"), {"stock": -1, "price": 0})    return {"messageVersion": "1.0", "response": {        "actionGroup": event.get("actionGroup"),        "function": event.get("function"),        "functionResponse": {"responseBody": {"TEXT": {"body": json.dumps(data)}}}}}
json8 行
{  "openapi": "3.0.0",  "info": {"title": "Inventory API", "version": "1.0.0"},  "paths": {"/inventory": {"get": {"parameters": [    {"name": "product_id", "in": "query", "required": true,     "schema": {"type": "string", "description": "商品 SKU 编号"}}  ], "responses": {"200": {"description": "ok"}}}}}}
python13 行
# 客户端:调用 Agent(需替换 AGENT_ID)import boto3 client = boto3.client("bedrock-agent-runtime", region_name="us-east-1")resp = client.invoke_agent(    agentId="AGENT_ID",    agentAliasId="TSTALIASID",    sessionId="session-001",    inputText="查询 SKU-001 的库存和价格",)for event in resp["completion"]:    if "chunk" in event:        print(event["chunk"]["bytes"].decode())

核心能力详解:4 大支柱

支柱一:模型驱动的工具决策。 模型在每轮推理中输出结构化 function call;Agent Runtime 解析后调用注册的 Lambda 函数并回填结果。模型选择工具的依据是函数名、描述与参数 schema 的语义匹配,因此工具的可发现性完全取决于注册信息质量,注册表就是 Agent 的能力边界。

支柱二:多轮会话与状态管理。 客户端以 sessionId 关联会话,Runtime 持久化对话历史,模型能引用前文工具结果决定下一步。「先查库存、再算总价、最后下预订单」这类递进任务靠的就是会话上下文跨轮累积,而不是每轮独立推理。

支柱三:安全护栏(Guardrails)。 Bedrock Guardrails 提供输入输出过滤:敏感词拦截、PII 识别、拒绝主题。Agent 在工具调用前后都会经过护栏过滤,可拦截模型试图调用越权工具或输出敏感内容的场景,是生产上线前的强制层。

支柱四:AWS 原生集成。 Action Group 直接绑定 Lambda 作为工具;知识检索接 Bedrock Knowledge Base(数据源支持 S3);权限走 IAM Service Role;模型推理走 Bedrock 的 Foundation Models。统一在 AWS 内完成计费、审计与监控,不需要额外组装第三方组件。

生产部署与监控:从上线到运维

部署方式一:工具函数生产化。 Lambda 工具要设计为无状态、幂等,同一请求重复执行结果一致;在 Schema 描述中写明超时语义与重试策略。高频路径开启 Provisioned Concurrency 消除冷启动,并把函数超时从 3 秒调整为与业务耗时匹配的值,避免慢查询工具频繁失败。

部署方式二:接入层封装。 客户端不要直连 Bedrock(避免密钥下放),而是用 API Gateway + 代理 Lambda 封装 invoke_agent,统一做身份认证、限流与请求日志;Agent 版本通过 Alias 管理,用「准备新版本 → 切 Alias → 观察指标 → 回滚」的流程完成灰度发布。

可观测性。 CloudWatch 记录每次 invoke_agent 的 token 消耗与延迟;按 sessionId 维度统计单会话成本与工具调用次数;对工具失败率、Guardrail 命中次数设置 SNS 告警。定期抽查日志中「模型选错工具」的轮次,把高频错误反哺回 schema 描述迭代,形成质量闭环。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>给 Agent 角色挂 AdministratorAccess,模型一旦被引导就可能调用高危工具;应按每个工具拆分 Lambda 独立执行角色,只授予所需的最小权限。</li><li>函数名与描述含糊会导致模型选错工具:相似工具没有「适用场景」说明时,选择准确率明显下降;上线前用典型问句做命中率回归。</li><li>Lambda 默认超时与裸异常:慢查询工具容易超时,抛出的裸异常模型无法理解失败原因;把超时调大,并将错误结构化为 JSON 回传。</li><li>直接编辑线上 Agent 不做版本管理:最新版无法回滚;正式环境应 Prepare 生成版本,用 Alias 指向稳定版本做灰度。</li></ul>

维度Strands AgentsLangChain AgentAnthropic Tool UseAutoGen
定位AWS 模型驱动工具 Agent通用 LLM 编排框架Claude 原生函数调用能力多 Agent 对话协作框架
编排范式模型逐轮输出 tool call,Runtime 执行回填ReAct / LangGraph 显式图编排单次请求内模型返回多个工具调用Agent 间消息协商与任务分发
类型约束OpenAPI/JSON Schema 强约束Pydantic 模型 + 自定义 Tool 类JSON Schema 参数定义消息协议 + 自定义函数
学习曲线中等(需熟悉 IAM/Lambda/Bedrock)平缓(Python 生态资料多)低(改参数即可用)偏高(多 Agent 概念较多)
生态集成AWS 原生(Lambda/S3/知识库)500+ 第三方集成Claude 生态 + 云厂商 SDKPython + 微软生态
生产部署Bedrock 托管,基础设施免运维自托管或 LangSmith 等平台模型 API 直连,最轻量自托管为主
License托管服务(示例代码 Apache 2.0)MIT模型 API 服务Apache 2.0 / MIT(多组件)
适合谁AWS 存量企业、生产级 Agent快速原型与多框架集成只需单模型 tool calling研究型多角色协作

选型建议:已有 AWS 资产、需要 IAM 审计与托管运维的团队选 Strands Agents;做快速原型、需要大量社区集成选 LangChain;只需最直接的单模型工具调用选 Anthropic Tool Use;做多角色模拟与复杂协作研究再考虑 AutoGen。

AI 应用场景

智能客服工具组合编排

阶段:Agent 编排(模型驱动工具调用)

解决的问题:客服机器人要打通订单、物流、售后三个系统,传统硬编码只能处理预设意图,组合查询(「订单到哪了 + 怎么退货」)需要新增代码分支。模型驱动后,每个系统 API 注册为 Lambda 工具,由模型按用户表述自主组合调用。

具体案例:某电商客服将 12 个 API 封装为工具并注册 schema,用户一次提问可自动触发 2-3 次工具调用;从硬编码方案迁移后,单会话平均处理时长下降约 40%,Guardrail 命中次数纳入运营周报,越界请求被统一拦截审计。

企业数据查询 Agent(自然语言 → 工具化查询)

阶段:RAG 与工具调用结合

解决的问题:业务人员不会写 SQL,数据团队被临时取数需求淹没。将「查询销量、库存、增长率」封装为带参数的 Lambda 工具,参数白名单化,由模型把自然语言映射为结构化参数后调用。

具体案例:把 5 张常用报表封装为工具,参数限定为枚举值(时间范围、地区、品类);通过迭代 schema 描述,典型报表查询的参数误配率降至 10% 以内(其余由护栏拦截);单次取数从平均 2 小时缩短到分钟级。

运维 runbook 自动化

阶段:Agent 编排(决策 + 工具执行)

解决的问题:故障排查需要按 runbook 依次执行「查指标 → 查日志 → 重启实例」,每一步都依赖人工操作。模型驱动 Agent 把每个操作封装为参数化工具,按故障描述自主编排执行顺序。

具体案例:常见故障(CPU 高、磁盘满)映射为诊断工具组合;Agent 自动执行诊断脚本并汇总结论,平均排查时长从 30 分钟降至约 5 分钟;高危操作(重启、删资源)由 Guardrail + IAM 权限双重拦截,必须人工确认后才放行。

常见误区

误区刚接触时以为只要模型够聪明,它就能自己「看见」并调用 AWS 上所有服务,不需要任何注册。

正解模型只能调用显式注册进 Action Group 的工具,且执行权由 IAM 角色决定。工具必须是「已注册的 Lambda 函数 + API Schema」,权限边界由 IAM 最小权限控制。模型不知道、也不能调用未注册的服务。

为何常见:Agent 的宣传语强调「模型自主决策」,容易让人忽略「决策范围由注册表决定」这个前提。

误区把函数名和参数列出来就够了,描述写不写无所谓。

正解模型选择工具的准确率主要由工具描述决定。名称、参数说明、常见示例、适用边界都属于「工具的可发现性」;描述模糊会导致模型在相似工具间选错或凭空编造参数值。

为何常见:以为 schema 只是给「机器」看的类型声明,忽略了它同时是给「大模型」看的语义说明。

误区每次调用都重新传一遍问题,不传 sessionId 也能正常多轮对话。

正解Agent Runtime 以 sessionId 关联会话上下文;不传或每次更换 sessionId,模型就丢失历史,后续轮次无法引用前文工具结果。生产环境应透传固定 sessionId(通常为用户 ID + 会话标识的组合)。

为何常见:单次 invoke_agent 能直接返回结果,容易忽略上下文是「服务端按 session 持久化」的。

误区既然运行时是 AWS 托管,日志和指标就不用自己管了。

正解托管只保证服务可用,不保证成本与质量。token 消耗、单会话成本、工具失败率、护栏命中次数都依赖 CloudWatch 自行采集与告警;schema 迭代效果也要靠日志评估。

为何常见:把「免运维」误读成「免监控」,混淆了基础设施运维与业务可观测性。

误区工具一旦抛异常,整个 Agent 会话就终止了。

正解工具返回的响应(包括错误信息)会被回填给模型,模型可基于错误内容决定重试、换工具或向用户说明。设计工具时要把错误信息结构化返回,而不是抛未捕获异常;超时类错误要在描述中说明重试策略。

为何常见:把工具调用类比成程序内函数调用,忽略了「返回结果交给模型继续推理」这一层。

面试题

Q1. Strands Agents 的「模型驱动工具使用」核心机制是什么?

单选题 · easy

  • A.在代码中硬编码工具调用的顺序
  • B.让大模型推理时自主决定调用哪个工具← 正确答案
  • C.用正则表达式匹配用户输入触发工具
  • D.由人工在控制台手动选择工具执行

答案:B。模型驱动指决策权在模型:模型基于工具 schema 与用户输入,在推理中输出结构化 function call,运行时执行后回填。A 是硬编码工作流,C 是规则引擎,D 是人工编排,均不属于模型驱动。

Q2. 模型决策出的函数调用由谁实际执行?

单选题 · mid

  • A.模型在自身内部完成函数执行
  • B.运行时调用已注册的函数执行← 正确答案
  • C.存储服务的事件自动触发执行
  • D.初始化工具在部署时执行函数

答案:B。模型只输出函数名与参数,不执行代码。这里的「运行时」指 Bedrock Agent Runtime,执行体是注册在 Action Group 中的 Lambda 函数,执行结果回填给模型继续推理。A 违背 LLM 执行边界,C/D 是其他 AWS 机制,与 Agent 无关。

Q3. 工具要被 Agent 调用,必须先完成哪类配置?

单选题 · mid

  • A.将函数代码上传至 S3 并开启静态托管
  • B.创建动作组并关联函数与参数描述← 正确答案
  • C.在代码托管仓库中建立工具工程
  • D.在监控服务中为函数设置告警规则

答案:B。Action Group 是 Agent 与工具的桥:声明工具有哪些、参数 schema 是什么、由哪个 Lambda 执行。未注册进动作组的函数对模型不可见,与静态托管、代码仓库、告警规则无关。动作组的正式名称即 Action Group。

Q4. invoke_agent 发起 Agent 会话,属于 Bedrock 的哪个部分?

单选题 · easy

  • A.模型的文本生成推理接口
  • B.智能体运行时服务的调用接口← 正确答案
  • C.管理面创建智能体的配置接口
  • D.知识库文档检索的查询接口

答案:B。invoke_agent 是 bedrock-agent-runtime(Agent 运行时)的接口,负责携带 agentId、sessionId 与 inputText 发起会话并流式返回结果;A 对应模型推理,C 对应管理面(bedrock-agent),D 对应知识库检索。

Q5. 下列哪些字段会显著影响模型选择工具的准确率?

多选题 · mid

  • A.函数的命名是否语义清晰← 正确答案
  • B.参数描述是否包含示例与边界← 正确答案
  • C.函数部署的 AWS 区域所在位置
  • D.参数类型是否使用枚举白名单← 正确答案

答案:ABD。函数名、参数描述、参数类型(尤其枚举与格式约束)直接参与模型对工具的语义匹配。AWS 区域对模型决策不可见、不影响选择正确性,注册后路由由运行时负责,属于部署细节而非 Schema 要素。

Q6. invoke_agent 中 sessionId 的核心作用是什么?

单选题 · mid

  • A.用于账单与成本的归因分析
  • B.用于保持多轮会话上下文状态← 正确答案
  • C.用于指定底层模型的具体版本
  • D.用于控制接口调用的并发上限

答案:B。Agent Runtime 以 sessionId 为键持久化会话历史;相同 sessionId 的多次调用共享上下文,模型才能引用前文工具结果。模型版本由 Agent 配置决定,成本归因与限流另有机制。

Q7. 生产环境中监控 Agent 需要关注哪些指标?

多选题 · hard

  • A.每次会话的 token 消耗与成本← 正确答案
  • B.工具调用失败率与重试次数← 正确答案
  • C.护栏对输入输出的触发命中次数← 正确答案
  • D.Lambda 冷启动毫秒级的明细数据

答案:ABC。Agent 成本绝大部分来自 token,会话级成本监控是上线前提;工具失败率反映 Schema 与工具实现质量;护栏命中次数暴露越界请求与内容风险。冷启动属于基础设施级优化指标,不是 Agent 业务监控的必需项。

Q8. 工具函数执行超时,正确的工程应对是什么?

单选题 · hard

  • A.超时后模型会自动无限次重试
  • B.超时会终止会话并丢失全部上下文
  • C.应将超时与重试策略写入工具描述← 正确答案
  • D.超时属正常情况无需任何处理

答案:C。工具超时返回的失败响应会回填给模型,模型依据描述决定重试、换工具或告知用户,因此应在 Schema 描述与工具错误信息中写明超时语义、重试策略与幂等性。A 错在「无限重试」,B 错在「终止会话」,D 错在「不处理」。

Q9. 以下哪个说法不是模型驱动 Agent 相对硬编码工作流的优势?

单选题 · easy

  • A.支持开放式问题组合多个工具
  • B.新工具接入只需注册工具描述
  • C.能保证工具调用百分百准确← 正确答案
  • D.减少大量条件分支与流程维护

答案:C。模型决策本质是概率性输出,受工具描述质量、模型能力与输入歧义影响,存在误调用可能,需通过 Schema 迭代、护栏与监控降低风险。A/B/D 都是硬编码方案难以具备的优势。

Q10. 降低工具误调用的有效实践有哪些?

多选题 · mid

  • A.编写清晰且带示例的工具描述← 正确答案
  • B.将参数约束为枚举值减少幻觉← 正确答案
  • C.只保留一个工具以避免选择错误
  • D.用护栏过滤敏感输入与输出← 正确答案

答案:ABD。描述质量与参数约束直接提升选择准确率;Guardrail 在调用前后拦截越权与敏感内容,是安全兜底。只保留一个工具属于「回避问题」而非降低误调用,会丧失多工具编排能力。

参考来源