跳转到内容

编排模式参考与反模式防御

编排模式参考与反模式防御

学习目标

  • 理解 5 种已批准编排模式的适用场景和成本
  • 识别 4 种编排反模式并知道替代方案
  • 掌握编排决策流程
  • 理解 Claude Code 平台如何强制执行部分反模式预防

前置知识

本章涉及多 Agent 路由与编排模式的通用原理,建议先阅读:

下文直接聚焦 agent-skills 的编排模式目录定义。

项目实践

治理规则

agent-skills 的编排模式目录有一条核心治理规则:

用户(或斜杠命令)是编排者。Persona 不调用其他 Persona。

这条规则在 AGENTS.mdagents/README.mdreferences/orchestration-patterns.md 中反复出现,是整个编排设计的基石。

五种已批准的编排模式

#模式结构成本适用场景示例
1直接调用user → persona → report → user1 次往返单视角单工件”审查这个 PR” → code-reviewer
2单人斜杠命令/cmd → persona(with skill) → report同直接调用重复工作流/review → code-reviewer with review skill
3平行扇出 + 合并/cmd → N personas → merge → verdictN 并行上下文 + 1 合并独立调查/ship → 3 角色并行
4用户驱动的顺序流水线user runs /spec → /plan → /build每步 1 上下文有依赖关系,需人工判断完整生命周期
5研究隔离main → research sub-agent → digest → main1 隔离上下文大量阅读不污染主上下文”查找所有废弃 API 调用点”

验证清单(采用模式 3 前):

  • 可以同时运行所有子 Agent 而没有顺序问题?
  • 每个角色产生的是不同类型的发现,而非同一发现的不同角度?
  • 合并步骤能装入主 Agent 的剩余上下文?
  • 用户的等待时间足够长以至于并行性实际可感知?

如果任一回答是”否”,回退到直接调用或单人命令。

四种反模式

反模式结构为什么失败替代方案
A: 路由角色work → router → persona → router(paraphrase) → user纯路由无领域价值,两次转述导致信息丢失 + 2× token完善斜杠命令和意图映射
B: 角色调用角色code-reviewer 内部调用 security-auditor破坏单一视角,转述丢失上下文在报告中推荐后续审计
C: 顺序编排器复述自动按序调用 /spec → /plan → /build丢失人工检查点,每步转述导致漂移,token 翻倍保持用户为编排者
D: 深层角色树/ship → pre-ship → quality → code-reviewer每层增加延迟无决策价值,调试变多层调查编排深度最多 1 层

决策流程

工作是否是一个视角对一个工件?
├── 是 → 直接调用。停止。
└── 否 → 同样的组合会重复吗?
├── 否 → 临时直接调用。停止。
└── 是 → 子任务是否独立?
├── 否 → 用户驱动的顺序斜杠命令(模式 4)。
└── 是 → 平行扇出 + 合并(模式 3)。
用验证清单检查。
如果任何检查失败 → 回退到单人命令(模式 2)。

平台强制约束

Claude Code 平台通过架构设计自动阻止了部分反模式:

约束阻止的反模式
”Subagent 不能生成 Subagent”B(角色调用角色)、D(深层角色树)
“Team 不能嵌套”D(深层角色树)在 Agent Teams 层面

意义:即使 contributors 不小心构建了反模式,它们也会因为平台约束而无法加载。这不是偶然——agent-skills 的编排设计有意利用了平台的硬约束来防止常见的架构错误。

Agent Teams 实战案例:竞态假设调试

agent-skills 在 references/orchestration-patterns.md 中提供了一个 Agent Teams 的完整实战案例:

场景:结账偶尔挂起约 30 秒,每 50 次会话约 1 次,无日志错误。

为什么这不是 /ship 的任务

/ship(子 Agent)Agent Teams
子 Agent 看到同一个 diff,不同视角共享任务列表,彼此的消息
输出三份独立报告 → 一个合并对抗性辩论 → 共识根因
适用时机对已知工件的判决在假设之间找到工件

/ship 是判决;Agent Teams 是调查。

触发提示

用户报告结账在上周发布后偶尔挂起约 30 秒。日志中无错误。
创建一个 Agent Teams 来调试这个,使用竞争假设。
生成三个队友,使用已有的角色类型:
- code-reviewer — 调查结账代码路径中的竞态和阻塞调用
- security-auditor — 调查最近的 auth 检查和同步网络调用
- test-engineer — 提出区分假设的测试并检查覆盖缺口
让他们直接互相发消息挑战彼此的理论。

新模式的准入标准

向编排目录添加新模式的门槛很高:

  1. 至少在真实工作中使用过两次
  2. 能指出仓库中证明它的具体工件
  3. 能解释为什么现有模式不够用
  4. 能描述它的反模式阴影(人们会错误地构建什么)

过早的目录条目会成为没人遵循的理想化文档。

问题与规避

陷阱表现对策
创建路由角色”让一个角色决定用什么角色”路由是斜杠命令的工作,不是角色
模式 3 验证不通过却强行使用子任务有顺序依赖回退到模式 4(用户驱动的流水线)
Agent Teams 用于常规审查成本远高于必要常规审查用 /ship(子 Agent)
新准入标准不满足就添加文档与实际行为脱节先在实践中验证至少两次

设计取舍

为什么将用户定位为编排者,而不是自动化编排?

自动化的 LLM”生命周期编排器”会:(a) 在步骤间丢失细微差别(需要总结交接),(b) 跳过捕获方向错误的人工检查点,(c) 通过转述使 token 成本翻倍。用户驱动的编排保留了人类在关键节点的判断力,同时消除了额外编排层的 token 开销。

为什么只批准 5 种模式?

限制模式数量防止了编排复杂度的无限增长。如果每次遇到新的编排需求都添加新模式,目录会变成一份没人遵循的理想化文档。5 种模式覆盖了 agent-skills 遇到的所有实际编排场景。

参考来源

  • 源码验证: references/orchestration-patterns.md — 完整的编排模式目录(~370 行)
  • 源码验证: agents/README.md — 角色关系和决策矩阵
  • 源码验证: AGENTS.md — 编排规则的定义