📌 项目地址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 的文档再动工。就算最后不用它,它内置能力的那份清单也是一份不错的“你会遇到什么问题”的预演。

这篇文章对你有帮助吗?

发表回复