← Back to list

Agent 的「大脑」不需要带着「双手」一起死:Anthropic 解耦 brain/hand 后启动延迟降 60%,但跨组织协作才是更难的问题

大多数团队第一次搭 agent 系统,是把所有东西塞进一个容器 — — 模型、工具调用循环、执行环境、凭证、日志。运行起来没问题。直到容器挂了,你发现 session 没了、状态丢了、整个 agent 和它踩过的所有坑一起蒸发了。

BeeOS · 2026-05-30 18:50 · 0 claps · 21.7 min read
Open on Medium ↗
Wiki topics: LLM · Large Language Models AGT · AI Agents

Agent 的「大脑」不需要带着「双手」一起死:Anthropic 解耦 brain/hand 后启动延迟降 60%,但跨组织协作才是更难的问题

大多数团队第一次搭 agent 系统,是把所有东西塞进一个容器 — — 模型、工具调用循环、执行环境、凭证、日志。运行起来没问题。直到容器挂了,你发现 session 没了、状态丢了、整个 agent 和它踩过的所有坑一起蒸发了。

Anthropic 把这三个东西拆开之后,p50 首 token 延迟降了 60%,p95 降了 90% 以上。但拆开的是一个 agent 的内部组件 — — 跨组织协作,他们没动。

你第一次把一个 agent 接进生产系统的时候,大概率经历过这件事:容器卡死了。你看不到里面发生了什么,唯一的窗口是 WebSocket 事件流 — — 但它不能告诉你故障出在 harness、沙箱、还是网络。你想进容器 debug,但容器里存着用户数据,你不敢动。你的 agent 不是一台服务器,它是一只宠物 — — 生病了你得端着药去哄它。

而当你终于把它救活,发现它只是网络断了一秒 — — 你花了 40 分钟去诊断一个 1 秒的问题。这种无力感不只你有。Anthropic 的工程师在 2026 年 4 月的文章里用了一个精准的比喻:“我们养了一只宠物,不是牧场的牛。”

宠物 vs 牛(pets vs cattle)是 SRE 领域的老类比了。一只宠物有自己的名字,生病了有人治,死了有人心疼。牧场的牛没有名字,死了就换一头。Anthropic 的 Managed Agents 架构,核心工作就是把 agent 从宠物变成牛 — — 每个组件可以独立死亡、独立替换、独立恢复。

真正有意思的是:这个架构把 agent 内部拆清楚了,但跨 agent、跨组织的协作问题,它没碰。而跨组织协作需要的架构思维,和 Anthropic 拆 agent 内部组件时用的东西,是同一个东西 — — 标准化接口替代硬编码耦合,cattle 替代 pet。

适合谁读? 正在搭 agent 基础设施的平台工程师和架构师;从单 agent 转向多 agent、发现”agent 内部架构”和”agent 间架构”是两个完全不同问题的团队;对「agent 的操作系统」这个类比感兴趣、想理解它在不同层级上分别意味着什么的人。

读完这篇,你应该能回答三个问题:

1. Anthropic 把 agent 拆成 Session / Harness / Sandbox 三个接口后,TTFT 降 60% 靠的是什么机制?
   不是模型变快——是把"启动容器"从"启动推理"的路径上拿掉了。
2. 这套解耦方案在单 agent 内部很完整,但跨组织协作少了哪四块?
   发现、跨集群传递、能力变化可见、任务级编排。
3. BeeOS 的 OpenAPI + A2A 怎么把 cattle 模式从"一个 agent 内部"扩展到"全网络 agent 可替换"?
   三入口分工——OpenAPI 管生死,A2A 管对话,MCP 管边界。

零、先把事实说清楚

