Claude Code 新增动态工作流功能
A harness for every task: dynamic workflows in Claude Code
Claude Code 新增动态工作流功能,允许模型在运行时即兴创建和协调多智能体框架来处理复杂任务。该功能通过执行特定的 JavaScript 文件来生成和协调拥有独立上下文窗口的子代理,可解决单一上下文窗口中长时间执行任务可能出现的智能惰性等问题。工作流适用于研究、安全分析、代码审查等场景,通常消耗更多 token,更适合高价值复杂任务,其最佳实践仍在发展中。
Claude Code 现在能自己动态生成多代理协调器,这在调试、审查、研究等复杂任务上是个真正的生产力跃迁,但普通编码工作用它反而是杀鸡用牛刀。
上周,我们在 Claude Code 中发布了动态工作流。Claude 现在可以即时编写自己的运行框架,针对手头的任务量身定制。
虽然 Claude Code 的默认运行框架是为编程而构建的,但它对许多其他类型的任务同样有用,因为事实证明,许多任务都与编程任务相似。但有些类别的任务,我们必须在 Claude Code 之上构建自定义运行框架才能达到最佳性能,例如研究、安全分析、智能体团队或代码审查。
工作流让你能够动态创建构建在 Claude Code 之上的运行框架,使 Claude 能够更原生地解决所有这些问题。你还可以与他人分享和复用这些工作流。
在本文中,我将介绍我最初的工作流体验和心得,以便你能够充分利用它。请记住,最佳实践仍在发展之中:动态工作流通常会消耗更多 token,最适合复杂、高价值的任务。
示例提示词
在深入技术细节之前,我想先给出几个示例提示词,让你思考工作流带来的可能性:
“这个测试大约每 50 次运行会失败 1 次。设置一个工作流来复现它。针对这个竞态提出相互竞争的理论,直到有一个理论经得起证据检验才停止。”
“用一个工作流,把我最近 50 次会话过一遍,从中挖掘我反复犯的错误,并把反复出现的那些整理成 CLAUDE.md 规则”
“用一个工作流,把 Slack 里 #incidents 频道过去六个月的内容翻一遍,找出那些反复出现、却没人提工单的根本原因。”
“拿我的商业计划书,跑一个工作流,让不同的智能体分别从投资人、客户和竞争对手的角度把它批得体无完肤。”
“这里有一个装着 80 份简历的文件夹,用一个工作流为后端岗位给它们排序,并对前十名进行复核。用 AskUserQuestion 工具来访谈我,以确定评分标准。”
“我需要给这个 CLI 工具起个名字。用一个工作流头脑风暴出一堆选项,再跑一场锦标赛选出前 3 名。”
“用一个工作流,把我们的 User 模型在所有地方重命名为 Account。”
“把我博客文章的草稿过一遍,用一个工作流对照代码库核实每一处技术性论断,我不想发布任何有错的东西。”
动态工作流如何运作
动态工作流会执行一个 javascript 文件,其中包含几个特殊函数,用于帮助生成和协调 子智能体:

动态工作流还包含 JSON、Math 和 Array 等标准 JavaScript 函数,用于帮助处理数据。
特别有用的一点是,动态工作流可以决定智能体使用哪些模型,以及子智能体是否在各自独立的 worktree 中运行,从而让 Claude 自行选择所需的智能水平和隔离程度。
如果工作流被中断,例如因用户操作或退出终端,恢复会话后工作流将能够从中断处继续。
为什么需要动态工作流
当你让默认的 Claude Code harness 执行一项任务时,它需要在同一个上下文窗口内既做规划又做执行。对于许多编程任务来说,这种方式非常有效,但在长时间运行、大规模并行、高度结构化和/或对抗性的任务中,它可能会失效。
这是因为 Claude 在单个上下文窗口中处理复杂任务的时间越长,就越容易受到几种特定失败模式的影响:
- 智能体惰性指的是 Claude 在完成一项特别复杂的多部分任务之前就停下来,在取得部分进展后就宣称任务已完成,例如在安全审查中只处理了 50 项中的 35 项。
- 自我偏好偏差指的是 Claude 倾向于偏好自己的结果或发现,尤其是在被要求根据评分标准对其进行验证或评判时。
- 目标漂移指的是在经历多轮对话后,尤其是经过上下文压缩之后,对原始目标的忠实度逐渐丧失。每一次摘要步骤都是有损的,诸如边缘情况需求或“不要做 X”这类约束等细节可能会丢失。
创建工作流有助于应对这些问题,方法是编排各自拥有独立上下文窗口、目标聚焦且相互隔离的 Claude 子智能体。
动态工作流与静态工作流
你此前可能已经使用 Claude Agent SDK 或 claude -p 创建过静态工作流,用于协调多个 Claude Code 实例协同工作。
但由于静态工作流需要适用于所有边缘情况,它们通常更为通用。借助 Claude Opus 4.8 和动态工作流,Claude 如今已经足够智能,能够为你的具体用例量身定制一套专属的编排框架。

