上周,我们在Claude Code中发布了动态工作流。现在,Claude可以即时编写自己的专用工具,针对当前任务量身定制。

虽然默认的Claude Code工具主要面向编码任务,但它同样适用于许多其他类型的工作,因为很多任务本质上类似于编码。然而,对于某些特定任务类别,比如研究安全分析代理团队代码审查,我们需要在Claude Code基础上构建定制工具以达到最佳性能。

动态工作流允许你基于Claude Code动态创建工具,使Claude能够更自然地解决这些问题。你还可以与他人共享和复用这些工作流。

本文将分享我对动态工作流的初步体验和心得,帮助你充分利用这一功能。请注意,最佳实践仍在不断发展中:动态工作流通常消耗更多token,适合复杂且高价值的任务。

示例提示

在深入技术细节之前,先通过几个示例提示激发你对工作流可能性的思考:

  • “这个测试大约每50次运行失败1次。创建一个工作流来复现它。形成多个竞品理论,直到有一个理论经得起证据考验。”
  • “使用工作流,分析我最近50个会话,挖掘我反复犯的错误,并将常见错误转化为CLAUDE.md规则。”
  • “用工作流挖掘过去六个月Slack中的#incidents,找出反复出现但没人提交工单的根本原因。”
  • “拿我的商业计划,运行一个工作流,让不同代理从投资者、客户和竞争对手的角度进行批判。”
  • “这里有80份简历,使用工作流为后端岗位排名,并复核前十名。用AskUserQuestion工具进行面试评分。”
  • “我需要给这个CLI工具起个名字。用工作流头脑风暴多个选项,并通过锦标赛选出前三名。”
  • “用工作流将我们的User模型重命名为Account。”
  • “用工作流检查我的博客草稿,核实每个技术声明是否与代码库一致,我不想发布错误内容。”

动态工作流如何运作

动态工作流执行一个JavaScript文件,包含一些特殊函数,帮助生成和协调subagents

动态工作流示意图

动态工作流还支持标准JavaScript函数,如JSON、Math和Array,方便数据处理。

特别值得一提的是,动态工作流可以决定代理使用哪个模型,以及子代理是否在独立的工作树中运行,从而让Claude选择所需的智能水平和隔离度。

如果工作流被中断(例如用户操作或终端退出),恢复会话时可以从中断处继续执行。

为什么选择动态工作流

默认的Claude Code工具在同一个上下文窗口中既要规划又要执行任务。对于许多编码任务,这种方式非常有效,但在长时间运行、大规模并行、高度结构化或对抗性强的任务中可能会失效。

原因在于,Claude在单一上下文窗口中处理复杂任务时间越长,越容易出现以下几种失败模式:

  • 代理懒惰:Claude在完成复杂多步骤任务前就停止,宣称任务完成,例如只处理了安全审查中的35项而非全部50项。
  • 自我偏好偏差:Claude倾向于偏爱自己的结果,尤其是在需要根据评分标准验证或评判时。
  • 目标漂移:随着多轮交互,逐渐偏离最初目标,尤其是在摘要压缩后,边缘需求或“不要做X”的限制可能丢失。

创建工作流可以通过协调独立上下文窗口和专注目标的子代理,有效避免这些问题。

动态工作流与静态工作流

你可能之前用Claude Agent SDK或claude -p创建过静态工作流,协调多个Claude Code实例。

但静态工作流为了兼顾所有边缘情况,通常较为通用。借助Claude Opus 4.8和动态工作流,Claude现在足够智能,可以为你的用例编写定制化工具。

动态与静态工作流对比

使用动态工作流的常见模式

你可以直接让Claude创建工作流,或者使用触发词ultracode确保Claude Code生成工作流。

理解动态工作流的工作原理,有助于你判断何时使用以及如何通过提示引导Claude。

常见模式包括:

工作流模式示意

分类并执行

使用分类代理决定任务类型,然后根据任务路由到不同代理或行为。或者在最后用分类器确定输出。

分解并综合

将任务拆分成多个小步骤,为每步运行一个代理,最后综合结果。适合步骤多或每步需要独立上下文避免干扰的场景。综合步骤等待所有分解代理完成,再合并结构化输出。

对抗性验证

为每个生成的代理,运行另一个代理根据评分标准对其输出进行对抗性验证。

生成并筛选

生成多个想法,再根据评分标准或验证筛选,去重后只返回最高质量的想法。

锦标赛

让多个代理竞争完成同一任务,使用评判代理两两比较结果,直到选出优胜者。

循环直到完成

对于工作量未知的任务,循环生成代理直到满足停止条件(无新发现或日志无错误),而非固定次数。

典型应用场景

发挥创造力,思考何时何地让Claude Code生成动态工作流。我发现工作流在非技术工作中有时更有用。

迁移与重构

Bun从Zig重写为Rust时使用了工作流。详情见Jarred的X推文