Anthropic 在 2026 年 4 月 8 日发布的工程博客《Scaling Managed Agents: Decoupling the brain from the hands》,详细记录了他们的 hosted agent 服务在生产中遇到的瓶颈和架构重构。

  • 指标: p50 TTFT(首 token 延迟) — 旧架构(耦合容器): 基线 — 新架构(解耦 brain/hand/session): 降约 60%
  • 指标: p95 TTFT — 旧架构(耦合容器): 基线 — 新架构(解耦 brain/hand/session): 降超 90%
  • 指标: 容器故障恢复 — 旧架构(耦合容器): 人工进入容器 debug,session 可能丢失 — 新架构(解耦 brain/hand/session): harness 崩溃后 wake(sessionId) 自动恢复
  • 指标: 安全边界 — 旧架构(耦合容器): 凭证和 untrusted code 在同一容器 — 新架构(解耦 brain/hand/session): Git token 注入 remote,MCP OAuth 走 vault proxy
  • 指标: brain-to-hand 关系 — 旧架构(耦合容器): 1:1(一个 brain 绑一个 sandbox) — 新架构(解耦 brain/hand/session): M:N(多个 brain 可操作多个 sandbox,brain 间可传递 hand)
  • 指标: 上下文持久化 — 旧架构(耦合容器): 内存内,容器死 = 上下文丢 — 新架构(解耦 brain/hand/session): session 独立 append-only 日志,harness 可任意时间回读

核心机制:Session(append-only 事件日志)、Harness(无状态决策循环,wake(sessionId) 即恢复)、Sandbox(provision({resources}) 标准化创建,死了直接重建)——三个独立接口,各自可替换。

以上数据来自 Anthropic 工程博客《Scaling Managed Agents: Decoupling the brain from the hands》(2026–04–08),作者 Lance Martin、Gabe Cemaj、Michael Cohen。

一、从宠物到牛:为什么「全塞一个容器」是条死路

Anthropic 的工程师说了句大实话:旧架构把 session、harness、sandbox 全塞进一个容器里的时候 — — 他们养了一只宠物,不是牧场的牛。

这句话代表的意思是:当你的 agent 是一个不可替换的个体,每一个故障都变成了急诊。不是监控告警、自动重启、事后复盘这种正常运维 — — 是急诊。而且是那种你看不到病因、手里却捏着用户数据的急诊。

旧架构的状态:

┌──────────────────────────────┐
│         一个容器              │
│  ┌────────┐  ┌────────────┐  │
│  │Harness │  │  Sandbox   │  │
│  │(决策)  │  │  (执行)    │  │
│  └────────┘  └────────────┘  │
│  ┌──────────────────────┐   │
│  │     Session (日志)    │   │
│  └──────────────────────┘   │
│  ┌──────────────────────┐   │
│  │     凭证 + 密钥       │   │
│  └──────────────────────┘   │
└──────────────────────────────┘

三个问题从这里长出来,每一个都值得单独展开。

第一,容器死亡 = session 死亡。 日志和 agent 绑在同一个进程空间。容器一挂,你连 agent 最后做了什么都不知道。Anthropic 的工程师唯一的办法是进容器 debug — — 但容器里有用户数据,开 shell debug 本身就踩在安全红线上。更要命的是:三种完全不同的故障 — — harness 里的 bug、WebSocket 丢包、容器离线 — — 在运营端看起来一模一样。你分不清是谁的锅,只知道”它不动了”。

第二,每个 session 都付容器的启动成本,即使它根本不需要容器。 这是最容易被人忽略的一个成本来源。在旧架构里,任何 session — — 包括纯文本对话、纯规划任务 — — 都要等容器完全就绪才能开始推理。克隆 repo、拉取依赖、启动进程、拉取 pending events — — 这些操作跟推理无关,但它们站在推理前面排队。解耦后的架构把容器变成 brain 发 execute() 按需调用,不需要 sandbox 的 session 直接跳过这些步骤开始推理。这就是 p50 TTFT 降 60% 的核心:不是推理变快了,是排队消失了。

第三,凭证和 untrusted code 同处一室。 Claude 生成的代码在 sandbox 里跑,sandbox 和凭证在同一个容器里。prompt injection 只需要说服 Claude 读一下环境变量 — — 不需要绕过什么复杂的安全机制。传统的缓解方案是给 token 窄 scope,但这本质上是在赌”Claude 不知道窄 scope token 还能做什么”。而 Claude 正在变聪明 — — 赌模型的无知,不是安全策略,是时间炸弹。

新架构做的事,本质上是一次操作系统式的虚拟化 — — 对上面的 agent 暴露统一接口,把下面随时变的东西藏起来:

