如何精通 Claude Code 中的动态工作流:Anthropic 工程师实际使用的 6 种模式与 14 个步骤

@0xCodez
英语1个月前 · 2026年6月03日
1.5M
975
133
31
3.8K

TL;DR

本指南深入探讨了 Claude Code 中的动态工作流,详细介绍了扇出(fan-out)和对抗式验证等 6 种架构模式,旨在解决复杂 AI 编程任务中 Agent 的惰性及目标偏离问题。

大多数 Claude Code 用户仍然手动编写工作流程。他们串联提示词,复制输出,粘贴到下一个提示词中,修复错误,然后重复。

10 个构建者中有 9 个从未尝试过动态工作流程,即使它们已经在两周前发布。

他们编写 50 个提示词,而一个工作流程就能完成。以下是 14 步路线图以及 Anthropic 自己的工程师实际使用的 6 种模式——用于迁移、研究、排序、根因分析、分类和评估。

关注我的 Substack 以获取最新 AI 前沿资讯:

movez.substack.com

动态工作流程于 2026 年 5 月 28 日在 Claude Code 中发布。默认的 Claude Code 框架是为编码而构建的——这对于大多数编码任务来说效果很好。但对于某些类型的工作,单个上下文窗口开始失效:长时间运行、大规模并行、高度结构化或对抗性的任务。

对于这些情况,Anthropic 过去常常自己构建自定义框架(研究、代码审查、Agent 团队)。借助动态工作流程,Claude 会即时为你编写该框架,根据你的任务用 JavaScript 定制。

Codez - inline image

14 步。6 种模式。一个工作流程,而非五十个提示词。

第一部分 · 心智模型

01. 工作流程是 Claude 编写的框架。

默认的 Claude Code 框架让 Claude 在同一个上下文窗口中进行规划和执行。对于大多数编码工作来说,这很棒。但对于长时间运行、并行或对抗性的工作,它会失效。

动态工作流程是 Claude 为任务编写自己的自定义框架——一个包含几个特殊函数的 JavaScript 文件,用于生成和协调子 Agent,再加上标准的 JavaScript(Math、JSON、Array)来处理它们之间流动的数据。

默认框架无法提供的三样东西:

  • 每个 Agent 的隔离性。 每个子 Agent 都有自己的上下文窗口和一个集中的目标。没有交叉污染。
  • 每个 Agent 的模型选择。 工作流程为每个子 Agent 选择使用的模型——Opus 用于困难推理,Haiku 用于低成本探索,Sonnet 用于中间任务。
  • 每个 Agent 的隔离级别。 Worktree(隔离的 git 检出)或远程(无检出)。工作流程决定每个 Agent 需要什么。

通过直接询问 Claude(“创建一个工作流程,用于……”)或使用触发词 ultracode 来启动一个工作流程。如果工作流程被中断——用户操作、终端退出——恢复会话会从上次中断的地方继续。

02. 工作流程解决的 3 种失败模式。

要知道何时工作流程是合适的工具,你必须了解它修复了什么。Claude 在单个上下文窗口中处理复杂任务的时间越长,就越容易受到三种特定失败模式的影响——这些模式在 Anthropic 的发布文章中直接命名:

  • Agent 懒惰 - Claude 在完成复杂的多部分任务之前就停止,并在取得部分进展后宣布完成。处理安全审查中的 50 个项目中的 20 个,然后称其余部分“已处理”。
  • 自我偏好偏差 - 当被要求根据标准验证或评判自己的结果时,Claude 偏爱自己的结果。一个有利害关系的验证者不可能成为公正的验证者。
  • 目标漂移 - 在多次交互后,特别是经过压缩后,对原始目标的保真度逐渐丧失。每次总结步骤都是有损的。“不要做 X”的约束在第 47 轮交互时悄然消失。

一个工作流程从结构上解决了所有这三个问题:独立的 Claude 实例,拥有各自的上下文、集中的目标和隔离的状态。如果你的任务遭受这些模式中的任何一个——那就是使用工作流程的信号。

03. 静态工作流程与动态工作流程。

你可能已经使用 Claude Agent SDK 或 claude -p 构建了静态工作流程——协调多个 Claude Code 实例。

  • 静态工作流程是通用的:编写一次以处理每个边缘情况。它们有效,但必须保守。
  • 动态工作流程则不同:Claude 为这个任务编写这个工作流程。框架是量身定制的。以下是同一问题用两种方式处理的情况:
Codez - inline image

动态版本胜出的原因不在于搜索步骤——两者都能搜索。

而在于工作流程能够根据你的上下文塑造自身:读取你的计费代码,根据实际的新提供商文档检查每个功能,根据你的交易量定价,并针对自身正在形成的答案运行一次对抗性的“为何不迁移”检查。

静态框架无法做到这一点,因为它不知道你的代码存在。

04. 核心 API。agent()、parallel()、pipeline()。

三个函数完成了工作流程中的大部分工作。了解它们就足以阅读 Claude 为你编写的任何工作流程,并在你想要特定形状时引导 Claude。

Codez - inline image

parallel() 是一个屏障:它分叉出去,然后等待所有任务完成后再返回。pipeline()流式的:每个项目独立地流经每个阶段。

根据问题来选择:我是否需要所有结果才能进行下一步? 是 → 使用 parallel。否 → 使用 pipeline(更便宜,整体更快)。

05. 分类并执行。在执行之前路由工作。

一个分类 Agent 决定任务的类型,然后工作流程根据答案将任务路由到不同的 Agent 或行为。或者,一个分类器在最后运行,将原始输出分类到不同的桶中,以供后续步骤使用。

这种模式在以下情况下发挥作用:

  • 任务是异构的——不同的子类型需要不同的处理方式。
  • 你只想在复杂性需要的地方使用昂贵的模型(在便宜的模型上运行分类器,然后仅在需要时路由到 Opus)。
  • 工作的分解本身就不简单,并且受益于由模型来决定其形状。

示例:“解释 auth 模块是如何工作的。”一个分类子 Agent 首先读取代码库,评估复杂性,然后将实际的解释任务路由到 Sonnet(用于 10 个文件的模块)或 Opus(用于 100 个文件的模块)。在理解工作之后,为任务选择合适的模型。

06. 分叉并综合。许多小步骤,一个合并的结果。

将一个任务拆分成许多更小的步骤。在每个步骤上并行运行一个 Agent。将结果综合成一个答案。

综合步骤是一个屏障——它等待每个分叉的 Agent,然后合并它们的结构化输出。

为什么这种模式在实践中占主导地位:它解决了单上下文工作中“一次性处理太多事情”的失败。每个子 Agent 只看到它自己的部分。编排者永远不会被 50 个不相关的细节分心。

每个步骤都受益于自己干净的窗口,这样它们就不会交叉污染。

在以下情况下使用此模式:

  • 你有一个清晰可枚举的工作项列表(50 个文件、200 个端点、100 个审查)。
  • 每个项目都是独立的——没有项目需要另一个项目的输出才能开始。
  • 你希望在最后得到一个单一的合并答案,而不是一堆零散的报告。
python
1// 分叉:每个文件一个 Agent。屏障:等待所有完成。
2const reviews = await parallel(
3 files.map(file => () => agent(
4 `审查 ${file} 的安全问题`,
5 { model: "haiku", schema: IssueList }
6 ))
7)
8
9// 综合:一个 Opus Agent 合并所有内容。
10const report = await agent(
11 `将这些审查合并成一个按优先级排序的报告:\n${JSON.stringify(reviews)}`,
12 { model: "opus" }
13)

07. 对抗性验证

这是对自我偏好偏差的结构性修复。对于每个生成的 Agent,运行一个独立的生成 Agent,根据标准对抗性地验证其输出。验证者从未见过原始工作;它无法偏袒它。

这种模式在以下情况下最为重要:

  • 声明检查 - 报告中每个事实性声明都有自己的验证子 Agent,对照原始来源进行检查。
  • 代码审查 - 作者 Agent 编写修复,审查者 Agent(独立的上下文)审查它。永远不是同一个 Claude 评判自己。
  • 质量门禁 - 在任何产物发布之前,一个对抗者试图找到针对它的最薄弱案例。如果对抗者找不到,你就发布。

配对规则:验证者应该知道标准和产物,而不知道是谁产生的。否则,自我偏好会通过提示词中的线索悄悄回来。

08. 生成并过滤。

在一个主题上生成一些想法,然后通过标准或验证来过滤它们。去重。只返回最高质量、经过测试的想法。