使用动态工作流时的实用模式
你只需让 Claude 创建一个动态工作流即可开始使用,或者使用触发词“ultracode”来确保 Claude Code 创建一个工作流。
但建立起对动态工作流运作方式的心智模型,将有助于你理解何时该使用它们,以及如何通过提示词来引导 Claude。
在构建工作流时,Claude 可能会使用并组合以下几种常见模式:

分类并执行
使用一个分类器智能体来判断任务类型,然后根据任务类型将其路由到不同的智能体或行为。或者,在最后使用一个分类器来确定输出。
扇出并综合
将一个任务拆分为许多更小的步骤,在每一步上运行一个智能体,然后综合这些结果。当存在大量较小的步骤时,或者当每一步都受益于其自身干净的上下文窗口、从而不会相互干扰或交叉污染时,这一点尤其有用。综合步骤是一道屏障——它等待所有扇出的智能体,然后将它们的结构化输出合并为一个结果。
对抗性验证
对于每一个派生出的智能体,运行另一个单独派生的智能体,依据评分标准或准则对其输出进行对抗性验证。
生成并筛选
围绕某个主题生成若干想法,然后依据评分标准或通过验证对其进行筛选,去除重复项,只返回质量最高、经过测试的想法。
锦标赛
与其划分工作,不如让智能体就此展开竞争。派生 N 个智能体,每个都使用不同的方法尝试同一任务。然后由提示词或模型使用评判智能体以两两对决的方式评判结果,直到决出胜者。
循环直至完成
对于工作量未知的任务,循环派生智能体,直到满足停止条件(没有新发现,或日志中不再有错误),而不是固定执行固定轮数。
使用场景
创造性地思考何时以及如何让 Claude Code 构建动态工作流。我发现工作流有时对非技术性工作甚至更有用。
迁移与重构
Bun 就是使用工作流从 Zig 重写为 Rust 的。你可以在 Jarred 的 X 帖子中了解更多关于这一过程是如何完成的。
关键在于将任务分解为一系列需要逐一处理的步骤,例如调用点、失败的测试、模块等。在工作树中为每一处修复派生一个子智能体来完成修复,然后让另一个智能体进行对抗性审查,并将它们合并。可以考虑告诉智能体不要使用资源密集型命令,这样你就可以最大限度地并行化,而不会耗尽机器上的资源。
深度研究
我们在 Claude Code 中发布了一个深度研究技能(/deep-research),它使用了动态工作流。具体来说,它会扇出网络搜索、抓取来源、对其中的主张进行对抗性验证,并综合生成一份带引用的报告。
但你可以把这类研究用于网页搜索之外的更多场景。例如,让 Claude 根据 Slack 中的上下文整理一份状态报告,或者通过深入探索某个代码库来研究某个功能是如何运作的。
深度验证

另一方面,如果你有一份报告,想要核查并溯源其中引用的每一条事实性论断,你可能需要生成一个工作流:让一个智能体识别出所有事实性论断,然后派生出一个子智能体逐一详细核查。你还可以让一个验证智能体去检查那个负责溯源的子智能体,以确保其来源质量足够高。
排序

你可能有一批条目,想按照某种你认为 Claude Code 擅长评估的定性指标来排序,例如:按 bug 严重程度对支持工单排序。但如果你试图在单个提示词中对 1000+ 行进行排序,质量会下降,而且也无法放进上下文窗口。取而代之的做法是运行一场锦标赛、一条由两两比较智能体组成的流水线(比较性判断比绝对打分更可靠),或者并行进行分桶排名后再合并。每次比较都由各自的智能体完成,因此确定性的循环负责维护对阵表,只有当前的运行顺序会留在上下文中。
记忆与规则遵循