┌──────────┐    ┌──────────┐    ┌──────────┐
│ Session  │    │ Harness  │    │ Sandbox  │
│(独立存储)│    │(无状态)  │    │(标准化创建)│
│          │    │          │    │          │
│ append   │◄───│ wake(id) │───►│provision │
│ only log │    │ emitEvent│    │({res})   │
│          │    │          │    │          │
│ 活着就行 │    │崩了重启  │    │死了重建  │
└──────────┘    └──────────┘    └──────────┘
      │               │                │
      │               │    ┌───────────┴──────┐
      │               └───►│  Vault Proxy     │
      │                    │  (凭证隔离)      │
      └────────────────────┤                  │
                           │  Git remote:     │
                           │  token 注入后    │
                           │  agent 不可见    │
                           │                  │
                           │  MCP:            │
                           │  OAuth 进 vault  │
                           │  proxy 代发请求  │
                           └──────────────────┘

Session 是 append-only 日志 — — harness 崩了以后用 wake(sessionId) 从最后一个事件恢复。Sandbox 死了用 provision({resources}) 重建一个规格化的——不心疼。Harness 本身也是无状态的——崩溃了启动一个新的,调用 wake(sessionId),从 session 日志里读到自己的上一段生命,继续往下走。

这不是简单的拆服务。这是重新定义了 agent 的故障域 — — 每个组件可以独立失败,不影响整体恢复。就像操作系统里一个进程崩了不会让内核 panic。

二、多 brain 多 hand:解耦的经济学

解耦不光解决了可靠性问题,还解开了一个旧架构里的硬绑定:brain 和 hand 必须一比一。

旧架构里,一个 brain(harness + Claude)绑一个 sandbox。要 5 个 brain 就得起 5 个容器 — — 每个都要全量初始化。新架构里,brain 本身是无状态的决策循环,它通过 execute(name, input) → string 这个统一接口操作任何 hand。

这个设计释放了两个结构性的自由度:

brain 和 hand 可以 N:M。 一个 brain 可以同时操作多个 sandbox — — 比如同时在一个 sandbox 里跑数据分析代码、在另一个 sandbox 里编辑配置文件。反过来,多个 brain 也可以共享 hand — — brain A 把一个 sandbox 的控制权交给 brain B,传递的不是消息,是执行环境本身。

这在实际场景里非常具体:你有一个 brain 负责规划,它把一个 sandbox(里面有装好的依赖、代码、上下文)直接交给另一个 brain 去执行 — — handoff 不是复制状态,是指针传递。

按需启动。 不需要 sandbox 的 session — — 纯思考、纯规划、纯文本对话 — — 推理可以立即开始,不等任何东西。sandbox 变成工具调用的一部分,不是 agent 的前提条件。p50 TTFT 降 60%、p95 降 90% 的数据,不是来自什么优化技巧。来自把”启动容器”从”启动推理”的关键路径上完全移除。

Anthropic 的文章里有一段关于 context anxiety 的故事,值得单独提出来。他们在 Claude Sonnet 4.5 上观察到一个行为:模型感知到 context limit 即将达到时会提前结束任务。他们在 harness 里加了 context reset 来应对。但到了 Claude Opus 4.5,这个行为消失了 — — context reset 变成了死代码。

这就是”harness 编码了关于模型弱点的假设”的典型案例。这些假设会过期,而过期的代码应该能被替换掉而不影响系统其他部分。可替换的前提是解耦。 如果 harness 和 session 绑在一起,你就不能单独换 harness。

三、拆开了一个 agent,没拆开 agent 之间

到这里,Anthropic 的方案在单个 agent 的内部架构上已经非常完整。但它有一个结构性的空白:它没有定义 agent 与 agent 之间的接口。

具体看缺了什么:

一、没有 agent 发现机制。 Managed Agents 里,每个 brain 通过 execute() 操作自己的 hand。但如果你想让 Agent A 调用 Agent B——跨团队、跨组织、跨供应商的另一个 agent——怎么知道它的存在?怎么知道它的能力?Anthropic 的接口里没有任何”Agent Card”的概念。在一个平台内这不是问题——平台知道所有 agent。但在跨平台场景里,发现是第一道门。门都没有,谈不上协作。

