《扩展托管代理:将大脑与双手分离》深度笔记

一、核心命题:框架的"苦涩教训"

文章开篇即提出一个关键洞察:框架(harness)中编码的假设会随着模型改进而过时。这呼应了Rich Sutton的"苦涩教训"(Bitter Lesson)——我们不应将人类知识固化到系统中,而应构建能随计算能力扩展的通用方法。

具体案例

  • Claude Sonnet 4.5 表现出"上下文焦虑"(context anxiety)——感知到上下文限制临近时提前结束任务
  • 团队通过添加上下文重置功能解决
  • 但同一框架用于 Claude Opus 4.5 时,该行为消失,重置功能成为"死重"(dead weight)

这一经验促使Anthropic构建Managed Agents——通过稳定的接口而非具体的实现来运行长期代理任务。


二、历史类比:操作系统的设计智慧

作者将Managed Agents的设计哲学与操作系统类比:

操作系统 Managed Agents
硬件 → 进程、文件等抽象 代理组件 → 会话、框架、沙箱
read() 命令无需关心底层是1970年代磁盘还是现代SSD 接口无需关心具体实现
顶层抽象稳定,底层实现自由变化 接口持久,实现可替换

核心抽象三层架构

  1. Session(会话):仅追加的事件日志,记录一切发生之事
  2. Harness(框架):调用Claude并路由工具调用的循环
  3. Sandbox(沙箱):代码执行与文件编辑环境

三、从"宠物"到"牲畜":解耦的必然性

3.1 初始设计的困境:单体容器

早期将所有组件置于单一容器:

  • 会话、框架、沙箱共享环境
  • 文件编辑直接系统调用,无服务边界

"宠物vs牲畜"问题

  • 服务器成为宠物(pet):命名、手工维护、不可丢失
  • 容器故障 = 会话丢失
  • 容器无响应 = 必须人工恢复

调试噩梦

  • 唯一窗口:WebSocket事件流
  • 无法定位故障来源(框架bug / 数据包丢失 / 容器离线)
  • 需进入容器shell调试,但容器含用户数据 → 实质上无法调试
3.2 客户需求的冲突

客户希望Claude连接其VPC资源时:

  • 必须网络对等(peering),或
  • 在客户环境运行框架

框架的隐含假设成为扩展障碍


四、解耦架构:大脑、双手与记忆分离

4.1 核心解耦策略
组件 比喻 职责 接口
Brain 大脑 Claude + 框架逻辑 调用工具
Hands 双手 沙箱/工具执行 execute(name, input) → string
Session 记忆 持久化事件日志 getSession(id), emitEvent(id, event)
4.2 框架离开容器

关键转变:框架通过标准工具调用与容器交互

execute(name, input) → string

效果

  • 容器变为牲畜:可随意替换
  • 容器死亡 → 框架捕获为工具调用错误 → 返回Claude → Claude决定重试
  • 新容器通过 provision({resources}) 标准配方初始化
4.3 框架故障恢复
wake(sessionId)      → 重启新框架
getSession(id)       → 获取事件日志
emitEvent(id, event) → 持久化记录

关键:会话日志在框架外部,框架无状态,可任意重启


五、安全边界:凭证与执行的隔离

5.1 耦合设计的安全隐患
  • 不可信代码与凭证同容器运行
  • 提示注入只需说服Claude读取自身环境
  • 攻击者获取令牌 → spawn无限制会话

缓解措施的局限:缩小令牌范围隐含"Claude用受限令牌不能做什么"的假设——但Claude越来越聪明

5.2 结构性解决方案

模式一:凭证与资源绑定

  • Git:仓库访问令牌在沙箱初始化时克隆,接入本地git remote
  • 沙箱内 push/pull 无需代理接触令牌

模式二:外部保险库 + 代理

  • MCP工具:OAuth令牌存安全保险库
  • Claude → 专用代理 → 代理用会话关联令牌从保险库取凭证 → 调用外部服务
  • 框架全程不感知凭证

六、会话 ≠ 上下文窗口:可恢复的外部记忆

6.1 长期任务的上下文挑战

标准方法(压缩、内存工具、上下文修剪)的共性:不可逆的取舍决策

  • 难以预知未来需要哪些token
  • 压缩后消息从上下文窗口移除,仅当存储时可恢复
6.2 会话作为外部上下文对象

Managed Agents方案

  • 上下文持久存储于会话日志(非沙箱/REPL内)
  • 接口 getEvents() 支持灵活查询:
    • 从上次读取位置继续
    • 回溯特定时刻前的事件
    • 重读特定操作前的上下文

分层设计

层级 职责 理由
Session 可恢复的持久存储 保证耐用性和可查询性
Harness 任意上下文管理(组织、缓存优化、上下文工程) 未来需求不可预测

七、性能突破:多大脑、多手的弹性扩展

7.1 “多大脑”:TTFT优化

解耦前的问题

  • 每大脑需一容器
  • 推理前必须完成:克隆仓库、启动进程、获取事件
  • 即使不访问沙箱的会话也支付完整容器成本

关键指标:TTFT(Time To First Token)

  • 用户感受最强烈的延迟

解耦后

  • 容器仅当需要时通过工具调用配置
  • 无需容器的会话可立即开始推理
  • p50 TTFT ↓ 60%,p95 TTFT ↓ 90%+
7.2 “多手”:认知复杂度的转移

早期单容器限制:

  • 模型无法推理多执行环境
  • 单容器故障 = 所有"手"的状态丢失

解耦后:

  • 每只手 = 工具 execute(name, input) → string
  • 框架无需知道沙箱是容器/手机/宝可梦模拟器
  • 大脑可互相传递手(handoff)

八、元框架设计哲学

8.1 核心原则

“对Claude周围的接口有明确设想,对具体实现无预设”

有明确设想(opinionated about interfaces):

  • 操控状态的能力(会话)
  • 执行计算的能力(沙箱)
  • 扩展到多大脑、多手的能力

无预设(unopinionated about implementations):

  • 大脑/手的数量
  • 大脑/手的位置
8.2 与Claude生态的关系
组件 角色 Managed Agents支持
Claude Code 通用框架
任务专用框架 垂直领域优化
未来未知框架 接口兼容

九、关键术语与概念

术语 含义
Harness(框架) 调用LLM并路由工具调用的控制循环
Context anxiety(上下文焦虑) 模型感知上下文限制临近时的提前终止行为
Pets vs Cattle 基础设施隐喻:宠物需单独维护,牲畜可批量替换
TTFT Time To First Token,首token响应时间
MCP Model Context Protocol,Anthropic推出的工具集成标准
Session log 仅追加的完整事件记录,代理的"外部记忆"

十、个人反思:接口设计的永恒智慧

这篇文章的技术深度在于将分布式系统设计的经典原则应用于AI代理架构

  1. 松耦合高内聚:通过清晰接口分离关注点
  2. 状态外部化:无状态组件的可扩展性
  3. 安全纵深防御:凭证与执行环境的物理隔离
  4. 面向未来的抽象:不编码对当前模型能力的假设

最具启发性的是对**"苦涩教训"的践行:当模型能力快速提升时,任何基于"Claude不能做什么"的优化都可能迅速负债。Managed Agents通过接口的稳定性对抗实现的不确定性**,这为AI基础设施设计提供了范式参考。


笔记基于Anthropic Engineering Blog文章《Scaling Managed Agents: Decoupling the brain from the hands》(2026年4月),作者Lance Martin, Gabe Cemaj, Michael Cohen

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