Scaling Managed Agents: Decoupling the Brain from the Hands(规模化托管 Agent:让大脑与双手解耦)
- 原文标题
- Scaling Managed Agents: Decoupling the Brain from the Hands(规模化托管 Agent:让大脑与双手解耦)
- 原文链接
- https://www.anthropic.com/engineering/managed-agents
- 作者
- Lance Martin、Gabe Cemaj、Michael Cohen(Anthropic)
- 发布日期
- 2026-04-08
🎯 一句话
把「决定做什么」和「实际去做」拆成两层:大脑在托管环境里推理,双手在你自己的环境里执行。⭐ 好处是敏感数据和凭证不必离开你的边界。
📑 本页目录
Anthropic 构建的 Managed Agents 托管服务,把 Agent 的三个组件(session、harness、sandbox)拆成独立可替换的接口。这样 harness 中编码的假设不会随 Claude 变强而变成技术债——系统能容纳未来的发展而无需重新设计。
要解决的核心问题
harness 会编码关于 Claude 能力局限的假设,而这些假设会过时。例如 Sonnet 4.5 有「上下文焦虑」,工程师为此加了上下文重置机制;到 Opus 4.5 这些变通就没必要了。「harness 编码假设」,因此需要不断修订。
架构:大脑与双手解耦
概念框架
类比操作系统通过「进程」「文件」这类抽象接口虚拟化硬件——read() 在千差万别的存储技术上行为一致。Managed Agents 用同样的思路虚拟化三个组件:
- Session(会话): 一个只追加的事件日志
- Harness: 调用 Claude 并路由工具调用的控制循环
- Sandbox(沙箱): 执行代码和文件操作的环境
耦合架构的问题:「别养宠物」
最初的设计把所有组件塞进单个容器,带来一系列问题: - 宠物问题: 容器挂了会话就永久丢失;容器无响应要人工「护理康复」 - 调试困难: 唯一的观察窗口是 WebSocket 事件流,无法定位故障来源;工程师需要 shell 访问装着用户数据的容器,造成安全和隐私障碍 - 网络假设: harness 假设所有资源都在自己的容器内,客户想接自己的私有 VPC 就要做网络对等
解耦后的架构
harness 移到容器外部:不再运行在容器内,而是通过 execute(name, input) → string 把容器当工具调用——容器从「宠物」变成可互换的「牲畜」。容器失败时 harness 捕获错误,Claude 可以用标准配方重新拉起一个新容器重试。
harness 自身也可替换:因为 session 日志存在 harness 之外。失败的 harness 通过 wake(sessionId) 重启、getSession(id) 取回事件日志、恢复运行;运行中持续通过 emitEvent(id, event) 记录事件。
安全架构——耦合设计会把凭据暴露给同容器内 Claude 生成的代码(提示词注入即可窃取 token)。解耦后用两种模式: - 资源绑定认证: 凭据在初始化时完成资源认证。git 仓库在沙箱搭建阶段就用内嵌 token 克隆好,后续 git 操作无需暴露凭据 - 保险库认证(Vault-Based): OAuth token 和自定义工具凭据留在外部安全保险库;Claude 通过 MCP 代理服务器用会话关联的令牌取用,凭据从不暴露给 harness
Session 作为外部上下文对象
长周期任务常常超出上下文窗口。与其做不可逆的取舍(摘要、选择性裁剪),不如让 session 在窗口之外提供一个持久的上下文对象。getEvents() 接口让 harness 可以:
- 选取事件流的位置切片
- 回退到某个时刻之前以理解上下文
- 从上次停止的位置继续
harness 还能在把事件送进 Claude 上下文前做变换,实现上下文组织和 prompt cache 优化。这把「可恢复的存储」与「上下文管理」分开了——未来的 harness 可以采用任何新出现的上下文工程技术。
规模化:多大脑,多双手
性能提升(不再要求每个会话都配容器后,首 token 延迟 TTFT 大幅改善): - p50 TTFT 下降约 60% - p95 TTFT 下降超过 90%
原因:过去每个大脑都要有自己的容器并承担完整启动成本(克隆仓库、拉起进程、拉取事件);现在容器只在工具调用需要时才配置,不需要沙箱交互的会话可以立即开始推理。
多大脑: 解耦让 harness 变成无状态可扩展——多大脑就是启动多个 harness,只在必要时连上双手。
多双手: execute(name, input) → string 接口支持无限种执行环境——容器、自定义工具、MCP server,或理论上任何系统。harness 不关心「手」是容器、手机还是别的什么。关键是大脑之间可以互相传递双手,从而支持协作式 Agent 场景。
设计原则
- 接口有主见,实现不设限: 对 Claude 需要什么接口(会话操作和计算)有强主张,但不对具体实现做任何假设
- 通过分离实现故障安全: 没有单点故障会级联——容器故障、harness 崩溃、沙箱问题都表现为 Claude 能自行处理的工具调用错误
- 面向未来: 无需架构改动就能容纳未来的 harness;不同的任务专用 harness(如 Claude Code)在系统内工作方式相同
结论
Managed Agents 解决的是计算领域的经典问题——为「尚未被构想出来的程序」设计系统。通过用通用接口虚拟化 Agent 组件,系统能在 Claude 能力持续提升、新的 harness 需求不断涌现时同步演进,而不需要重新设计。
✅ 检查点
- 「大脑-双手」解耦解决了什么问题?
- 这种架构对数据边界意味着什么?
- 它引入了什么新的复杂度?
👀 答案
- ⭐ 解决「想用托管的强模型,但数据和系统不能出内网」这个矛盾。解耦之后,推理在云端进行,而工具执行留在本地,云端只看到工具的调用请求和返回摘要。
- 数据和凭证可以完全留在你的边界内。⚠️ 但要注意:工具的返回值仍然会回到云端模型的上下文——所以返回值里包含什么,需要专门审查和裁剪,否则敏感数据还是会流出去。⭐ 「执行在本地」不等于「数据不出去」。
- ①网络往返变多(每次工具调用都要跨边界),延迟上升;②需要一套可靠的双向通道和鉴权;③故障排查跨了两个环境,日志要能对齐;④版本管理——本地工具的行为变了,云端的提示词可能要跟着改。
🛑 可以停在这里
⚡ 走神救援
⭐把「决定做什么」和「实际去做」拆开:大脑在托管环境推理,双手在你自己的环境执行,解决「想用托管的强模型,但数据和系统不能出内网」的矛盾。⚠️⭐⭐最容易误解的一点:「执行在本地」不等于「数据不出去」——工具的返回值仍会回到云端模型的上下文,所以返回值里包含什么需要专门审查和裁剪。新增复杂度:网络往返变多(延迟上升)、需要可靠的双向通道和鉴权、故障排查跨两个环境(日志要能对齐)、版本管理(本地工具行为变了云端提示词可能要跟着改)。