如果你有一组特定的规则,发现 Claude 总是漏掉或难以处理,即使把它们放进了 CLAUDE.mds,也可以创建一个工作流,列出一份必须由验证者智能体逐条检查的规则清单——每条规则对应一个验证者。创建一个持怀疑态度的角色子智能体来审查这些规则,确保它们彼此一致,有助于避免过多的误报。
反方向同样可行:挖掘你近期的会话和代码审查评论,找出你反复做出的纠正,用并行智能体对它们进行聚类,对每个候选规则进行对抗性验证(这条规则能否阻止一次真实的错误?),然后把存活的规则蒸馏回一个 CLAUDE.md。
根因调查
调试的最佳方式是提出多个相互独立的假设并逐一验证,但如果你只使用一个上下文窗口,Claude 可能会陷入自我偏好偏差
工作流可以从结构上防止这一点,方法是启动多个智能体,从互不相交的证据中生成假设。例如,分别为日志、文件和数据设置独立的智能体。然后每个假设都可以面对一个由验证者和反驳者组成的小组。
这不仅仅适用于代码。工作流还可以用于销售(三月份销售额为什么下降?)、数据工程(这条流水线为什么失败?),或任何事后复盘工作。
大规模分诊

每个团队都有支持队列、缺陷报告或其他无法由人工完全处理的积压工作。
分诊工作流会对每个条目进行分类,与已跟踪的内容去重,并采取行动。这可能意味着尝试修复,或升级给人工用户。
分诊工作流的一个实用模式是隔离。这涉及禁止读取不可信公开内容的智能体执行高权限操作,这些操作改由负责根据信息采取行动的智能体来完成。
将分诊工作流与 /loop 搭配使用,可让 Claude 持续执行这一流程。
探索与品味
在探索解决问题的不同方法时,工作流会很有用,尤其是当方法基于品味时,比如设计或命名,并且能从评分标准中获益。
试着让 Claude 探索一系列解决方案,并给评审智能体一份评分标准,说明什么样的解决方案才算好。当评审智能体认为已满足标准时,任务即告完成。解决方案也可以根据该评分标准,通过锦标赛的方式进行排序或筛选。
评估
你可以针对特定任务运行轻量级评估:在一个 worktree 中派生独立的智能体,然后再派生对比智能体,依据评分标准对具体输出进行比较和打分。例如,针对某一特定标准对你创建的技能进行评估,然后再加以改进。
模型与智能路由
创建一个针对你的任务进行调优的分类器智能体,由它来决定使用哪个模型。当你的任务涉及大量工具调用,而在执行前开展调研能够找出最适合该任务的模型时,这会很有帮助。
例如,对于“解释 auth 模块是如何工作的”这一任务,最佳模型取决于 auth 模块中有多少个文件以及代码库的形态。分类器智能体可以完成这项调研,然后根据任务的预期复杂度路由到 Sonnet 或 Opus。
何时不应使用动态工作流
工作流是新生事物。尽管在许多用例中它能带来超乎寻常的成果,但并非每项任务都需要它,而且它最终可能会消耗显著更多的 token。
最好以创造性的方式使用工作流,以你此前未曾尝试过的方式推动 Claude Code。对于常规编码任务,不妨问问自己:它真的需要更多算力吗?例如,大多数传统编码任务并不需要 5 名评审员组成的评审小组。
同样的判断也适用于更高一层的架构层面:多智能体与单智能体的抉择遵循类似的逻辑——并行与专业化必须证明其协调成本是值得的。
构建动态工作流的技巧
提示词设计
针对动态工作流,使用我们上文描述的具体技巧进行详细提示词编写,能产生最佳效果。
工作流并不只适用于大型任务。你可以提示模型使用“快速工作流”。例如,你可以针对某个假设创建一个快速的对抗性审查。
结合 /goal 和 /loop 使用
当使用可重复执行的工作流时,例如分诊、研究或验证,将它们与 /loop 搭配以按固定间隔运行,并用 /goal 设定硬性完成要求。
Token 用量预算
你可以为动态工作流设置明确的 token 用量预算,以限制一个任务使用多少 token。你可以用类似这样的预算来提示它:“使用 10k tokens”,这会设定上限。
保存和分享动态工作流
你可以在工作流菜单中按“s”来保存工作流。你可以将它们检入 ~/.claude/workflows,或通过技能分发它们。

要通过技能分享它们,请将你的 JavaScript 工作流文件放入技能文件夹,并在 SKILL.MD 中引用它们。为了获得更大的灵活性,你可能希望提示 Claude 将技能中的工作流视为模板,而不是需要逐字运行的脚本。

发现的新起点
工作流是一种扩展 Claude Code 的有用新方式。我鼓励你把它当作一个起点,去探索使用 Claude 帮助完成任务的更多新方法。关于如何最好地使用它们,仍有许多值得探索之处。欢迎告诉我你的发现。
关于哪些内容本应属于 harness 的原则,请参阅我们为使用 Claude 构建而写的三种 harness 设计模式。
本文由 Thariq Shihipar 和 Sid Bidasaria 撰写,他们是 Anthropic 的技术人员,从事 Claude Code 相关工作。
来源:Claude:Blog(网页) · claude.com