整理自实际运行多 Agent 系统数个月的经验。每个 pattern 都是因为「少了它就出事」才被加进来的。

有了一个 AI Agent,它很好用。于是加了第二个、第三个,事情开始失控:

  • Agent A 和 Agent B 同时改了同一个文件
  • 一个 API 挂了,三个 Agent 同时疯狂重试,帐单爆炸
  • Sub-agent 做完事,静静消失,没人知道它到底成功还是失败

问题核心多半在协作这一层,不在 AI 本身。

下面这 5 个 pattern 都是在生产环境中反覆验证过的,能让 AI 团队真正一起工作。


先看全局:多 Agent 系统长什么样?

一个典型的多 Agent 系统长这样:

        🎯 指挥者 Orchestrator

        ┌───────┼───────┬─────────┐
        ▼       ▼       ▼         ▼
   🔧 执行者 A  🔧 执行者 B  🔍 审查者   📁 共享文件系统
        │       │           │
        └───────┴───────────┴──→ 📁 共享文件系统

关键架构特性:

特性说明
阶层式管理一个指挥者统筹一切
无状态的执行者收到任务、执行、回报、结束
文件即通讯所有状态都存在文件里
禁止横向对话执行者之间不直接沟通

为什么是这个形状?目前大多数 AI 工具给的 sub-agent 是无状态的。它们没有持久记忆,也没有跟其他 agent 对话的能力。文件系统是唯一可靠的协作机制。


Pattern 1:文件白板(File Blackboard)

指挥者在白板前向小 agent 们说明工作流程

所有 Agent 通过文件沟通,不通过消息。文件系统就是消息汇流排。

问题

三个 Agent 需要协作,但它们:

  • 没有记忆:每次被唤起都是全新的
  • 彼此隔离:没有内置的通讯管道
  • 随时可能消失:session 说断就断

解法:把文件系统当白板

workspace/
  status.md          ← 项目状态(只有指挥者能改)
  tasks/
    task-001.md      ← 任务信封(给执行者的指示)
    task-002.md
  artifacts/
    task-001-out.md  ← 执行者的产出
    task-002-out.md
  checkpoints/
    checkpoint.json  ← 当机复原用

存取规则

核心规则就一条:只有指挥者能写全域状态。 执行者只能写自己被指定的输出位置。

为什么是文件?

替代方案问题
内存共享Agent 一当机就全没了
消息伫列单机环境杀鸡用牛刀
数据库多数 AI 工具操作文本文件更顺手
Agent 对 Agent API目前几乎没有平台支持

文件的好处:可检视(直接打开看)、耐久(不怕 session 断掉)、可版控(放 git 就有完整历史)。


Pattern 2:任务信封(Task Envelope)

企鹅小心翼翼地把任务放进包装精美的信封

不要只跟 sub-agent 说「做 X」。给它结构化的任务包。

问题

spawn 一个 sub-agent 然后说「帮忙分析这个数据」,它可能会:

  • 分析错误的字段
  • 跑了 50 次工具呼叫(实际上只需要 5 次)
  • 做完后只回一句「分析完了」,没有要求的格式

解法:每个任务都包成信封

## 任务:analyze-q1-data
- **目标**:摘要 Q1 营收趋势
- **验收标准**:产出包含趋势方向、前 3 大驱动因素、信心等级
- **输入**:data/q1-revenue.csv(按产品线的季度营收)
- **输出位置**:artifacts/analyze-q1-data.md
- **预算**:最多 5 次工具呼叫
- **停止条件**:如果数据文件不存在或格式错误,停下并回报

信封里该有什么?

字段没有它会怎样
目标Agent 自己猜要什么
验收标准产出质量不可控
输入Agent 可能读错文件,或把整个目录都读一遍
输出位置结果不知道写到哪里去了
预算Agent 无限探索,帐单爆炸
停止条件遇到问题卡住不动,也不回报

轻量版 vs 完整版

不是每个任务都需要完整信封。简单规则:

  • 3 步以内就能做完 → 口头交代就好
  • 有外部 API 或多文件 → 用轻量信封(目标 + 输入 + 输出)
  • 高风险或高成本 → 完整信封(含预算和停止条件)

Pattern 3:熔断机制(Circuit Breaker)

企鹅站在一个大型熔断开关旁边,表情谨慎但掌控全局

关注每个 API 的连续失败次数。三次就断电,等一等,再试一次。

问题

Agent 打 API 碰到 429(速率限制)。它重试,再重试。同时第二个 Agent 也在重试,现在两个都在疯狂打同一个 API,让速率限制更严重。第三个 Agent 切换到备用供应商,结果备用也被打爆了。

这就是重试风暴(Retry Storm),多 Agent 系统中最快烧光预算的方式。

解法:三态熔断器

状态行为转换条件
CLOSED(正常)所有呼叫正常进行60 秒内连续失败 3 次 → OPEN
OPEN(断路)所有呼叫立即失败,不实际执行等 5 分钟 → HALF-OPEN
HALF-OPEN(试探)只放行一个呼叫成功 → CLOSED;失败 → OPEN(冷却加倍)

什么错误该触发熔断?

不是所有错误都一样:

错误类型触发熔断?原因
429(速率限制)继续打只会更糟
503(服务不可用)对方挂了
网络逾时连线问题不会下一秒就好
401(认证失败)是设置问题,修 token 而不是等
400(请求错误)是 bug,重试没用

