当前位置: 首页 > 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.rkmt.cn/news/1499584.html

相关文章:

  • 如何快速获取US.KG免费域名?完整指南带你轻松创建网络身份
  • 2026东莞配眼镜优选推荐与全域指南:从验光到镜片选型到售后全流程拆解 - 配眼镜新资讯
  • 如何利用 DeepSeek/ChatGPT 撰写应用物理学论文 | 高效技巧与实战案例 搭配 AI 导出鸭提速论文整理
  • PyTorch实战:从零到一的深度学习模型架构设计与部署最佳实践
  • TextBrewer终极指南:快速掌握NLP模型压缩的完整教程
  • SoloPi终极指南:掌握Android自动化测试三大核心功能
  • BabelDOC:突破性智能排版保留的PDF文档翻译解决方案
  • 你真以为动态生成类只能“塞进 ClassLoader 里永久住下”?隐藏类凭什么能“生成即隐身”?
  • d3-scale-chromatic 项目架构解析:模块化设计与源码实现原理
  • 2026年上海/深圳/杭州/广州情感危机干预机构客观排行+避坑指南+高频FAQ - 互联网科技品牌测评
  • 2026年稻花香源头厂家/产地直供排行榜:五常稻花香2号/正宗优质稻花香大米最新精选推荐 - 企业推荐官【官方】
  • 成都钻石回收套路拆解,虚标高报价、刻意压低 4C 等级猫腻曝光 - 奢侈品回收评测
  • 【信息科学与工程学】计算机科学与自动化/控制——第九十二篇 自动化控制01
  • 深入理解 Apache Flink 可扩展状态
  • 石家庄专业车灯升级门店排行 资质与服务实测对比 - 起跑123
  • 2026东莞GEO优化公司实力排名!实测技术、案例、效果综合对比 - 新闻快传
  • 从Keil到VScode的一站式服务(stm32和GD32)
  • 【干货】DeepSeek / 豆包数学公式完美转 Word 攻略!告别乱码,效率翻倍!AI 导出鸭一键快速转换公式
  • 包包回收行业避坑总结,合肥 2026 连锁商铺诚信经营 - 奢侈品回收评测
  • C++:初始化列表
  • 2026年展柜厂家推荐榜单:内衣展柜/酒柜/鞋柜/眼镜柜/珠宝展柜,专业定制与空间美学深度解析 - 企业推荐官【官方】
  • 2026东莞配眼镜镜片膜层工艺深度解析:防反射、耐磨、疏水三大镀膜技术详解 - 配眼镜新资讯
  • ijkplayer vs ffplay.c:架构优化与工程实践深度解析
  • 【Redis分布式缓存实战】第22章 企业级Redis缓存项目架构复盘
  • 2026年北京刑事律师权威榜单TOP10:刑事案件辩护深度评估 - 新闻快传
  • 2026年郑州机场货物人工搬卸公司权威分享报告:港区搬迁服务优选指南! - 品研笔录
  • Web分布式网站架构之-Squid缓存【20260608】002篇-Squid 工作流程图
  • 斯坦福李瑞江团队在Nat Med发表能够融合病理切片与虚拟CODEX染色的多模态医学AI框架
  • 2026煤磨气体分析仪品牌盘点:防爆燃监测设备哪家强?全国厂家排名揭晓 - 品研笔录
  • 2026年如何降AI率?「三层过滤法」教你高效降AI【附降AI提示词】