第六课:并行舰队
什么时候开,怎么编排不浪费

≈20 分钟 · AI 时代战略型工程师 · 课程 0006 · 2026-07-06
前置:第三课·编排大重构 · 第五课·验证 harness · 参考:术语表 · 能力速查表

你已经开过一次舰队了

先明确起点:第三课那条 KMP 重构流水线,你已经亲手设计并跑通了一条 30-40 个 Agent 的全自动 Workflow——10 个单元全部 MERGED、零 BLOCKED。所以这一课不教"怎么开",教的是两件你还缺的东西:

1
判断框架:什么任务值得开舰队、什么任务开了就是烧钱——上次是"这个任务显然得拆",下次要能对任何任务在 30 秒内做出判断。
2
官方原语与质量模式:Dynamic Workflows 已 GA(Claude Code v2.1.154+,2026-07)。你上次手搓的关卡、并行、互斥,官方现在都有一等公民的原语;社区还沉淀了一批"让舰队不止多、而且对"的质量模式。

先判断:该不该开舰队(30 秒三问)

Dynamic Workflows 很贵——Anthropic 官方工程博客给的量化:multi-agent 系统消耗约为普通 chat 的 ~15 倍 token。所以判断先于技巧。对任何任务问三个问题:

Too big? 单个上下文装不下(读完素材就没余量推理了)——第三课的三堵墙之一。
Too parallel? 同一个操作 × 几十上百个条目(逐文件审计、逐组件迁移、逐条目核查)。
Too prone to self-grading? 自己改自己评不可信,需要独立的对抗验证(review、审计、事实核查)。
三者皆否 → 单 agent 是对的工具。官方反向判据同样明确:一个会话就能协调、不需要多遍交叉验证的任务,不用 workflow;中途需要你拍板签核的流程也不适合——run 一旦开跑不接受用户输入(只有权限提示能暂停),要签核就拆成多个 workflow,把人工把门放在 run 与 run 之间。你 KMP 流水线"关 1 冻结方案后才放行"正是这个形态。

成本判断一句话:舰队只配高价值任务——答案的价值得盖过 ~15× 的 token 账单。官方的护栏也印证了这一点:最多 16 个并发 agent、单次 run 上限 1000 个。日常小修小补开舰队,等于打车去隔壁便利店。

开舰队的三种姿势

姿势怎么触发作用范围
ultracode 关键词prompt 里任意位置写 ultracode(UI 会高亮;Option+W 可取消)只对这一条任务强制走 workflow
自然语言直接说 "use a workflow" / "用 workflow 跑"同上,等价写法
session 级开关/effort ultracode = xhigh 推理 + 自动编排,Claude 自己判断每个任务是否开舰队,一个请求可能连开几个(理解→修改→验证)整个 session;结束即重置。官方建议日常用 /effort high

冷知识:触发词原本叫 workflow,v2.1.160(2026-06)改名 ultracode——旧词太容易在正常对话里误触。注意和 ultrathink 区分:ultrathink 是单条消息推理加深,不开 agent;ultracode 是开舰队。

编排脚本的骨架:四个原语 + 一条铁律

workflow 的本质是把编排计划从模型的逐轮判断移进代码——循环、分支、中间结果都存在脚本变量里,不占主上下文,官方的说法是 "routing the fleet is free"。官方文档的最小示例:

export const meta = {
  name: 'audit-routes',
  description: 'Audit every route handler for missing auth checks',
}
// 侦察:先拿到工作清单(schema 强制结构化输出,不匹配自动重试)
const found = await agent('List every .ts file under src/routes/.', {
  schema: { type:'object', required:['files'],
            properties:{ files:{ type:'array', items:{ type:'string' } } } },
})
// 逐文件流水线处理
const audits = await pipeline(found.files, file =>
  agent(`Audit ${file} for missing authentication checks.`, { label:file }),
)
return audits.filter(Boolean)
原语语义关键点
agent(prompt, opts)派一个子 agentopts:schema(结构化输出)/ label / phase / model(按阶段换模型)/ isolation:'worktree'(并行写同一批文件时才用)
pipeline(items, ...stages)每个条目独立流过所有阶段,无屏障条目 A 在第 3 段时条目 B 可以还在第 1 段——不空等,默认首选
parallel(thunks)并发执行 + 屏障(全部完成才返回)失败的解析为 null 不抛异常,记得 .filter(Boolean)
phase(title) / log(msg)进度分组 / 叙述行对应 /workflows 面板里的分组和进度

最重要的设计决策就一个:pipeline 还是 parallel。默认 pipeline;只有当下一步真的需要全部上游结果(全量去重、总数为零就早退、互相比较排序)时才用 parallel 加屏障。屏障的代价是真实的:5 个 finder 里最慢的跑 3 倍时长,其余 4 个就白等 2/3 的时间。

一条铁律:脚本必须可重放(这是 resume 的地基)

脚本里调 Date.now()Math.random()、无参 new Date()直接抛异常。这不是缺陷,是"确定性编排"的具体落点:runtime 对每次 agent() 调用记 journal,暂停/中断后 resume 时,已完成的 agent 直接返回缓存结果,只有剩余部分真跑——脚本必须可重放才能做到。时间戳要用就从 args 传入。限制:resume 仅限同一 session;退出 Claude Code 后只能从头跑。

