)
老板周一拉我进会议室做个能调 API 的 AI Agent查天气、算数据、读文档。两天。 我心想两天 结果用了 Strands Agents SDK。20 行代码Agent 就跑起来了。 这篇把从安装到踩坑到多 Agent 协作的全过程写下来。代码全部能跑Python 3.10。 ## 一、Strands Agents 是啥 说白了它是亮马逊云科技开源的 AI Agent SDK。 核心思路**让模型自己决定该调哪个工具**。你注册工具模型根据问题自己选工具、调工具、拿结果、再推理。这叫 model-driven orchestration——模型驱动编排。 GitHub 仓库[https://github.com/strands-agents/sdk-python](https://github.com/strands-agents/sdk-python) ## 二、环境搭建 ### 2.1 安装 bash # 创建虚拟环境 python -m venv .venv source .venv/bin/activate # 装 SDK 和内置工具包 pip install strands-agents strands-agents-tools 两个包 - strands-agents核心 SDKAgent 循环、工具注册、模型对接 - strands-agents-tools社区贡献的现成工具——计算器、文件读写、Shell、HTTP 请求等 ### 2.2 配置亚马逊云科技凭证 Strands Agents 默认用 Amazon Bedrock 做模型后端。所以你得先配好 AWS 凭证。 bash # 方式一AWS CLI 配置 aws configure # 方式二环境变量 export AWS_ACCESS_KEY_ID你的AK export AWS_SECRET_ACCESS_KEY你的SK export AWS_DEFAULT_REGIONus-west-2 还需要在 Amazon Bedrock 控制台开通模型访问权限。默认用的是 Claude 4 Sonnet区域是 us-west-2。 踩坑提醒我一开始区域填了 ap-northeast-1结果报错 AccessDeniedException。查了半天才发现 Claude 4 Sonnet 在这个区域没开通。换成 us-west-2 就好了。 ## 三、第一个 Agent5 行代码跑起来 python from strands import Agent from strands_tools import calculator agent Agent(tools[calculator]) agent(根号 1764 是多少) 没了。5 行。 运行一下Agent 会 1. 把你的问题发给 Claude 4 Sonnet 2. 模型判断需要用计算器 3. 自动调用 calculator 工具 4. 拿到结果 42 5. 组织语言回复你 这就是 model-driven 的意思——你没写任何如果问题包含数学关键词就调计算器的逻辑。模型自己判断的。 ## 四、写自定义工具tool 装饰器 内置工具不够用。老板要查天气这得自己写。 ### 4.1 基础用法 python from strands import Agent, tool import urllib.request import json tool def get_weather(city: str) - str: 查询指定城市的当前天气信息。 Args: city: 城市名称如 Beijing、Shanghai、Tokyo url fhttps://wttr.in/{city}?formatj1 req urllib.request.Request(url, headers{User-Agent: Mozilla/5.0}) with urllib.request.urlopen(req, timeout10) as resp: data json.loads(resp.read().decode()) current data[current_condition][0] temp current[temp_C] desc current[weatherDesc][0][value] humidity current[humidity] return f{city}: {temp}°C, {desc}, 湿度 {humidity}% agent Agent(tools[get_weather]) agent(北京今天天气怎么样) 关键点 1. **docstring 很重要**——模型靠这个理解工具干嘛的。写清楚功能和参数说明 2. **类型注解必须有**——city: strSDK 靠这个生成工具的 JSON Schema 3. **返回值建议是字符串**——模型好理解 踩坑我一开始 docstring 写的是英文中文提问时模型偶尔不调这个工具。换成中文 docstring 后命中率明显上去了。不过如果你的用户都是英文提问英文 docstring 也没问题。 ### 4.2 组合多个工具 现在把天气、计算器、加一个自定义的文档查询工具都塞进去 python from strands import Agent, tool from strands_tools import calculator import urllib.request import json tool def get_weather(city: str) - str: 查询指定城市的当前天气信息。 Args: city: 城市名称如 Beijing、Shanghai url fhttps://wttr.in/{city}?formatj1 req urllib.request.Request(url, headers{User-Agent: Mozilla/5.0}) with urllib.request.urlopen(req, timeout10) as resp: data json.loads(resp.read().decode()) current data[current_condition][0] temp current[temp_C] desc current[weatherDesc][0][value] humidity current[humidity] return f{city}: {temp}°C, {desc}, 湿度 {humidity}% tool def search_docs(keyword: str) - str: 在本地技术文档中搜索关键词返回匹配内容。 Args: keyword: 要搜索的关键词 # 实际项目中这里接你的文档系统 docs { bedrock: Amazon Bedrock 是亮马逊云科技的全托管生成式 AI 服务支持多种基础模型。, lambda: AWS Lambda 是事件驱动的无服务器计算服务按调用次数付费。, s3: Amazon S3 是对象存储服务支持无限存储容量。 } for key, value in docs.items(): if keyword.lower() in key: return value return f未找到关于 {keyword} 的文档。 # 三个工具一个 Agent agent Agent(tools[calculator, get_weather, search_docs]) # 试试混合提问 agent(北京今天多少度另外帮我算一下 2 的 10 次方。最后查一下 Bedrock 是什么。) Agent 会自动拆解这三个子任务依次调用三个工具汇总结果回复你。 ## 五、接入 MCP Server让 Agent 读 AWS 文档 MCPModel Context Protocol是一个开放协议让 Agent 可以连接外部工具服务器。 Strands Agents 内置了 MCP 支持。我们用 aws-documentation-mcp-server 让 Agent 能实时查 AWS 官方文档。 python from strands import Agent from strands.tools.mcp import MCPClient from mcp import stdio_client, StdioServerParameters # 连接 AWS 文档 MCP 服务器 aws_docs_client MCPClient( lambda: stdio_client( StdioServerParameters( commanduvx, args[awslabs.aws-documentation-mcp-serverlatest] ) ) ) with aws_docs_client: agent Agent(toolsaws_docs_client.list_tools_sync()) response agent(Amazon Bedrock 怎么用 Python 调用给我看个例子。) print(response) 踩坑第一次跑的时候报错 uvx: command not found。原因是没装 uv。解决办法 bash pip install uv 或者用 pipx bash pipx install uv 装完之后 uvx 命令就可用了。MCP 服务器会在首次运行时自动下载。 ### 混合使用自定义工具 MCP 工具 自定义工具和 MCP 工具可以混着用 python with aws_docs_client: all_tools [calculator, get_weather] aws_docs_client.list_tools_sync() agent Agent(toolsall_tools) agent(上海天气怎么样帮我查查 Amazon S3 的 Python SDK 用法。) Agent 自己判断调哪个工具。 ## 六、多 Agent 协作 一个 Agent 干不完所有事可以搞多个 Agent让它们协作。 Strands Agents 支持把一个 Agent 当成另一个 Agent 的工具Agent-as-Tool 模式。 python from strands import Agent, tool from strands_tools import calculator # Agent 1天气专家 tool def get_weather(city: str) - str: 查询城市天气。 import urllib.request, json url fhttps://wttr.in/{city}?formatj1 req urllib.request.Request(url, headers{User-Agent: Mozilla/5.0}) with urllib.request.urlopen(req, timeout10) as resp: data json.loads(resp.read().decode()) current data[current_condition][0] return f{city}: {current[temp_C]}°C, {current[weatherDesc][0][value]} weather_agent Agent( system_prompt你是天气查询助手。用户问天气时调用 get_weather 工具查询并回复。, tools[get_weather] ) # Agent 2数学专家 math_agent Agent( system_prompt你是数学计算助手。用户问数学题时用 calculator 工具计算并回复。, tools[calculator] ) # 把子 Agent 包装成工具 tool def ask_weather_expert(question: str) - str: 向天气专家提问。当需要查询天气信息时使用这个工具。 Args: question: 关于天气的问题 result weather_agent(question) return str(result) tool def ask_math_expert(question: str) - str: 向数学专家提问。当需要做数学计算时使用这个工具。 Args: question: 数学问题 result math_agent(question) return str(result) # 主 Agent协调者 coordinator Agent( system_prompt你是一个智能助手协调者。根据用户问题把天气问题交给天气专家数学问题交给数学专家。, tools[ask_weather_expert, ask_math_expert] ) coordinator(北京现在多少度另外帮我算 123 * 456。) 这个模式的好处每个 Agent 只关心自己的领域主 Agent 负责任务分发子 Agent 可以有不同的模型和 system prompt。 ## 七、指定模型 默认 Claude 4 Sonnet。想换 python from strands import Agent from strands.models import BedrockModel model BedrockModel( model_idus.amazon.nova-pro-v1:0, temperature0.3, streamingTrue ) agent Agent(modelmodel, tools[...]) ## 八、踩坑合集 | 问题 | 原因 | 解法 | |------|------|------| | ImportError: cannot import name tool | SDK 版本老 | pip install --upgrade strands-agents | | 工具没被调用 | docstring 没写清楚 | 写详细的功能描述和参数说明 | | MCP 服务器超时 | 首次下载依赖 | 等一两分钟第二次快 | | AccessDeniedException | 区域没开通模型 | 去 Bedrock 控制台开通用 us-west-2 | ## 九、总结 Strands Agents SDK 干了一件事**把 Agent 开发的门槛降到了会写 Python 函数的程度**。 - 5 行代码跑起来一个能算数的 Agent - tool 装饰器写自定义工具 - MCP 协议接外部工具服务器 - Agent-as-Tool 搞多 Agent 协作 - 默认用 Amazon Bedrock开箱即用 代码全在这了直接 copy 就能跑。 有问题评论区见。 --- **参考链接** - Strands Agents 官网[https://strandsagents.com](https://strandsagents.com) - GitHub 仓库[https://github.com/strands-agents/sdk-python](https://github.com/strands-agents/sdk-python) - 工具包仓库[https://github.com/strands-agents/tools](https://github.com/strands-agents/tools) - Amazon Bedrock 文档[https://docs.aws.amazon.com/bedrock/](https://docs.aws.amazon.com/bedrock/)