📌 项目地址:strands-agents/harness-sdk | ⭐ 7,749 颗星 | 🔧 Python | 📜 未标注
一个很多人踩过的坑
写一个 AI agent 的第一步很简单:一个 while 循环,调模型,看返回里有没有工具调用,有就执行,再喂回去。百来行代码,跑通了。
然后问题来了。你要限制轮数,不然模型会无限循环烧 token。你要设 token 预算。你要支持中途取消。你要把输出解析成结构化数据。你要接 MCP。你要多 agent 协作。你要会话记忆。你要 tracing,要做 evals。
等回过神来,你已经写了一个半成品框架,而且每一个功能都比想象中费工。
Strands Agents 就是冲着这个场景来的。README 里的原话说得很直白:当你本来打算自己写 agent loop 的时候,选它。仓库目前 7749 个 star,提供 Python 和 TypeScript 两套官方 SDK。
进程内运行,没有托管控制平面
这是它和托管平台型产品的核心区别。Strands 跑在你自己的进程里,没有 hosted control plane,agent 的状态和数据全程在你手上。
这个设计带来了取舍:好处是数据不经过第三方,合规上省事,调试也直接;代价是伸缩、监控这些基础设施得自己搭。换来的东西是可控,对于把 agent 当长期生产组件的团队,这笔账通常划算。
一个 SDK 装下了那些“会长出来的部分”
我把它内置的能力列一下,写过 agent loop 的人应该能对上号:
- 生命周期控制:turn 限制、token 预算、取消、停止原因
- 工具调用、结构化输出、MCP 支持
- 多 agent 协作模式
- 记忆和会话管理
- 模型可移植,不锁定单一模型厂商
- 流式输出、guardrails、tracing、evals
我想单独点名最后四项。市面上多数 agent 框架的演示视频都停在“跑起来了”,但生产环境里最耗时间的是 tracing 和 evals:你得知道 agent 每一步干了什么,还得能系统地测它有没有干对。Strands 把这两样当成一等公民,这一点比功能数量更有说服力。
两层结构,按需取用
这个 monorepo 拆成了几个可独立安装的包,分成上下两层:
| 目录 | 内容 |
|---|---|
harness-py/ |
Python harness,create_harness() 返回一个完整组装好的 agent(PyPI 包名 strands-harness) |
harness-ts/ |
TypeScript harness,createHarness()(npm 包 @strands-agents/harness) |
strands-cli/ |
strands 命令行工具,在终端里直接和 harness agent 对话做原型(npm 包 @strands-agents/cli) |
strands-py/ / strands-ts/ |
底层 SDK:agent loop、模型 provider、工具 |
harness 是“装好就能用”的那层,适合快速上手;SDK 层暴露 agent loop 本身,适合要深度定制的场景。想最快感受一下效果,装 strands CLI 在终端里聊几轮就够了。Python 侧从 PyPI 装 strands-harness,TypeScript 侧装 @strands-agents/harness。具体的安装命令和入门示例在 strandsagents.com 的 Documentation 和 Samples 里。
动手前先想清楚的两件事
一是它还在活跃迭代期,API 可能变动,升级前翻一下 releases 页面。二是双语言支持看着好,但如果你团队只用一种语言,等于只用到仓库的一半,评估成本时别被 monorepo 的体量吓到。
我的建议:如果你正准备手写 agent loop,或者已经在自己的循环里堆出了半个框架,先花半小时看看 Strands 的文档再动工。就算最后不用它,它内置能力的那份清单也是一份不错的“你会遇到什么问题”的预演。