质量模式:让舰队不止"多",而且"对"

这是官方明确的立场:workflow 的价值不是"更多 agent",而是可复现的质量结构。Anthropic 工程博客《How we built our multi-agent research system》给了三个应该背下来的数字:

1
orchestrator-worker 舰队(Opus 领队 + Sonnet workers)在内部 research 评测上比单个 Opus 高 90.2%
2
token 用量解释了约 80% 的性能方差——工具调用次数只占 ~10%、模型选择 ~5%。舰队的第一性原理:把更多 token 花在对的结构上,不是 agent 头数。
3
代价是 ~15× token——所以只配高价值任务(大重构、审计、深度调研这个量级)。

四个可直接抄的质量模式(内置的 /deep-research 就是它们的产品化版本——每条结论派 3 个 skeptic 投票,没通过交叉验证的标 unverified):

模式结构治什么病
对抗验证
adversarial verify
每条发现派 N 个独立"反驳者"专门证伪,多数存活才保留貌似合理但错的产出(自产自评必然放过它)
多视角验证
diverse lenses
N 个 verifier 各持一个视角(正确性/安全/性能/可复现),而非 N 个同质副本单一视角的盲区——冗余抓不到的失效模式
评审团
judge panel
N 个不同角度的方案 + 并行评审打分,从赢家合成、嫁接亚军优点;进阶用两两对比而非绝对打分解空间宽的设计题,单方案迭代容易局部最优
挖到干涸
loop-until-dry
发现类任务持续派 finder,连续 K 轮无新发现才停;去重要对"见过的一切""找 10 个就收工"式的假完整——尾部问题漏网

省钱技巧(官方明说):agent() 可按阶段传 model——不需要旗舰的阶段用轻量模型。典型分层:强模型规划与评审、轻模型批量执行机械步骤。再配预算硬顶:prompt 尾部加 +200k 这类 token 目标,打到即停(该语法官方文档着墨少,以实测为准)。

运维与沉淀:/workflows 面板

按键作用
↑↓ / Enter选择 run / 下钻到单个 agent(看 prompt、最近工具调用、结果)
p / x / r暂停或恢复 / 停掉单个 agent 或整个 run / 重启 agent
f按状态过滤(只看失败的)
s存成斜杠命令:项目级存 .claude/workflows/(团队共享),个人级存 ~/.claude/workflows/,之后 /<name> 直接复用,支持传参

两个容易踩的运维点:① workflow 派生的子 agent 一律以 acceptEdits 跑(文件编辑自动放行),但 shell/网络仍走 allowlist——长任务开跑前先补 allowlist 是官方明说的最佳实践,否则半夜卡在权限提示上;② 每次 run 的脚本会落盘到 session 目录,可读、可 diff、可手改后让 Claude 重新发起——你上次审 refactor-workflow.mjs 的技能直接迁移过来。

Codex 侧对照:舰队在云上

Claude Code:编排是产品内一等公民
脚本可读、可存为斜杠命令、可 resume、16 并发/1000 上限、/workflows 面板实时观测。适合大规模、确定性、可审查的本地编排——你的大重构、全库审计选这边。
Codex:本地隐式小队 + 云端并行
本地 subagents 已 stable 但是隐式编排:agents.max_threads 默认 6 并发、嵌套深度默认 1 层,没有用户可读的编排脚本(experimental 的 spawn_agents_on_csv 算半个:CSV 每行起一个 worker,支持列名占位符);要确定性编排得把 Codex CLI 暴露成 MCP server、用 Agents SDK 在外面写。大规模并行走 Codex Cloud:并行任务队列(各自 sandbox + 独立 git 状态)+ best-of-N——本机实测 flag 是 codex cloud exec --attempts N,再 cloud diff --attempt 挑候选(CLI 侧仍标 EXPERIMENTAL)。

一句话记分工:Claude Code 是"脚本在产品里",Codex 是"编排在 SDK 里/云上"。本地开舰队 → Claude Code Dynamic Workflows;想要"下班后云端替你并行试几个方案再挑" → Codex Cloud / best-of-N(第七课云端异步细讲)。

落地任务:把手搓经验换成官方原语(约 40 分钟)

三步,用真实任务做

复盘对照(15 分钟):翻出你的 refactor-workflow.mjs,逐段对照官方原语——你手写的"关卡"= phase() + parallel 屏障;"并行改造互不干扰"= isolation:'worktree';"对抗 review 关"= adversarial verify 模式。找出至少一处官方原语能替你省掉的手写复杂度(提示:看你当时怎么处理失败单元和中间结果传递)。
实跑一条小舰队(20 分钟):挑一个真实的只读审计任务实跑,在 /workflows 面板观察 phase / agent / token,跑完按 s 存成斜杠命令。话术模板:
ultracode: 审计 <你的模块> 下所有 <目标>(如:日志 tag 不符合分层规范的文件),
每个文件一个 agent 并行找;对每条发现派一个独立 agent 专门反驳,
只报告存活的发现,按严重度排序。
预算纪律(5 分钟):给上面的 run 记下实际 token 消耗,除以覆盖的文件数,得到你自己的"每文件审计单价"——下次开舰队前先小切片估算,或直接在 prompt 尾加 +200k 设硬顶。

