当前位置: 首页 > news >正文

Strands Agents SDK 上手:用 Python 写一个能调 AWS 服务的 AI Agent

Strands Agents SDK 上手:用 Python 写一个能调 AWS 服务的 AI Agent

"我想写一个 Agent,能帮我查 CloudWatch 告警、拉 S3 文件、顺便总结一下。"

这个需求说起来简单,但自己从零撸一个 Agent 框架要处理的事一大堆——工具注册、上下文管理、多轮对话状态、错误重试、token 限制……

亚马逊云科技最近开源了 Strands Agents SDK,我试了一下,核心卖点是:用 Python 写 Agent 像写普通函数一样简单,底层帮你处理了所有编排逻辑

先看效果

from strands import Agent
from strands.models.bedrock import BedrockModel
from strands_tools import retrieve_from_knowledge_base, current_time# 一行创建 Agent
agent = Agent(model=BedrockModel(model_id="anthropic.claude-sonnet-4-20250514-v1:0"),tools=[retrieve_from_knowledge_base, current_time]
)# 直接对话
response = agent("帮我查一下知识库里关于 S3 生命周期策略的最佳实践")
print(response)

就这么几行。SDK 自动处理了:

  • 模型调用和流式响应
  • 工具发现和参数匹配
  • 多轮对话上下文维护
  • 工具调用结果注入

安装

pip install strands-agents strands-agents-tools

依赖很轻,核心包不到 5MB。strands-agents-tools 是官方工具集,包含文件操作、Shell 执行、知识库检索等常用工具。

核心概念

Strands 的设计哲学是模型驱动的编排——不用你写 if/else 决定"什么时候该调什么工具",让模型自己决定。

1. Agent = Model + Tools + System Prompt

from strands import Agent
from strands.models.bedrock import BedrockModelmodel = BedrockModel(model_id="anthropic.claude-sonnet-4-20250514-v1:0",region_name="us-east-1"
)agent = Agent(model=model,system_prompt="你是一个 AWS 运维助手,帮用户排查云上问题。回答要简洁直接。",tools=[...]
)

2. 自定义工具用装饰器

from strands import tool@tool
def check_ec2_status(instance_id: str) -> dict:"""检查 EC2 实例的运行状态Args:instance_id: EC2 实例 ID,格式如 i-0123456789abcdef0"""import boto3ec2 = boto3.client("ec2")response = ec2.describe_instances(InstanceIds=[instance_id])state = response["Reservations"][0]["Instances"][0]["State"]["Name"]return {"instance_id": instance_id, "state": state}@tool
def get_cloudwatch_alarms(state: str = "ALARM") -> list:"""获取当前触发的 CloudWatch 告警列表Args:state: 告警状态过滤,默认只看 ALARM 状态"""import boto3cw = boto3.client("cloudwatch")response = cw.describe_alarms(StateValue=state)return [{"name": a["AlarmName"], "reason": a["StateReason"]}for a in response["MetricAlarms"]]

关键点:

  • @tool 装饰器自动从 docstring 和类型标注生成工具描述
  • 函数名就是工具名
  • 返回值会被序列化后注入模型上下文

3. 多轮对话

# Agent 默认维护对话历史
agent("我有个 EC2 实例 i-0abc123 好像挂了")
# → Agent 调用 check_ec2_status,返回 stoppedagent("帮我看看有没有相关的告警")
# → Agent 调用 get_cloudwatch_alarms,关联上下文返回结果agent("重启它")
# → Agent 知道"它"是 i-0abc123,调用对应操作

上下文自动维护,不用手动管 message history。

实战:运维巡检 Agent

把上面的工具组合起来,搭一个能做日常巡检的 Agent:

from strands import Agent, tool
from strands.models.bedrock import BedrockModel
import boto3@tool
def list_unhealthy_targets(target_group_arn: str) -> list:"""检查 ALB Target Group 中不健康的目标"""elb = boto3.client("elbv2")response = elb.describe_target_health(TargetGroupArn=target_group_arn)unhealthy = [t for t in response["TargetHealthDescriptions"]if t["TargetHealth"]["State"] != "healthy"]return unhealthy@tool
def get_recent_errors(log_group: str, minutes: int = 30) -> list:"""从 CloudWatch Logs 获取最近的 ERROR 级别日志"""import timelogs = boto3.client("logs")end_time = int(time.time() * 1000)start_time = end_time - (minutes * 60 * 1000)response = logs.filter_log_events(logGroupName=log_group,startTime=start_time,endTime=end_time,filterPattern="ERROR")return [{"message": e["message"][:200], "timestamp": e["timestamp"]} for e in response["events"][:10]]# 组装 Agent
ops_agent = Agent(model=BedrockModel(model_id="anthropic.claude-sonnet-4-20250514-v1:0"),system_prompt="""你是 AWS 运维巡检助手。职责:
1. 检查服务健康状态
2. 发现异常时主动排查根因
3. 给出修复建议(但不自动执行危险操作)
回答用中文,简洁直接。""",tools=[check_ec2_status, get_cloudwatch_alarms, list_unhealthy_targets, get_recent_errors]
)# 使用
result = ops_agent("帮我做一轮巡检,看看有没有告警和不健康的服务")
print(result)