这种模式在以下方面表现出色:

  • 头脑风暴 - 30 个产品名称,然后一个验证者剔除陈词滥调、商标冲突和发音不佳的名称。你只看到 3 个。
  • 假设生成 - 针对一个问题的 5 种不同方法,然后每种方法都根据你的约束条件进行评分。胜出者是实至名归的。
  • 解决方案设计 - 针对一个问题的 5 种不同方法,然后每种方法都根据你的约束条件进行评分。胜出者是实至名归的。

这与要求 Claude 给出“最佳答案”相反。要求给出最佳答案会使 Claude 过早做出承诺。生成并过滤使 Claude 延迟承诺,直到每个选项都经过挑战。

09. 锦标赛。成对比较优于绝对评分。

不是分配工作,而是让 Agent 在任务上竞争。生成 N 个 Agent,每个 Agent 使用不同的方法尝试相同的任务,然后以成对的方式评判结果,直到一个胜出。

比较性判断比绝对评分更可靠——尤其是在基于品味的任务中。

Codez - inline image

为什么这比按分数排序更好:尝试在一个提示词中对 1,000 个项目进行排序在两个层面上都会失败——质量下降,而且它无法容纳在上下文中。锦标赛将分组赛程分散到全新的 Agent 上,每个 Agent 只比较两个项目。

分组赛程本身存在于确定性的循环代码中,而不是在上下文中。每次比较都是快速、公平且隔离的。同样的想法也适用于基于品味的排名:设计选择、候选人筛选、内容优先级排序。

10. 循环直到完成。

对于工作量未知的任务,循环生成 Agent,直到满足停止条件——没有新发现、日志中没有更多错误、理论得到验证——而不是运行固定数量的轮次。

这种模式是对“继续直到真正完成”的答案:

  • 调试不稳定测试 - 重现、形成理论、测试它们,直到一个理论成立。
  • 寻找 Bug - 持续寻找 Bug,直到一次完整的遍历返回零个 Bug。
  • 挖掘模式 - 聚类、识别规则,直到没有新的聚类出现。

将此模式与 /goal 配对以设置硬性完成要求(“在找到一个可行的理论之前不要停止”),并与 /loop 配对,如果你希望整个工作流程本身按计划重复运行。

分组赛程和停止条件存在于代码中;只有活跃的迭代保持在上下文中。

11. 为实际用例组合模式。一个工作流程,多种模式。

这 6 种模式很少单独出现。一个真实的工作流程会组合使用 2-4 种模式。下面的矩阵将 Anthropic 发布文章中的每个用例与其倾向于使用的模式配对:

  • 迁移和重构。 分叉(在 worktree 中,每个调用点/失败测试对应一个 Agent)→ 对抗性验证(一个独立的 Agent 审查每个修复)→ 循环直到完成。这是 Anthropic 用来将 Bun 从 Zig 重写为 Rust 的模式。
  • 深度研究/deep-research 技能)。分叉(并行网络搜索)→ 对抗性验证(每个声明独立验证)→ 综合(一份带有引用的报告)。
  • 对草稿进行深度验证。 识别所有事实性声明(一个 Agent)→ 分叉(每个声明一个验证者,每个 Agent 对照来源检查)→ 元验证者(检查验证者的来源是否高质量)。
  • 对 1,000 多个项目进行排序。 锦标赛(步骤 5-9)——成对比较、桶排名或分组赛程。比较性判断,永远不要绝对评分。
  • 记忆和规则遵守。 每个规则一个验证者(分叉)→ 怀疑论者角色审查规则本身以避免误报。
  • 根因调查。 从不相干的证据中生成理论(不同的 Agent 读取日志、文件、数据)→ 为每个理论设置一个验证者和反驳者小组 → 循环直到一个理论幸存。
  • 大规模分类。 分类并执行 → 对现有工单去重 → 尝试修复或升级。与 /loop 配对以实现持续分类。
  • 探索和品味(设计、命名、UI 选择)。生成并过滤(5-20 个选项)→ 使用标准进行锦标赛 → 排名或选择。
  • 轻量级评估。 在 worktree 中运行候选方案 → 比较 Agent 根据标准评分 → 优化并重新评分。与锦标赛形状相同,但用于评分,而非排名。

内化这些模式的正确方法是:确定你当前任务在哪种失败模式下失败,然后选择从结构上防止该失败的模式。

漂移 → 分叉。自我偏好 → 对抗性验证。开放式 → 循环直到完成。难以评分 → 锦标赛。

12. 与 /goal、/loop 和 Token 预算配合使用。