二、没有跨集群 sandbox 传递协议。 brain 之间可以传递 hand,但前提是它们在同一套 Managed Agents 基础设施里。这个前提在跨组织场景里不成立 — — 你的 agent 在 Anthropic 平台,我的在 BeeOS,sandbox 怎么传递?没有跨平台的 handoff 协议,brain A 建好的 sandbox 对 brain B 来说就是不可见的。

三、session 记录事件,不记录能力变化。 session 只存”发生了什么”(event log),不存”agent 现在能做什么”。一个 agent 在运行过程中获得了新的工具权限、接入了新的外部服务 — — 这些动态能力变化对它自己的 harness 是已知的,但对另一个想调用它的 agent 来说完全不可见。没有能力变化通知机制,agent 之间永远只能在静态假设上协作。

四、没有任务级编排。 execute(name, input) → string 是一个同步的工具调用接口。它没有 task ID、没有状态跟踪、没有异步流式反馈。一个 agent 发给另一个 agent 的长时间任务——比如”跑这个数据分析,可能需要 5 分钟,有进展告诉我”——在这套接口里传不了。Anthropic 给单 agent 内部建了 session 做 durable log,但 agent 之间没有等效物。

这四个缺失画在一起:

单 agent 内部(Anthropic 已解决):
  ✅ Session / Harness / Sandbox 解耦
  ✅ brain-hand N:M 关系
  ✅ 凭证隔离(vault proxy + token injection)
  ✅ 故障恢复(wake + provision)
  ✅ harness 可替换(死代码不拖累系统)
agent 之间(Anthropic 没碰):
  ❌ agent 发现——"现在有哪些 agent 可以合作?"
  ❌ task 跨组织传递——"我把这个任务交给你,怎么交?怎么跟踪?"
  ❌ sandbox 跨集群传递——"我在我的环境里建好了,你能接手吗?"
  ❌ 能力变化可见——"我刚接了一个新的数据分析 API,你该知道"

这不是 Anthropic 做错了。Managed Agents 是一个平台内的产品 — — 在一个平台里解耦 brain/hand 已经解决了它要解决的问题。但 agent 经济的走向是跨平台协作的 — — 你的代码 agent 要调我的数据分析 agent,我的要调第三方的报告生成 agent。这个场景需要的不是平台内的接口,是平台间的协议

四、BeeOS 的补位:把 cattle 模式从「单 agent 内部」扩展到「全网络」

BeeOS 做的事不是给已有的 agent 内部架构再加一层包装。它做的事是:把 Anthropic 给单 agent 内部建的 cattle 思维 — — 每个组件可替换、可独立恢复 — — 扩展到 agent 之间的协作层。

通过三种入口分工实现,每种解决一个层级的问题。

OpenAPI:agent 实例级的 cattle 生命周期

Anthropic 的 provision({resources}) 是 sandbox 的标准化生命周期。BeeOS 的 OpenAPI 把同样的逻辑用在了 agent 实例上:

POST /openapi/v1/agents/{agentId}/deploy     → 启动实例
POST /openapi/v1/agents/{agentId}/invoke     → 调用实例
POST /openapi/v1/agents/{agentId}/terminate  → 销毁实例

每个 agent 实例有独立生命周期。挂了就 terminate,重新 deploy。和 Anthropic 的 sandbox 一样——不是宠物,是牛。区别在于 Anthropic 管的是 sandbox 的生和死,BeeOS 管的是 agent 实例的生和死。一个层级往上移了一格。

A2A:补上 agent 发现、task 传递、流式反馈

这是 Anthropic 方案里完全缺失的三块。A2A(Agent-to-Agent)协议提供了三个标准化的跨组织协作接口:

Agent Card — — 每个 agent 的能力自描述。不是硬编码的 URL 列表或中心化注册中心。是 agent 自己发布的、可发现的元数据:

{
  "name": "CodeSandbox",
  "description": "执行代码并返回结果的沙箱 agent",
  "url": "https://a2a.beeos.ai/codesandbox",
  "skills": [
    {"id": "exec_python", "description": "Python 代码执行"},
    {"id": "exec_shell", "description": "Shell 命令执行"}
  ],
  "defaultInputModes": ["text", "application/json"],
  "defaultOutputModes": ["text", "application/json"]
}