和 LangChain / CrewAI 的区别

特性 Strands LangChain CrewAI
编排方式 模型驱动 代码驱动(Chain/Graph) 角色驱动
学习曲线 低(装饰器 + 对话) 高(大量抽象层)
AWS 集成 原生(Bedrock 直连) 需额外适配 需额外适配
适合场景 工具调用型 Agent 复杂 DAG 工作流 多角色协作

Strands 的定位很明确:不做复杂编排,就把"模型+工具"这件事做好。如果你的 Agent 主要是调工具干活,Strands 够用而且上手快。如果需要复杂的 DAG 流程编排,还是得看 Step Functions 或者 LangGraph。

部署到 AgentCore

写完 Agent 可以直接部署到 Bedrock AgentCore 托管运行:

# 打包
strands deploy \--agent-name "ops-patrol" \--runtime python3.12 \--entry main.py \--region us-east-1

部署后通过 AgentCore API 调用,自带负载均衡、版本管理、监控。

参考链接

  • Strands Agents SDK 仓库:https://github.com/strands-agents/sdk-python
  • 官方文档:https://strandsagents.com/latest/
  • Bedrock AgentCore 集成指南:https://docs.aws.amazon.com/bedrock/latest/userguide/agentcore-overview.html
  • 官方工具集:https://github.com/strands-agents/tools-python
http://www.jsqmd.com/news/987839/

相关文章:

  • KataGo围棋AI:从入门到精通的完整实战指南
  • 如何利用 DeepSeek/ChatGPT 撰写应用物理学论文 | 高效技巧与实战案例 搭配 AI 导出鸭提速论文整理
  • 如何快速获取US.KG免费域名?完整指南带你轻松创建网络身份
  • Flutter开发者如何告别SQLite的痛点?Drift数据库框架的现代化解决方案
  • json2csv高级使用技巧:处理嵌套JSON数据的10个实用方法
  • 终极指南:如何免费重命名macOS桌面空间,告别数字混乱
  • PyTorch实战:从零到一的深度学习模型架构设计与部署最佳实践
  • RISC-V ELF psABI文档导航:从入门到精通的资源地图
  • 2026桥门式起重机制造厂家选购指南:全国实力品牌TOP5推荐 - 品研笔录
  • 2026年郑州航空港区搬家公司全景分析:五大优选全场景服务商深度测评 - 品研笔录
  • 2026 科研全攻略:如何利用 DeepSeek / ChatGPT 手把手完成高质量论文?AI 导出鸭助力规范输出
  • 佛山寄快递价格表|哪家物流最便宜?2026省钱攻略 - 快递物流资讯
  • SoloPi终极指南:掌握Android自动化测试三大核心功能
  • BabelDOC:突破性智能排版保留的PDF文档翻译解决方案
  • TextBrewer终极指南:快速掌握NLP模型压缩的完整教程
  • 多区上门收表体验,收的顶手表回收服务领跑同城各区 - 奢侈品回收测评
  • Hakrawler TLS不安全模式:何时使用以及如何安全地绕过证书验证
  • d3-scale-chromatic 项目架构解析:模块化设计与源码实现原理
  • 你真以为动态生成类只能“塞进 ClassLoader 里永久住下”?隐藏类凭什么能“生成即隐身”?
  • 2026年上海/深圳/杭州/广州情感危机干预机构客观排行+避坑指南+高频FAQ - 互联网科技品牌测评
  • TimesFM 2.5高效模型压缩实战:从500M到200M的智能瘦身方案
  • 2026上海专业劳力士回收门店实测:收的顶中检持证鉴定、私密交易、资金实时到账 - 奢侈品回收评测
  • CUTLASS终极指南:零基础掌握GPU高性能矩阵计算
  • 18.5【保姆级教程】用队列进行模拟:从数据结构到现实世界的“预言机”
  • PlayStation 3模拟器终极指南:如何在现代电脑上重温PS3经典游戏
  • 石家庄车灯升级门店排行:5家正规机构实测对比 - 起跑123
  • 2026东莞配眼镜产品口碑全解析:瞳壤五款真实体验深度测评 - 配眼镜新资讯
  • 2026年儿童竹蜻蜓厂家选型指南:产品、品质与供货能力三维度解析 - 企师傅推荐官
  • 如何在5分钟内免费生成高质量3D资产?Hunyuan3D-2终极指南
  • 如何快速上手Duix Avatar:打造专属AI数字人的完整实践指南