[控场AI]
· 6 分钟阅读· 3,192 字

Anthropic解耦Claude智能体大脑与双手的架构演进

Anthropic解耦Claude智能体大脑与双手的架构演进

Anthropic复盘Managed Agents架构重构:拆成会话日志、Harness与沙箱三接口,接口须比模型假设活得久。

Anthropic 技术团队在 AI Engineer 大会上复盘了 Claude Managed Agents 从单容器架构到彻底解耦的演进。早期方案把会话日志、Harness 与沙箱塞进同一容器,导致调试困难、数据合规受限、VPC 接入僵化,被视为不可替换的「宠物」。重构后拆为三个接口:只追加的事件日志作为唯一需保护的状态,可替换的 Harness 大脑,以及按需供给、任务结束即销毁的沙箱双手。凭证不再进入沙箱而由代理在外呼时注入,从根本上阻断提示注入窃取路径;推理不必等待沙箱就绪,首 token 延迟下降约 90%。核心结论是 Harness 编码的假设会随模型迭代过期,架构必须建立在比假设更长寿的稳定接口上。

在AI Engineer大会上,Anthropic技术团队成员Priyanka和Gabe Semach分享了Claude Managed Agents从早期架构到彻底解耦的演进历程。这场演讲没有停留在产品功能介绍,而是罕见地复盘了一次架构推倒重来的决策过程,对正在构建生产级Agent系统的团队有直接的参考价值。

Agent的基本构成:模型、Harness与沙箱

演讲开场

Anthropic给出的定义很简洁:Agent是「模型在循环中调用工具」。但真正决定Agent能否稳定工作的,是包裹在模型外面的Harness层。Harness负责在循环中发起工具调用、管理上下文,并封装模型在训练阶段不具备的能力。

Priyanka举了一个具体例子:Sonnet 4.5存在所谓的「上下文焦虑」——当它感觉接近上下文上限时,会急着草草收尾任务。为此Harness需要加入上下文重置机制。但到了Opus 4.5,这个限制消失了,重置逻辑反而成了冗余。这说明Harness本质上是对模型能力缺口的假设集合,而假设会随着模型迭代而过时。

第三个要素是沙箱。Agent需要一块能执行代码、编辑文件、安装依赖的地方。Claude Code就是本地Harness加本地文件系统的典型形态。生产环境中,Agent写出的代码可能带有bug且不可信,必须限制在隔离容器内执行,且每个任务使用独立容器以控制爆炸半径。

上下文焦虑(context anxiety)是一种模型行为模式:当对话接近上下文窗口上限时,模型倾向于仓促结束任务,将剩余未完成的工作草草收尾。这属于训练过程中形成的策略倾向,而非显式编程逻辑,因此需要在 Harness 层用工程手段对冲。

提示注入(prompt injection)是 Agent 安全领域的核心威胁:攻击者将恶意指令伪装成工具返回结果或外部数据(如网页内容、文件内容),诱导模型将其当作合法指令执行。在 Agent 场景中其危害被放大——模型能调用工具、访问凭证、读写文件,一旦被注入控制,攻击者即可操纵 Agent 执行未授权操作。这正是 Anthropic 将凭证移出沙箱、改由代理注入的根本原因:即使模型被注入控制,也无法获取它从未看见过的 token。

第一版架构的教训:养了一只「宠物」

单点故障示意

Anthropic最初交付给早期客户的架构把所有东西塞进同一个容器:会话日志、Harness、沙箱执行全部本地化。好处是没有服务边界要设计,文件编辑近乎系统调用。问题在于,这等于养了一只宠物——命名、精心照料、坏了就得救活,救不活产品就挂。

具体痛点有三个。调试极其困难:丢包和容器死亡在外部表现几乎一样,团队只能通过WebSocket流进容器内部排查。数据合规受限:客户数据留在这些容器上,既进不去也出不来。网络拓扑僵化:客户要求连接其VPC内的MCP服务时,只能做网络对等互联,或者把Harness打包给客户自行运行。

解耦方案:会话、大脑、双手三个接口

会话日志是唯一需要保护的状态

