1. 这不是新赛道,而是 runtime 层的“操作系统时刻”来了
上周二,4月8日,Anthropic 宣布 Claude Managed Agents 进入公开测试阶段。新闻稿里写满了“十倍提速”“Notion 和 Asana 已接入”“沙箱执行+会话快照+凭证托管由 Anthropic 全权负责”——这些词听着很熟,像极了五年前 Kubernetes 刚进 CNCF 时的通稿节奏。但真正让我在凌晨三点划着手机屏幕停下来的,不是那些功能点,而是工程博客里一句轻描淡写的类比:“我们把 agent stack 拆成了稳定的抽象层,就像 90 年代操作系统虚拟化硬件那样。”
这句话不是修辞,是信号。
它意味着: agent 的运行时(runtime)正在从“每个团队自己搭的脚手架”,变成一个可被标准化、可被替换、可被压缩价格的基础设施层。 而 Anthropic 这次发布的,不是什么颠覆性新范式,而是一个设计得非常扎实、落地得非常克制、但恰好踩在历史拐点上的“合规版 runtime”。它不惊艳,但足够稳;不激进,但足够准;不试图定义未来,却精准锚定了当下所有人在生产环境里最痛的那个点: 会话状态不能丢,凭证不能漏,失败必须可追溯。
我去年带一个金融合规 agent 项目时,就栽在这三点上。当时用的是自研 harness + LangChain + Redis 缓存 session state,系统跑得挺顺,直到某天一个跨部门审批流要走 7 步、调用 5 个内部 API、生成 3 份 PDF 报告——第 47 分钟,context window 满了。模型没报错,也没 crash,只是默默把最早一次数据库查询结果从上下文里“挤掉”,然后基于残缺信息开始编造后续步骤。我们直到客户发来一封“贵司系统生成的合同编号与我方系统不一致”的邮件,才回溯日志发现:那个编号根本没被查过,是模型自己“合理推测”出来的。更糟的是,整个 session 没有结构化事件日志,只有零散的 LLM 输入输出和 Redis key-value 快照,根本没法重放、没法审计、没法定位到底是哪一步丢了数据。最后我们花了三天重写 state 管理层,把所有中间状态全落盘到 PostgreSQL,加了 versioned event log 表,才敢让 agent 再跑超过 20 分钟的任务。
Anthropic 的 session-as-event-log,就是这个教训的产品化。它不解决“agent 怎么思考”,只解决“agent 做了什么、谁让它做的、结果存哪儿了”。这恰恰是所有想把 agent 推进真实业务流程的团队,最先撞上的那堵墙。所以这不是“Anthropic 又出了个新工具”,而是“runtime 层终于有人愿意花力气把它做成水电煤一样的基础设施”。
关键词里提到的 Towards AI,其实已经暗示了这件事的行业共识度——它不是某家公司的单点突破,而是整个 AI 工程化演进路径上,一个必然到来的节点。你不需要立刻切换到 Managed Agents,但你必须理解: 当 runtime 开始被当作“操作系统内核”来设计时,所有还在把 model context 当数据库、把环境变量当密钥管理、把 console.log 当审计日志的方案,都已自动进入技术债清单。
2. 核心设计逻辑:为什么是“会话即日志”,而不是“模型即中心”
2.1 会话状态外置:一场静默的架构革命
Anthropic 工程博客里反复强调的 “session as durable event log living outside the model context”,表面看是个存储位置调整,实则是一次对 agent 架构哲学的根本性重置。要理解它的分量,得先看清旧模式的死结。
传统 agent 实现(尤其是基于 LLM 的 chain-of-thought 类型),几乎都默认把 session state 塞进 prompt context。每一次 tool call 的输入、输出、错误、重试,都以自然语言片段形式拼进下一轮 prompt。这带来三个无法回避的硬伤:
-
容量天花板不可逾越 :Claude 3.5 Sonnet 上下文窗口是 200K tokens,听起来很大,但实际业务中,一个含 3 张表格截图 OCR 文本、2 份 PDF 合同全文、4 次 API 返回 JSON 的会话,轻松吃掉 80K+ tokens。剩下 120K 不是留给“思考”的,而是留给“记住刚才发生了什么”的。一旦超限,模型不会报错,只会静默截断——就像你给同事口头复述一件复杂事,说到一半突然失忆,还假装记得后半段。
-
状态一致性无法保障 :context 是只读的“快照”,不是可读写的“数据库”。当多个 tool 并行调用(比如同时查 CRM 和 ERP),返回结果时间不同步,prompt 里拼接的顺序可能错乱。更麻烦的是,如果某个 tool 失败需要重试,你得手动把旧结果从 context 里删掉再塞新结果——这在代码里极易出 bug,且无法原子化。
-
调试与审计完全失效 :所有中间态都混在自然语言里。你想查“第 3 步调用 Salesforce API 时传的 account_id 是多少?”,得写正则从一长串文本里捞;想确认“是否真的执行了风控拦截逻辑?”,得人工比对前后 prompt 差异。这在 P0 故障排查时,等于蒙眼拆弹。
Managed Agents 的解法极其朴素: 把 session 拆成一个独立的、结构化的、带版本号的事件流(event stream)。 每次 tool call 触发,系统生成一条结构化事件:
{
"eventId": "evt_abc123",
"sessionId": "sess_xyz789",
"timestamp": "2026-04-08T14:22:31.123Z",
"eventType": "tool_call_start",
"toolName": "salesforce_query_account",
"input": {"account_id": "001xx000003DyZz"},
"correlationId": "corr_456"
}
执行完成后,再追加一条 tool_call_success 或 tool_call_failure 事件,包含完整输出或错误堆栈。所有事件按时间戳严格排序,持久化到 Anthropic 托管的时序数据库。模型 context 里只保留当前 step 最小必要信息(比如“用户刚让你查完账户 A,现在要生成报告”),state 管理由 runtime 全权接管。
提示:这种设计不是 Anthropic 首创,但它是首个将该模式作为 默认行为、强制约束、产品核心卖点 的商用平台。此前所有开源框架(LangGraph、CrewAI)都要求开发者自己实现 event store,导致 80% 的生产部署要么裸奔,要么用简陋的 Redis list 应付,埋下巨大隐患。
2.2 Harness 无状态化:执行器不该有记忆
与 session 外置配套的,是 harness 的彻底无状态化。Managed Agents 的 harness(你可以理解为 agent 的“CPU”)只有一个职责:接收 execute(name, input) 请求,调用对应容器,返回字符串结果。它不保存任何 session 数据,不缓存任何中间状态,甚至不记录自己执行过什么——所有元数据都来自 event log。
这带来两个关键收益:
-
故障恢复成本趋近于零 :harness 进程崩溃?没关系。系统根据
sessionId从 event log 里拉取最新状态,调用awake(sessionId)即可重建上下文。整个过程毫秒级,用户无感知。对比我们之前项目里 harness crash 后要手动从 Redis 恢复 state、校验各 tool 状态、再决定从哪步 resume,简直是降维打击。 -
横向扩展毫无压力 :无状态意味着 harness 实例可以无限水平扩容。流量高峰时自动起 100 个实例,低谷时缩容到 5 个,完全不影响 session 连续性。而旧架构里,每个 harness 实例都绑定特定 session state,扩缩容必须伴随复杂的 state 迁移,运维复杂度指数级上升。
注意:这里说的“无状态”是指 harness 不持有业务 state,但它当然有运行时状态(如内存、CPU)。Anthropic 的沙箱机制确保每个
execute调用都在干净容器中执行,避免跨请求污染。这才是真正的“ cattle, not pets”——容器即用即弃,连 PID 都不值得记。


431

被折叠的 条评论
为什么被折叠?