工作流程可能很昂贵。三个控制项将它们从“很酷但昂贵”转变为“我可以无人值守运行的工具”。

  • `/goal` 设置一个硬性完成要求。将其与循环模式配对:“在找到一个可行的理论之前不要停止。” 没有 /goal,工作流程会在一个软完成点停止。有了 /goal,它会迭代直到满足实际的结束条件。
  • `/loop` 按计划重复运行整个工作流程。用于你想要持续运行的工作流程——分类、每周研究更新、定期验证。
  • 明确的 Token 预算。 在提示词中告诉 Claude:“使用 10k 个 Token。” 这为工作流程运行设置了一个上限。没有上限,一个雄心勃勃的工作流程可能会膨胀到你预期的 5-10 倍 Token 量。
python
1> ultracode 对这个假设进行快速对抗性审查:
2 "迁移到 Postgres 消除了我们的分片再平衡。"
3 使用 5k 个 Token。/goal 在找到反例或三个独立确认之前不要停止。

直接引用 Claude Code 团队的话:“最佳实践仍在发展中。动态工作流程通常使用更多 Token,因此请仔细考虑何时以及如何使用它们。” 大多数传统的编码任务不需要一个由 5 个审查者组成的小组

Codez - inline image

问问自己:这个任务真的需要更多计算吗?如果一个常规的 Claude Code 会话能在五分钟内完成它,你就不需要工作流程。

13. 对不受信任的输入使用隔离模式。

任何读取不受信任的公共内容的工作流程——支持工单、Bug 报告、用户反馈、抓取的数据——都需要假设该内容可能包含提示注入。

修复方法:隔离。禁止读取不受信任内容的 Agent 采取任何高权限操作。执行操作的 Agent 是独立的,不接触原始内容。

Codez - inline image

任何处理用户提交内容(支持工单、Bug 报告、客户反馈、社交媒体)、抓取公共网页或针对第三方 API 输出运行的工作流程。

如果输入不是由你或可信的队友编写的,请隔离它。 一个 30 行的只读读取 Agent 几乎不花费任何成本,并消除了整个类别的提示注入风险。

14. 保存工作流程。将它们作为技能发布。

一旦工作流程有效,保存它:在工作流程菜单中按 s。保存的工作流程会进入 ~/.claude/workflows。从那里你有两条路径:

  • 保持本地 - 在你自己的项目中重复使用它。
  • 作为技能发布 - 将 JavaScript 文件打包到技能文件夹中,在 SKILL.md 中引用它,任何安装该技能的人都会运行相同的工作流程。
Codez - inline image

一个值得了解的实际细微差别:当你将工作流程打包成技能时,提示 Claude 将工作流程视为模板,而不是逐字运行的脚本

这为 Claude 留下了空间,使其能够根据具体任务调整工作流程的形状,同时保持整体结构不变。对于像“深度验证”或“分类”这样需要根据用例灵活调整的工作流程尤其有用。

在工作流程上浪费 Token 的错误

  • 在常规 Claude Code 会话就能完成时使用工作流程。 大多数传统编码任务不需要一个由 5 个审查者组成的小组。
  • 没有 Token 预算。 没有明确的上限,雄心勃勃的工作流程会膨胀到你预期的 5-10 倍。
  • 一个 Agent 同时负责工作和验证。 自我偏好偏差使验证者偏袒工作者。它们必须是独立的。
  • 将 parallel() 和 pipeline() 视为可互换。 屏障很重要——parallel 等待所有,pipeline 流式处理。
  • 在循环模式中跳过 /goal。 工作流程在第一个软完成点提前停止。/goal 强制硬性完成。
  • 让不受信任的内容到达执行者。 一旦你处理任何用户提交的内容,隔离就不是可选项。
  • 使用绝对分数进行排序。 比较性判断更可靠。使用锦标赛。
  • 从不保存有效的工作流程。 每周重新提示相同的形状。使用 s 保存,作为技能发布。

结论:

https://x.com/_catwu/status/2060054180379689074

一键保存

使用 YouMind AI 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind
写给创作者

把你的 Markdown 变成干净的 𝕏 文章

图片上传、表格、代码块,往 𝕏 上手动重排太痛苦。YouMind 把整篇 Markdown 一键转成干净、可直接发布的 𝕏 文章草稿。

试试 Markdown 转 𝕏

更多可拆解样本

近期爆款文章

探索更多爆款文章