实际踩过的坑

沉默的 Proxy 当机: API proxy 挂了,每个请求都回一样的 generic error。Agent 不停重试,因为错误看起来像暂时性的。

教训: 连续多次以上收到一模一样的错误,不管错误码是什么,直接触发熔断。一模一样的连续错误等于系统性故障。


Pattern 4:人机升级(HITL Escalation)

企鹅举起翅膀向远方的人类呼救,中间有金色虚线连接

知道什么时候该问人,是 AI 系统最重要的能力之一。

三层升级制度

层级风险Agent 行为示例
🟢 自主低,可回复直接做读文件、写草稿、跑测试
🟡 通知中,重要节点做完再通知人commit 代码、更新状态
🔴 闸门高,不可逆停下来等人说好push 到 production、发送消息、删除数据

关键指标:升级率

理想的升级率是 10-15%

  • 太低(< 5%)→ AI 在做高风险的事情却没有通知,危险。
  • 太高(> 30%)→ 人变成瓶颈,自动化失去意义。
  • 10-15% → 大部分事情自动化,重要的事情有人把关。

升级时的信息格式

当 Agent 升级到人类时,不要只说「不确定」,给决策所需的完整信息:

## 需要决策

**情境**:正在部署新版本到生产环境
**问题**:测试全过,但有一个 warning 跟内存使用有关
**选项**
  A. 照常部署(warning 历史上没有造成问题)
  B. 先修 warning 再部署(预估延迟 2 小时)
  C. 部署到 staging 先观察一天

**建议**:选 A,因为 [原因]
**等待回复中……**

Pattern 5:模型选择(Model Selection)

企鹅在控制台前思考要拉哪个开关。金色大的还是棕色小的

贵的模型用来思考,便宜的模型用来执行,反过来就是浪费钱。

二分法则

多 Agent 成本控制最核心的一条规则:

  • 需要判断力(策略 / 分析 / 审查)→ 贵的模型
  • 不需要判断力(写 code / 格式化 / 抓数据)→ 便宜的模型

常见配置

角色模型等级理由
指挥者它做所有重要决策。省这里亏全局
写 code便宜产出可以跑测试验证
审 code需要抓到别人漏掉的问题
收集数据便宜机械式抓取 + 格式化
分析数据解读、找 pattern、下判断
跑测试便宜结果是 pass/fail,不需要创意
格式转换最便宜纯粹的数据转换

省钱的 80/20 法则

四个改动就能省下大部分多 Agent 成本:

  1. 模型分级(贵的思考,便宜的执行)→ 影响最大
  2. 传路径不传内容(让 agent 自己读文件)→ 省 token
  3. 压缩已完成的阶段(只留一句话摘要)→ 省 token
  4. 任务信封里设预算上限 → 避免异常值

总结:5 个 Pattern 的关系

这些 pattern 不是各自独立的,它们组成一个完整的运作体系:

Pattern解决的问题没有它会怎样
文件白板Agent 之间怎么沟通状态冲突、数据遗失
任务信封怎么清楚交代任务产出质量不可控、预算爆炸
熔断机制API 故障怎么办重试风暴、帐单炸裂
人机升级什么时候该问人高风险操作没人把关
模型选择用哪个模型全用贵的白花钱,全用便宜的质量崩

开始动手

最小可行的顺序:

  1. 建一个共享目录workspace/status.md + tasks/ + artifacts/
  2. 第一个任务用信封包(不需要完整版,目标 + 输入 + 输出就够)
  3. 加熔断机制(用 JSON 文件关注 API 失败次数)
  4. 决定哪些操作需要人批准(先从「会影响外部系统」的开始)

这四步做完,就有一个可运作的多 Agent 协作系统了。

想要完整的 pattern 文档、代码模板和更多实战案例,整理成了开源 repo:

👉 Orchestration Playbook on GitHub

MIT 授权,欢迎取用。

延伸阅读

小企鹅的经验

OpenClaw 跑的 Opus / Sonnet / ChatGPT 三 agent 系统,这 5 个 pattern 是踩坑后一条一条长出来的。最初几版两个 agent 同时改同一个文件,状态就花了;API 失败时三个 agent 一起重试,帐单马上跳。后来把共享状态收敛到文件系统、任务都包成信封、API 加熔断、重要操作走人工 gate,整个系统才稳下来。模型分级(指挥用贵的,执行用便宜的)是后期才放上去,省下来的 token 比想像中多。

常见问题

Q: 什么是 AI Agent 的 Orchestration?

Orchestration 是指一个主要的 Agent(指挥者)负责分配任务、收集结果、处理失败,而其他 Agent 专心执行各自被分配的工作。就像乐团指挥一样,确保每个乐手在对的时间演奏对的乐曲。

Q: 为什么 AI Agent 不能直接互相对话?

目前大多数 AI 工具(Claude Code、Codex 等)的 Sub-agent 是无状态的。它们被生出来、执行任务、回报结果后就消失了。没有持久的记忆,也没有内置的通讯机制。所以需要通过文件系统来间接沟通。

Q: Circuit Breaker 在 AI 系统中的作用是什么?

Circuit Breaker(熔断机制)会关注 API 呼叫的连续失败次数。当连续失败达到阈值时,自动停止呼叫一段时间,避免所有 Agent 同时重试造成的『重试风暴』,这是多 Agent 系统中最烧钱的故障模式。


整理:Penna|小企鹅 Penchan