把 ① 的对照发现和 ② 的 token 单价发回给我——这两个数据决定第七课(云端异步)从哪里接。

自测(先回忆,再点选)

1. 一个大任务摆在面前,最能说明"该开 workflow"的信号是?

文件多、想快、跨栈都不构成充分理由——判据是三问:too big(单 context 装不下)/ too parallel(同一步 × 大量条目)/ self-grading(自产自评不可信,需独立验证)。官方反向判据:一个会话能协调、不需要多遍交叉验证的,不用 workflow。

2. 编排脚本里,pipeline 和 parallel 的正确取舍是?

parallel 是屏障——所有任务完成才返回,最慢的 agent 决定所有人的等待时间;pipeline 无屏障,条目 A 在第 3 段时条目 B 还能在第 1 段。只有下一步真的需要"全部上游结果"(全量去重、总数早退、互相比较)时,屏障才值回票价。

3. Anthropic 官方研究中,解释 multi-agent 性能方差最大的单一因素是?

token 用量解释 ~80% 方差,工具调用次数 ~10%,模型选择 ~5%。所以舰队的第一性原理是"把更多 token 花在对的结构上"——不是 agent 头数。同时 multi-agent ≈ 15× chat 的 token,只配高价值任务。

4. 流程中间必须由你拍板(如方案冻结)的大改造,正确的编排是?

workflow run 中不接受用户输入(只有权限提示能暂停),中途签核的流程天然不适合塞进一个 run——官方建议拆成多个 workflow,人工把门放在 run 与 run 之间。这正是你 KMP 五关流水线"关 1 你拍板后才放行"的做法:直觉先于官方文档一步。

首选阅读(一篇就够)

Anthropic — How we built our multi-agent research system(约 20 分钟)。90.2%、80%、15× 三个数字的出处,也是理解"为什么舰队的本质是 token 结构而不是 agent 数量"的一手材料——今天的 /deep-research 和 Dynamic Workflows 都是这篇文章思路的产品化。

引用文献

🧠背诵区

点卡片翻面。记的是能用的判断核心,不是定义。

闪卡 1 / 判断
一个任务丢过来,判断该不该开并行舰队的三问是什么?反向判据呢?
翻面
三问:① too big(单上下文装不下)② too parallel(同一步 × 大量条目)③ self-grading(自产自评不可信,需独立验证)。三者皆否 → 单 agent。反向判据:单会话能协调的不开;中途要人拍板的不开(run 中无法输入,拆成多个 workflow 把签核放中间)。
闪卡 2 / 编排
写编排脚本时,pipeline 和 parallel 怎么选?屏障的代价是什么?
翻面
默认 pipeline(无屏障,条目独立流过所有阶段,不空等);只有下一步需要全量上游结果(全量去重 / 总数早退 / 互相比较)才用 parallel。屏障代价:最慢的 agent 决定所有人的等待时间。
闪卡 3 / 第一性原理
多 agent 为什么强?官方研究的第一性原理是什么(带两个数字)?
翻面
不是 agent 头数,是把更多 token 花在对的结构上——token 用量解释约 80% 性能方差;orchestrator-worker 舰队比单强模型高 90.2%。代价 ~15× token,所以只配高价值任务,且"对的结构"= 对抗验证 / 多视角 / 评审团这些质量模式。
⏱ 间隔复习:明天扫一遍,3 天后再来。交织:翻一张第三课「编排大重构」的旧卡——你手搓的五关流水线,正是这课官方原语(phase + 屏障 + worktree 隔离 + 对抗 review)的手工版。
🗣复述区

能讲清楚,才是真懂——比能回忆高一层。

复述任务
用一段话讲清楚:下次再遇到 256 文件级的大改造,你为什么会选 Dynamic Workflows 而不是手搓脚本或单会话?它贵在哪、值在哪、怎么保证产出不是"貌似合理但错"?
参考表述
单会话过不了三问——上下文装不下、同一步要乘几百个文件、自己改自己评不可信;而手搓脚本要自己实现关卡、并发、失败处理和断点续跑,这些 Dynamic Workflows 已经是产品内一等公民:pipeline/parallel 原语、worktree 隔离、16 并发护栏、同 session resume、跑完还能存成斜杠命令复用。它贵——multi-agent 约是普通对话 15 倍 token——但官方研究表明 token 用量解释了约 80% 的性能方差,舰队的本质是把更多 token 花在对的结构上,对大改造这种高价值任务是划算的。"对的结构"就是质量模式:发现类工作挖到干涸才停,每条产出派独立反驳者对抗验证、多视角评审,杀掉貌似合理但错的部分;需要我拍板的方案冻结环节则拆在两个 workflow 之间,人工把门。

讲不顺的地方就是还没真懂的地方 —— 发给我,我帮你补上。