Claude Code 现在可以即时编写并编排自己的多智能体框架。以下是动态工作流的运作方式,以及如何充分利用这些模式。
- 分类Claude Code
- 产品未找到任何项目。
- 日期2026 年 6 月 2 日
- 阅读时间5分钟
- https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code
上周,我们在 Claude Code 中发布了动态工作流功能。Claude 现在可以针对手头的任务,即时编写自己的专属框架。
虽然默认的 Claude Code 框架是为编码而构建的,但它也适用于许多其他类型的任务,因为事实证明,许多任务与编码任务有相似之处。然而,对于某些特定类别的任务,我们不得不在 Claude Code 之上构建自定义框架才能达到最佳性能,例如研究、安全分析、智能体团队或代码审查。
工作流允许你在 Claude Code 之上动态创建框架,使 Claude 能够更原生地解决所有这些问题。你还可以与他人共享和复用这些工作流。
在本文中,我将介绍我最初使用工作流的经验和心得,以便你能够充分利用它。请记住,最佳实践仍在发展中:动态工作流通常会消耗更多模型 token,最适合用于复杂、高价值的任务。
示例提示词
在深入技术细节之前,我想先提供几个示例提示词,让你思考工作流的可能性:
“这个测试大约每运行 50 次就会失败 1 次。设置一个工作流来复现它。针对竞态条件形成相互竞争的理论,直到有一个理论在证据面前胜出为止。”
“使用工作流,浏览我最近的 50 个会话,从中挖掘出我反复犯的错误,并将那些重复出现的错误转化为 CLAUDE.md 规则。”
“使用工作流,挖掘 Slack 中过去六个月的 #incidents 频道,找出那些尚未有人提交工单的重复性根本原因。”
“拿我的商业计划书,运行一个工作流,让不同的智能体分别从投资者、客户和竞争对手的角度对其进行剖析。”
"这里有一个包含 80 份简历的文件夹,用一个工作流来为后端岗位进行排序,并仔细复核前十名。使用 AskUserQuestion 工具对我进行面试,以制定评分标准。"
"我需要为这个 CLI 工具起个名字。用一个工作流来头脑风暴出大量选项,然后运行一个锦标赛来选出前三名。"
"用一个工作流,把我们的 User 模型在所有地方都重命名为 Account。"
"通读我的博客文章草稿,用一个工作流对照代码库验证每一项技术声明,我可不想发布任何错误的东西。"
动态工作流的工作原理
动态工作流会执行一个 JavaScript 文件,该文件包含几个特殊函数,用于生成和协调子智能体:
动态工作流还包含标准的 JavaScript 函数,如 JSON、Math 和 Array,以帮助处理数据。
特别有用的是,动态工作流可以决定智能体使用哪些模型,以及子智能体是否在其自己的工作树中运行,从而让 Claude 能够选择所需的智能水平和隔离程度。
如果工作流被中断,例如由于用户操作或退出终端,恢复会话后工作流将能够从中断处继续执行。
为什么需要动态工作流
当你要求默认的 Claude Code 框架执行一项任务时,它需要在同一个上下文窗口中进行规划和执行。对于许多编码任务来说,这非常高效,但在长时间运行、大规模并行、高度结构化和/或对抗性任务中,它可能会失效。
这是因为 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.md 文件,也可以创建一个包含规则列表的工作流,由验证智能体逐一检查——每条规则对应一个验证智能体。创建一个持怀疑态度的角色子智能体来审查这些规则,确保它们合理,有助于避免过多误报。
反向操作也同样有效:挖掘你最近的会话记录和代码审查评论,找出你反复纠正的问题,用并行智能体对其进行聚类,然后对抗性地验证每个候选规则(这条规则是否能阻止一个实际错误?),最后将幸存下来的规则提炼回 CLAUDE.md 文件中。
根因调查
调试的最佳方式是提出多个独立的假设并逐一验证,但如果你只使用一个上下文窗口,Claude 可能会陷入自我偏好偏差。
工作流可以通过启动智能体,从互不重叠的证据中生成假设,从而在结构上防止这种情况。例如,为日志、文件和数据分别设置独立的智能体。然后,每个假设可以面对一个由验证者和反驳者组成的评审团。
这不仅适用于代码。工作流还可用于销售(为什么三月份销售额下降了?)、数据工程(为什么这个流水线失败了?)或任何事后复盘工作。
大规模分类处理
每个团队都有支持队列、Bug 报告或其他无法完全由人工处理的积压任务。
一个分类处理工作流会对每个项目进行分类,与已跟踪的项目进行去重,并采取相应行动。这可能意味着尝试修复,或者将问题升级给人工处理。
分诊工作流中一个有用的模式是隔离。这涉及禁止读取不受信任公共内容的智能体执行高权限操作,这些操作改由负责处理信息的智能体来完成。
将分诊工作流与 /loop 配对使用,可让 Claude 持续执行此流程。
探索与品味
在探索解决方案的不同方法时,工作流可能很有用,尤其是当这些方法基于品味(如设计或命名)时,并且如果能有一个评分标准会更有帮助。
尝试让 Claude 探索一系列解决方案,并为评审智能体提供一个评分标准,说明什么样的解决方案是好的。当评审智能体认为已达到标准时,任务即完成。解决方案也可以根据评分标准通过锦标赛形式进行排序或筛选。
评估
你可以通过在工作树中创建独立的智能体,再创建对比智能体来根据评分标准比较和评分特定输出,从而对特定任务进行轻量级评估。例如,根据特定标准评估并优化你创建的技能。
模型与智能路由
创建一个针对你的任务调优的分类智能体,由其决定使用哪个模型。当你的任务涉及大量工具调用,且在执行前进行研究能确定最适合该任务的模型时,这会很有帮助。
例如,对于“解释认证模块如何工作”这一任务,最佳模型取决于认证模块中的文件数量以及代码库的结构。分类智能体可以进行这项研究,然后根据任务的预期复杂度路由到 Sonnet 或 Opus。
何时不使用动态工作流
工作流是新生事物。虽然它在许多用例中能产生超常效果,但并非每个任务都需要使用,而且可能会消耗显著更多的 token。
最好创造性地使用工作流,以你之前未曾尝试的方式推动 Claude Code。对于常规编码任务,试着问自己:它真的需要更多算力吗?例如,大多数传统编码任务并不需要 5 位评审员组成的评审团。
同样的判断也适用于更高一层,即架构层面:多智能体与单智能体的决策遵循类似的逻辑——并行化和专业化必须能够抵消其协调成本。
构建动态工作流的技巧
提示词设计
对于动态工作流,使用我们上文描述的具体技巧进行详细提示词设计,能产生最佳效果。
工作流不仅适用于大型任务。你可以提示模型使用“快速工作流”。例如,你可以创建一个对某个假设的快速对抗性审查。
结合使用 /goal 和 /loop
当使用可重复的工作流时(例如分类、研究或验证),将它们与 /loop 配对以按固定间隔运行,并与 /goal 配对以设定硬性完成要求。
Token 使用预算
你可以为动态工作流设置明确的 token 使用预算,以限制任务使用的 token 数量。你可以用类似“使用 10k tokens”这样的预算进行提示,这将设定上限。
保存和共享动态工作流
你可以通过在工作流菜单中按“s”键来保存工作流。你可以将这些文件检入到 `~/.claude/workflows` 目录,或通过技能(skill)进行分发。
要通过技能共享工作流,请将你的 JavaScript 工作流文件放入技能和文件夹中,并在 SKILL.MD 文件中引用它们。为了获得更大的灵活性,你可能希望提示 Claude 将技能中的工作流视为模板,而不是需要逐字执行的脚本。
探索的新起点
工作流是扩展 Claude Code 的一种有用的新方式。我鼓励你将它们视为探索如何使用 Claude 帮助你完成任务的新方法的起点。关于如何最佳地使用它们,还有很多值得探索的地方。请告诉我你的发现。
关于最初什么内容适合放入 harness(集成框架),请参阅我们关于使用 Claude 进行构建的三个 harness 设计模式。
本文由 Thariq Shihipar 和 Sid Bidasaria 撰写,他们是 Anthropic 负责 Claude Code 的技术团队成员。