关键是将任务拆解为多个步骤,如调用点、失败测试、模块等。为每个修复点生成子代理进行修复,再由另一个代理对其进行对抗性审查并合并。建议告诉代理避免使用资源密集型命令,以便最大化并行而不耗尽机器资源。

深度研究

我们在Claude Code中发布了一个深度研究技能(/deep-research),利用动态工作流实现。它分散进行网页搜索、获取来源、对抗性验证声明,并综合成带引用的报告。

你也可以用类似方法做其他研究,比如从Slack上下文编写状态报告,或深入探索代码库研究功能实现。

深度验证

深度验证示意

如果你有报告需要核实每个事实声明,可以生成一个工作流,让一个代理识别所有事实声明,再为每条声明生成子代理详细核查。还可以让验证代理检查子代理的来源质量。

排序

排序示意

你可能有一长串项目需要按某种定性标准排序,比如按缺陷严重程度排序的支持工单。但一次性在一个提示中排序1000+条目会导致质量下降且超出上下文限制。可以用锦标赛、成对比较流水线(相对判断比绝对评分更可靠)或并行分桶排序后合并。每次比较由独立代理完成,确定性循环维护排序结构。

记忆与规则遵守

规则遵守示意

如果Claude经常忽略某些规则,即使放入CLAUDE.md也难以遵守,可以创建一个工作流,列出必须由验证代理检查的规则——每条规则一个验证代理。创建怀疑者角色的子代理审查规则,有助于减少误报。

反向操作也有效:挖掘你最近的会话和代码审查评论,找出反复出现的修正,使用并行代理聚类,对每个候选规则进行对抗性验证(该规则是否能防止真实错误?),然后将通过验证的规则提炼回CLAUDE.md

根因调查

调试时最好提出多个独立假设并测试,但单一上下文窗口容易导致自我偏好偏差。

工作流可以结构化地避免这一点,生成多个代理分别从不同证据(日志、文件、数据)提出假设,再由验证和反驳代理组成评审小组。

这不仅适用于代码,也适合销售(例如“3月销售为何下降?”)、数据工程(“流水线为何失败?”)或任何事后分析。

大规模分诊

分诊示意

每个团队都有无法完全由人工处理的支持队列、缺陷报告或待办事项。

分诊工作流会分类每个条目,去重已有跟踪项,并采取行动,比如尝试修复或升级给人工处理。

一个有用的分诊模式是隔离,禁止读取不可信公共内容的代理执行高权限操作,这些操作由负责执行的代理完成。

配合/loop命令,Claude可以持续执行分诊工作流。

探索与品味

工作流适合探索多种解决方案,尤其是基于品味的设计或命名任务,配合评分标准更佳。

尝试让Claude探索多个方案,给评审代理一个评分标准,任务完成于评审代理认为标准达成时。方案也可通过锦标赛根据评分标准排序或选出。

评估

你可以通过生成独立代理执行轻量级评估,再生成比较代理根据评分标准对结果进行比较和评分。例如,评估并优化你创建的技能。

模型与智能路由

创建针对任务调优的分类代理,决定使用哪个模型。对于涉及大量工具调用的任务,先调研再执行有助于选出最佳模型。

例如,任务“解释认证模块如何工作”的最佳模型取决于认证模块的文件数量和代码库结构。分类代理可以先调研,再根据任务复杂度路由到Sonnet或Opus。

何时不使用动态工作流

工作流功能尚新,虽然在许多场景下效果显著,但并非每个任务都需要,且可能显著增加token消耗。

建议创造性地使用工作流,推动Claude Code完成以往难以实现的任务。对于常规编码任务,问问自己是否真的需要更多计算资源,比如大多数传统编码任务不需要5个评审者的面板。

构建动态工作流的建议

提示设计

详细提示,结合上述技巧,能产生最佳效果。

工作流不仅适合大型任务,也可用于“快速工作流”,例如快速对某个假设进行对抗性审查。

结合/goal/loop

对于可重复执行的工作流,如分诊、研究或验证,配合/loop定期运行,使用/goal设置硬性完成条件。

Token使用预算

你可以为动态工作流设置明确的token使用上限,比如提示“使用1万token”,以控制消耗。

保存与共享动态工作流

在工作流菜单按“s”保存。你可以将其存入~/.claude/workflows,或通过技能分发。

保存工作流示意

通过技能共享时,将JavaScript工作流文件放入技能文件夹,并在SKILL.MD中引用。为增加灵活性,可以提示Claude将技能中的工作流视为模板,而非必须逐字执行的脚本。

技能模板示意

探索的新起点

工作流是扩展Claude Code的有力新工具。我鼓励你将其视为探索新用法的起点,帮助完成更多任务。关于最佳使用方式还有很多待发现,欢迎分享你的发现。

本文作者为Anthropic技术团队成员Thariq Shihipar和Sid Bidasaria,专注于Claude Code的研发。