长运行 Agent
Managed Agent:脑手分离
核心洞察:把 Agent 的思考和执行拆成独立组件,让系统在任何部分出错时都能优雅恢复。
类比:操作系统的虚拟化
三个核心组件
Session
会话日志
Append-only 的事件流,持久化存储。记录所有发生过的事情:用户输入、工具调用、模型输出。
Harness
脑 / 大脑
调用 Claude 并路由工具调用的循环。负责思考:决定下一步做什么、如何组织上下文。
Sandbox
手 / 沙箱
执行代码和编辑文件的容器环境。负责执行:运行命令、写文件、与外部系统交互。
为什么要拆开:宠物 vs 牛群
架构演进
旧方案(宠物)
Session + Harness + Sandbox 都在同一个容器里。
容器挂了 = 会话丢失 = 无法调试 = 任务彻底失败。
就像养了一只宠物,挂了就完了,无法替代。
容器挂了 = 会话丢失 = 无法调试 = 任务彻底失败。
就像养了一只宠物,挂了就完了,无法替代。
新方案(牛群)
每个组件独立部署,互不依赖。
容器挂了 = 工具调用失败 = Claude 决定重试 = 新建容器继续。
就像牧场的牛,挂了重来一个,系统照常运行。
容器挂了 = 工具调用失败 = Claude 决定重试 = 新建容器继续。
就像牧场的牛,挂了重来一个,系统照常运行。
动手试试:故障恢复模拟
Harness
Brain(脑)
execute()
emitEvent()
Sandbox
Hand(手)
Event Log
Session(会话)
点击下方按钮,观察不同故障场景下系统的恢复行为。
脑离开容器后的好处
关键改进
-
容器变成工具调用:
execute(name, input) -> string,对 Harness 来说就是一个普通函数 - 容器挂了 = 工具调用返回错误 = Claude 自行决定是否重试 = 自动新建容器继续工作
- Harness 可以在容器启动前就开始处理,不需要等容器 ready
-60%
TTFT p50 降低
-90%+
TTFT p95 降低
TTFT = Time to First Token(首 Token 响应时间)
安全的结构性解决
安全问题的架构级解决
- 旧方案:Agent 生成的代码和 API 密钥在同一个容器里,Prompt Injection 可以直接偷密钥
- Git Token:在克隆仓库时注入容器环境变量,沙箱内可以用,但 Agent 看不到 token 值
- MCP OAuth Token:存在外部 vault 里,通过代理转发 MCP 调用,沙箱内无法直接访问 token
多脑多手
组件可以自由组合
Brain A
Brain B
Brain C
多个 Brain:各自只是无状态 Harness,按需启动
Sandbox 1
Sandbox 2
Sandbox 3
Sandbox 4
多个 Hand:各自是独立工具,可以传递给不同 Brain
这意味着你可以让一个 Brain 同时操控多个 Sandbox(并行执行),也可以让同一个 Sandbox 在不同的 Brain 之间传递(接力执行)。组件之间完全解耦。
好的架构让组件可以独立失败和独立替换。脑手分离不只是性能优化,它从根本上改变了系统的可靠性模型:从「一个宠物挂了全完」到「任何部分都能重建」。