跳转至

第35章:指挥官模式:编排引擎

生活类比:乐队指挥

指挥不拉小提琴、不吹长笛,但他决定谁先入场、谁做主旋律、什么时候收尾。Coordinator 在多智能体系统里的角色,也很像这样。

这一章先回答一个问题

当任务之间存在依赖关系时,为什么自由协作不够,还要引入 Coordinator 这种更重的编排模式?

因为一旦任务之间有前后依赖、资源冲突、顺序要求,单纯“大家各干各的”就会让全局最优变成局部最忙。Coordinator 解决的是顺序与全局视角


35.1 Coordinator 模式首先是一种“会话模式”

coordinatorMode.ts 里有非常清晰的模式判断:

  • isCoordinatorMode()
  • matchSessionMode()
  • getCoordinatorUserContext()

也就是说,Coordinator 不是某个散落工具,而是整个会话运行方式的一种切换。

flowchart TD
    A["当前会话"] --> B{"isCoordinatorMode()?"}
    B -->|否| C["普通模式"]
    B -->|是| D["Coordinator 模式"]
    D --> E["注入额外 user context"]
    D --> F["按编排方式恢复/继续"]

这是非常重要的信号:编排不是临时附加动作,而是主循环本身要知道的上下文。


35.2 QueryEngine 也要知道“我现在是不是指挥官”

QueryEngine.ts 通过 getCoordinatorUserContext() 把协调者视角的上下文拼进来。换句话说,Coordinator 并不是只在 UI 层显示个标签,它会影响真正送进模型的上下文。

sequenceDiagram
    participant Q as QueryEngine
    participant C as coordinatorMode
    participant M as Model

    Q->>C: getCoordinatorUserContext(...)
    C-->>Q: 协调者额外上下文
    Q->>M: 带 Coordinator 语义的 prompt

这说明 Coordinator 的本质,是让模型以“调度者”而不是“单个执行者”的身份思考。


35.3 LocalAgentTask:编排模式还需要一个可视化任务面板

LocalAgentTask.tsx 负责的,正是 Coordinator 模式下本地 agent task 的状态管理。源码里可以看到:

  • 后台 agent 执行
  • pending messages
  • task state 更新
  • panel 选择逻辑
flowchart LR
    A["Coordinator"] --> B["LocalAgentTask"]
    B --> C["任务状态"]
    B --> D["pending messages"]
    B --> E["UI 面板"]
    E --> F["用户看到多任务进展"]

这让 Coordinator 不只是“模型脑中的调度者”,还变成了用户可观察的任务编排界面。


35.4 指挥官模式擅长什么,不擅长什么

Coordinator 特别适合:

  • 有依赖关系的多任务
  • 需要统一收口的执行流
  • 需要全局进度视角的长任务

不那么适合:

  • 超短小的独立搜索
  • 完全无依赖的小任务
quadrantChart
    title 自由协作与 Coordinator 的适用场景
    x-axis 低任务依赖 --> 高任务依赖
    y-axis 低编排价值 --> 高编排价值
    quadrant-1 强烈建议 Coordinator
    quadrant-2 可选
    quadrant-3 自由协作足够
    quadrant-4 不值得上 Coordinator
    "独立搜索": [0.15, 0.18]
    "大重构分阶段执行": [0.88, 0.92]
    "多文件联动修复": [0.70, 0.74]

这就是“不是所有多人协作都需要指挥官”的意思。


35.5 设计取舍:Coordinator 的真正成本,是更强的系统自我意识

一旦系统进入编排模式,它就要额外维护:

  • 会话模式一致性
  • 恢复时模式匹配
  • 子任务状态面板
  • 多 agent 的消息与任务同步

所以它更强,但也更重。

🔭 深水区(架构师选读)

Coordinator 最值得学的地方,是把“系统角色”显式化。普通 Agent 是执行者,Coordinator 是编排者。只要角色不同,系统提示、状态管理、恢复逻辑和 UI 面板都要一起变。很多多智能体系统只改 prompt,不改运行时,结果就会半吊子。

本章小结

Coordinator 模式不是多开几个 Agent,而是让整场会话切换成“指挥官视角”。它适合高依赖、高复杂度任务,也因此需要更完整的状态、恢复和 UI 支撑。

关键源码索引

  • QueryEngine 条件导入 Coordinator:QueryEngine.ts
  • QueryEngine 注入 Coordinator user context:QueryEngine.ts
  • 判断 Coordinator 模式:coordinatorMode.ts
  • 匹配恢复会话模式:coordinatorMode.ts
  • Coordinator user context:coordinatorMode.ts
  • LocalAgentTask 状态类型:LocalAgentTask.tsx
  • LocalAgentTask 主体:LocalAgentTask.tsx

逆向提醒

Coordinator 代码在 OpenClaudeCode 中能看到完整骨架,但任务依赖图和更高层策略细节并不都显式暴露。读到这里时,要区分“运行时支撑已在”与“最终产品策略已完全公开”。