重构后的架构拆成三个独立接口。左侧是Session,一个只追加的事件日志,记录会话中发生的一切。中间是Brain,即Harness加Claude的Agent循环。右侧是Hands,按需供给的沙箱、MCP工具调用等,任务结束即销毁。

三个接口的设计

这个设计让每个组件都变成可替换的「牛群」而非宠物。沙箱挂掉,错误作为普通工具调用结果返回给Claude,由它决定重启还是绕路。Harness挂掉,新实例读取事件日志从最后一个事件继续,工作像什么都没发生过一样恢复。唯一需要保护的状态只剩下会话日志。

安全性上有一个关键改动:凭证不再进入沙箱。此前凭证放在沙箱内,容易成为提示注入的攻击目标。新架构中,沙箱需要访问外部资源时,请求先经过代理,由代理在调用外部端点或MCP前注入token。Claude全程看不到凭证,自然无法被诱导打印或写入文件。

只追加日志还带来上下文策略的灵活性。系统永不丢弃或改写事件流,压缩策略可以自由选择——是全量摘要,还是只取最近N条事件放入上下文,都可以随模型能力调整。

性能收益同样明显。由于推理调用可以立即启动,不必等待容器沙箱就绪,首个token的延迟下降了约90%。

事件日志(event log)采用只追加(append-only)结构,意味着每个事件一旦写入就不可修改或删除,新事件只能追加到末尾。这种设计带来两个关键收益:其一,任何组件崩溃后都能通过重放日志重建状态,恢复点精确到最后一个事件;其二,上下文压缩策略与持久化存储彻底解耦——原始事件完整保留,压缩只是读取日志后生成上下文视图,策略可以随时更换而不影响历史数据。区别于传统数据库中可增删改的会话表,只追加日志把「事实记录」与「状态推导」分离,是构建可恢复 Agent 系统的基础设施模式。

代理注入凭证(proxy credential injection)是一种凭证隔离模式:沙箱内的代码从不持有 token,需要访问外部资源(API、MCP 服务)时,请求先发往受信任的代理,由代理在转发前将 token 附加到请求头,再把响应回传给沙箱。这样凭证的生命周期完全处于模型的感知范围之外,即使沙箱被攻破或模型被提示注入诱导,攻击者也无法提取凭证。代理同时充当策略执行点,可集中施加域名白名单、速率限制与审计日志,使安全边界从易受攻击的沙箱内部转移到受控的网关上。

核心结论:接口要比假设活得久

演讲中最值得记下的一句话是:Harness编码了假设,而假设会过期。Anthropic的做法是把架构建立在稳定的接口上——只追加的会话日志、可替换的Harness、可插拔的执行端。这样一来,压缩策略可以换、Harness可以整个替换,接口和架构却保持不变。一个Brain可以连接多个Hands,打通沙箱、客户VPC和MCP服务器,灵活性远高于单体容器方案。

实战路径:从环境到会话

工作坊部分展示了Managed Agents的核心API流程。第一步用v1 environments创建环境模板,配置网络策略(无限制或限定域名与MCP)、预装包。第二步创建Agent,指定名称、模型(Opus、Sonnet或Haiku)和系统提示词,并挂载基础工具集,通常包含bash、read、write、grep等。第三步用Agent ID和环境ID创建Session作为工作单元,初始状态为idle。

会话交互围绕事件流展开:用户发送user.message事件,Agent返回结果。自定义工具允许开发者接管特定工具调用的处理——Claude发出custom tool use事件,开发者处理后以custom tool result回传。错误通过session.error事件暴露,session idle表示无任务进行,interrupt事件用于中止会话。控制台的quick start提供了引导式流程,参与者可用附赠的API额度完成第一个Agent的搭建与测试。

对于自建Agent基础设施的团队,这次分享的迁移信号很明确:把状态集中在可持久化的日志层,把执行端当作一次性资源,把模型假设隔离在可替换的Harness里。这三点远比选哪个模型更影响系统的长期可维护性。

#Claude Managed Agents#Anthropic架构演进#Agent Harness#智能体解耦#沙箱隔离#提示注入防护#AI Agent基础设施
分享:

相关推荐