1. 这不是新赛道,而是 runtime 层的“操作系统时刻”正在重演
你打开终端敲下 curl 命令调用一个 AI agent,它开始读取 Slack 消息、查询 Notion 数据库、调用 Sentry API 获取错误堆栈、再生成补丁代码并推送到 GitHub —— 整个过程持续了 47 分钟,跨越 12 次工具调用、3 次上下文重载、5 次人工干预确认。最后它成功合入 PR,但你点开日志面板时发现:第 8 步的数据库查询结果消失了,第 11 步的补丁 diff 里混进了前一次会话的测试用例片段,而整个执行链路里没有任何报错提示。你无法回放、无法定位、无法审计。这不是故障,是静默腐烂。
这就是我去年在一家 SaaS 公司落地长周期客服工单处理 agent 时的真实现场。我们当时把 session state 全部塞进 Claude-3.5-sonnet 的 200K 上下文窗口里,靠 prompt engineering 和 token 预留硬扛。结果在一次跨时区协同处理跨国支付异常的会话中,模型在第 38 分钟开始“遗忘”——不是崩溃,不是 timeout,而是悄悄把三天前用户上传的 PDF 合同条款替换成上周另一张发票的 OCR 文本,然后基于错误前提生成了退款方案。客户没投诉,但财务团队在对账时发现了 17 笔重复退款。我们花了 11 小时才从零散的 CloudWatch 日志里拼出完整时间线,而那个 session 本身早已不可复现。
Anthropic 在 4 月 8 日发布的 Claude Managed Agents ,表面看是又一个托管 agent 运行时,但它的核心设计 —— session as durable event log —— 直接切中了这个痛点。它把 session 从模型上下文这个“易失性内存”里彻底剥离出来,变成一个独立、持久、可查询、可回放、可审计的事件流。这不是功能增强,是架构范式的切换:过去我们让模型记住一切,现在我们让系统记录一切。这和 1990 年代操作系统把物理内存抽象成虚拟内存、把磁盘抽象成文件系统,本质是一回事 —— 把不可靠的底层资源,封装成稳定、可组合、可演进的抽象接口。
关键词在这里不是“agent”,而是 Managed Agents 、 Towards AI - Medium 、 session-as-event-log 、 runtime layer 。这篇文章要讲的,不是 Anthropic 又出了什么新模型,而是为什么所有正在构建生产级 agent 应用的工程师、架构师、技术决策者,必须立刻理解这个 runtime 层正在发生的结构性变化。它不关乎你用的是 Claude、Llama 还是 Gemini,而关乎你未来三年部署的每一个 agent,是运行在可审计的坚实地基上,还是飘在随时可能坍塌的沙丘之上。如果你还在用 LangChain 的 ConversationBufferMemory 或 LlamaIndex 的 ChatStore 来存 session,那你已经站在了压缩周期的起点线上。
2. 核心设计解构:为什么“会话即事件日志”是唯一正确的解法
2.1 从“上下文即状态”到“事件日志即真相”的范式迁移
我们先拆解一个最基础但致命的问题: agent 的状态到底该存在哪儿?
过去一年,我参与过 7 个不同行业的 agent 项目评审,其中 6 个的初始方案都把 session state 存在模型上下文里。理由很朴素:简单、快、不用额外服务。开发同学会说:“我只要在 system prompt 里写清楚规则,再把历史对话 append 进去,模型自己会推理。” 这在单轮问答或三步以内任务里确实成立。但一旦进入真实业务场景 —— 比如银行反欺诈 agent 需要串联交易流水、用户画像、实时风控策略、外部黑名单 API、内部审批流 —— 这个模式就暴露出三个无法绕过的硬伤:
-
容量天花板不可逾越 :即使 Claude-3.5 支持 200K tokens,实际可用上下文远低于此。你要预留至少 30% 给 system prompt、tool schema、guardrail 规则、输出格式约束。真正能留给历史对话和工具结果的空间,通常只有 80K–120K tokens。而一个中等复杂度的银行工单,仅一次完整的交易流水 JSON 就可能占掉 15K tokens;三次工具调用返回的原始数据(含 headers、metadata、debug info)轻松突破 50K。当第 7 次调用触发时,模型已无空间容纳新数据,只能“滚动覆盖”——把最早的历史条目挤掉。这不是优雅降级,是主动丢弃证据。
-
语义完整性必然瓦解 :模型对上下文的“记忆”不是数据库式的精确检索,而是基于注意力权重的概率性召回。当早期 token 被挤到窗口边缘,其 attention score 急剧衰减。实测显示,在 150K 上下文窗口中,位置 >120K 的 token 对最终输出的贡献度下降超 80%。这意味着,你放在开头的“用户明确要求:所有建议必须引用最新版《GDPR 第32条》”,在第 10 轮响应时大概率被忽略。模型不是故意违抗,是它“想不起来”。
-
调试与审计完全失效 :当 agent 出错,你唯一能看的只有最终输出和最后一段上下文。中间 8 次 tool call 的输入/输出、参数、返回码、耗时、是否重试、重试原因……全部湮灭。你无法回答:“第 5 步为什么调用了错误的 API 端点?”、“第 7 步的决策依据是什么?”、“用户在哪一步表达了不满,agent 却未响应?”。没有事件日志,就没有因果链,就没有可归因的改进。
Anthropic 的 session-as-event-log 设计,就是为了一刀斩断这三把枷锁。它把 session 拆成两个正交部分:
- Harness(执行器) :一个轻量、无状态、只负责“调用”的组件。它接收
execute(tool_name, input)请求,启动 sandbox,拿到结果后原样返回字符串。它不存储任何东西,不维护任何上下文,甚至不解析返回内容。它的生命周期以毫秒计,可以随时 crash、重启、扩缩容。 - Session(会话) :一个独立的、持久化的、结构化的事件流。每一次 tool call 的发起、sandbox 启动、凭证注入、执行结果、错误堆栈、人工 approval、模型输出、用户反馈,都被序列化为一条带 timestamp、trace_id、session_id 的结构化事件,写入专用存储(Anthropic 内部用的是自研的 OLAP 引擎,支持亚秒级全字段查询)。
提示:这种分离不是炫技。它意味着你可以用
awake(sessionId)接口,在 harness crash 后 100ms 内恢复执行,因为所有状态都在 event log 里。你也永远不必担心“上下文爆炸”,因为 model context window 只需承载当前 step 的最小必要信息 —— system prompt + 当前 user message + 上一步 tool result 的摘要(而非原始 JSON),token 开销直降 60%+。
2.2 沙箱即 cattle:为什么“凭证隔离”是生产环境的生死线
另一个常被低估但极其危险的设计,是 credential isolation 。我见过太多团队把 API key、数据库密码、OAuth token 直接作为 environment variable 注入 agent 容器。理由还是那句:“方便调试”。结果呢?去年 Q3,某电商公司上线的“智能选品 agent”在一次大促期间,因模型误将 curl -H "Authorization: Bearer xxx" 当作普通文本输出,导致密钥明文泄露在 Slack 通知里,被爬虫抓取。攻击者在 47 分钟内刷走了 230 万 SKU 的库存数据,并伪造了 12 万笔虚假订单。
Anthropic 的方案是: Credentials are never injected into the sandbox. They live in a vault, and the sandbox only gets a short-lived, scoped, auditable delegation token.
具体怎么实现?我们来还原它的沙箱启动流程:
- Agent harness 收到
execute("notion_search", {"query": "Q2 sales report"})请求; - Harness 不直接调用 Notion API,而是向 Anthropic 的 credential broker 发起一个 scoped delegation request ,声明:“我需要以用户 A 的身份,访问其 Notion workspace X 的 pages.read 权限,有效期 5 分钟”;
- Broker 验证用户 A 的授权(通过 OAuth flow 已完成)、检查策略(如“禁止访问 finance database”)、生成一个 JWT token,其中
aud字段锁定为notion-api.anthropic.com,scope字段精确限定为pages.read,exp设为 5 分钟后; - Sandbox 启动时,只收到这个 JWT,以及一个预置的
NOTION_API_BASE_URL环境变量(指向 Anthropic 的代理网关); - Sandbox 内的代码调用
requests.get("https://notion-api.anthropic.com/v1/pages?filter=..."),网关拦截请求,验证 JWT 的签名、scope、exp,再以用户 A 的身份向真实 Notion API 转发。
385




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