JSON-RPC task — — 跨组织任务传递的标准格式。不是 Anthropic 私有的 execute(),而是带着 task ID、结构化输入、预期输出的标准化 RPC:

{
  "jsonrpc": "2.0",
  "method": "tasks/send",
  "params": {
    "id": "task_abc123",
    "message": {
      "role": "user",
      "parts": [
        {"type": "text", "text": "在沙箱中运行 data_analysis.py 并返回输出"}
      ]
    }
  }
}

SSE streaming — — 实时任务进度推送。execute(name, input) → string 是同步的,Orchestrator 在等待结果期间是瞎的。SSE 把每一步进度实时推回:

event: taskArtifactUpdate
data: {"taskId":"task_abc123","artifact":{"parts":[{"type":"text","text":"正在安装 pandas..."}]}}
event: statusUpdate  
data: {"taskId":"task_abc123","status":{"state":"completed"}}

三入口的分工逻辑

OpenAPI ── 管理 agent 实例的「生和死」
  ├── deploy / invoke / terminate
  └── 每个实例是 cattle,挂了就重建
A2A ── 管理 agent 之间的「对话」
  ├── Agent Card:发现("谁存在、能做什么")
  ├── JSON-RPC task:传递("把这个任务交给你")
  └── SSE streaming:反馈("进行到哪一步了")
MCP ── 管理 agent 的「权限边界」
  ├── bak_ 凭证体系:每个 agent 只能碰自己权限内的资源
  └── 和 Anthropic 的 vault proxy 逻辑一致——凭证不进 sandbox

Anthropic 解决了”一个 agent 内部怎么变牛” — — brain、hand、session 各自可替换。BeeOS 解决的是”多个 agent 之间怎么变牛” — — 当你的 Orchestrator 需要调用另一个组织维护的 agent 时,你不需要知道它的容器架构、harness 实现、凭证策略。你只需要它的 Agent Card 和 task 接口。

这就是 Anthropic 自己的设计哲学 — — “对接口有意见,对接口后面的实现没意见” — — 应用到 agent 之间的协作层。

五、最小可复用实现:三个组件跑通全链路

这套逻辑不需要黑科技。三个最小组件就能验证:

TaskOrchestrator        CodeSandbox            SandboxRegistry
    │                       │                       │
    │   A2A task/send       │                       │
    │──────────────────────►│                       │
    │                       │   register sandbox    │
    │                       │──────────────────────►│
    │                       │                       │
    │   SSE artifact        │                       │
    │◄──────────────────────│                       │
    │   SSE statusUpdate    │                       │
    │◄──────────────────────│                       │
  • TaskOrchestrator:通过 A2A 发现下游 agent 的 Agent Card,构造 task 并发送。不关心下游 agent 的内部架构 — — 不管是 Anthropic Managed Agents 驱动的 sandbox 还是自己实现的隔离环境,只要实现了 Agent Card + JSON-RPC task 就能接入。统一接口,内部实现自由。
  • CodeSandbox:一个实现了 A2A 协议的 agent,接收 task、执行代码、SSE 流式返回结果。内部可以用 Anthropic 的 provision({resources}) 造 sandbox,也可以用自己的 Docker/K8s 隔离环境——对外接口不变。
  • SandboxRegistry:记录所有可用 sandbox 的能力和状态。不是 agent 注册中心(Agent Card 已经解决了发现),而是 sandbox 的运行态仓库 — — 哪些在用、哪些 idle 可以复用、哪些需要重建。配合 OpenAPI 的 deploy/terminate 做实例级 cattle 管理。

关键设计原则和对 Anthropic 文章的呼应:

  • 解耦范围 — Anthropic Managed Agents: 单 agent 内部(brain/hand/session) — BeeOS A2A: agent 之间(发现、传递、反馈)
  • 发现机制 — Anthropic Managed Agents: 无(平台内部自管理) — BeeOS A2A: Agent Card
  • 任务传递 — Anthropic Managed Agents: 内部 execute()BeeOS A2A: 跨组织 JSON-RPC task
  • 进度可见 — Anthropic Managed Agents: 同步返回 — BeeOS A2A: SSE streaming
  • 生命周期 — Anthropic Managed Agents: sandbox provision({resources})BeeOS A2A: agent 实例 deploy/invoke/terminate
  • 凭证边界 — Anthropic Managed Agents: vault proxy + token injection — BeeOS A2A: MCP bak_ 权限体系
  • 适用边界 — Anthropic Managed Agents: 一个平台内的 agent — BeeOS A2A: 跨平台、跨组织的 agent 网络

对内实现可以任意替换,对外接口是标准化的。 这句写在 Anthropic 文章里的设计原则,在单 agent 内部是对的,在 agent 之间同样是对的。只是文章没往下推这一步。

结尾

Anthropic 把”操作系统”的类比端到了 agent 架构的台面上 — — 这可能是文章最重要的贡献。OS 通过虚拟化硬件让 read() 不知道下面是磁盘、SSD、还是网络 socket。Managed Agents 通过 execute() 让 harness 不知道 hand 是容器、手机、还是未发明的计算单元。

但这个类比值得继续往下推:操作系统不只是管一个程序的内部组件,它管的是程序之间的通信、资源竞争、权限隔离。IPC、文件描述符传递、信号量 — — 这些不是进程内部的事,是进程之间的事。

agent 的操作系统,同样需要这一层。Anthropic 建了内核,没建 IPC。

三个问题留给你,不需要现在回答,但值得放在团队的架构文档里:

1. 你的 agent 系统里,brain 挂了能不能自动恢复?hand 挂了能不能重建?
   ——Anthropic 的 cattle 模式在你这里是实现的、计划的、还是没想过的?
2. 你的 agent 需要调用另一个团队维护的 agent 时,是硬编码接口还是运行时发现?
   ——硬编码是技术债的起点,不是技术债的终点。
3. 你的团队在跨 agent 协作上的瓶颈,是「模型不够智能」还是「协议没有标准化」?
   ——分不清这两个的人,会一直把协议问题当成模型问题去解决。

如果这三个问题里有两个没有清晰答案,你缺的不是更好的模型。你缺的是 agent 之间的一层标准化接口 — — 和 50 年前 OS 给进程之间加的那层一样基本的东西。

参考与延伸阅读

BeeOS: docs.beeos.ai · openapi.beeos.ai · a2a.beeos.ai · mcp.beeos.ai


메타데이터
post_id
b2a17cb13022
slug
agent-的-大脑-不需要带着-双手-一起死-anthropic-解耦-brain-hand-后启动延迟降-60-但跨组织协作才是更难的问题-b2a17cb13022
url
https://medium.com/@beeos-ai/agent-%E7%9A%84-%E5%A4%A7%E8%84%91-%E4%B8%8D%E9%9C%80%E8%A6%81%E5%B8%A6%E7%9D%80-%E5%8F%8C%E6%89%8B-%E4%B8%80%E8%B5%B7%E6%AD%BB-anthropic-%E8%A7%A3%E8%80%A6-brain-hand-%E5%90%8E%E5%90%AF%E5%8A%A8%E5%BB%B6%E8%BF%9F%E9%99%8D-60-%E4%BD%86%E8%B7%A8%E7%BB%84%E7%BB%87%E5%8D%8F%E4%BD%9C%E6%89%8D%E6%98%AF%E6%9B%B4%E9%9A%BE%E7%9A%84%E9%97%AE%E9%A2%98-b2a17cb13022
canonical_url
https://medium.com/@beeos-ai/agent-%E7%9A%84-%E5%A4%A7%E8%84%91-%E4%B8%8D%E9%9C%80%E8%A6%81%E5%B8%A6%E7%9D%80-%E5%8F%8C%E6%89%8B-%E4%B8%80%E8%B5%B7%E6%AD%BB-anthropic-%E8%A7%A3%E8%80%A6-brain-hand-%E5%90%8E%E5%90%AF%E5%8A%A8%E5%BB%B6%E8%BF%9F%E9%99%8D-60-%E4%BD%86%E8%B7%A8%E7%BB%84%E7%BB%87%E5%8D%8F%E4%BD%9C%E6%89%8D%E6%98%AF%E6%9B%B4%E9%9A%BE%E7%9A%84%E9%97%AE%E9%A2%98-b2a17cb13022
author_url
https://medium.com/@beeos-ai
status
ok
fetched_at
2026-06-17 10:21:25