AI Pulse

Claude Code动态工作流:为每项任务打造专属工具

Claude Code动态工作流:为每项任务打造专属工具

上周,我们在Claude Code中发布了动态工作流。Claude现在可以即时自主编写工具,为手头的任务量身定制。

虽然默认的Claude Code工具是为编码而构建的,但它也适用于许多其他类型的任务,因为事实证明,许多任务与编码任务相似。但有一类特定的任务,我们不得不在Claude Code之上构建自定义工具才能达到最佳性能,例如研究、安全分析、代理团队或代码审查。

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

在本文中,我将介绍我最初使用工作流的经验和心得,以便你能够充分利用。请记住,最佳实践仍在发展中:动态工作流通常消耗更多token,最适合复杂、高价值的任务。

示例提示

在深入技术细节之前,我想先提供几个示例提示,让你思考工作流的可能性:

- "这个测试大概每50次运行中就会失败一次。建立一个工作流来复现它。提出关于竞态条件的竞争性理论,直到有一个理论在证据中胜出为止。" - "使用工作流,浏览我最近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子代理来帮助对抗这些问题。

动态工作流 vs 静态工作流

你可能之前使用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善于评估这种度量,例如:根据错误严重性排序的支持工单。但如果你尝试在一个提示中对1000多行进行排序,质量会下降且无法放入上下文。相反,运行一个锦标赛,一个成对比较代理的管道(比较判断比绝对评分更可靠),或者并行分桶排序然后合并。每次比较都是自己的代理,因此确定性循环持有括号,只有运行顺序保留在上下文中。

记忆和规则遵守

如果你有一套特定的规则,发现Claude即使放在CLAUDE.md中也会遗漏或难以遵守,创建一个工作流,包含一份规则列表,必须由验证代理检查——每个规则一个验证者。创建一个怀疑论者人格子代理来审查规则,确保它们一致,有助于避免太多误报。

反向操作也同样有效:挖掘你最近的会话和代码审查评论中你反复犯的错误,用并行代理进行聚类,对抗性验证每个候选规则(这条规则是否会阻止一个真正的错误?),然后将幸存者浓缩回CLAUDE.md。

根因调查

调试最佳方法是提出几个独立的假设并测试它们,但如果只使用一个上下文窗口,Claude可能会遇到自我偏好偏差。

工作流可以通过从不同证据生成假设的代理来结构性地防止这种情况。例如,针对日志、文件和数据的单独代理。然后每个假设可以面对一个验证者和反驳者小组。

这不仅仅适用于代码。工作流可用于销售(为什么三月份销售额下降?)、数据工程(为什么这个管道失败?)或任何事后复盘练习。

大规模分类

每个团队都有支持队列、错误报告或其他人类无法完全处理的后备任务。

一个分类工作流对每个项目进行分类,与已跟踪的项目去重,并采取行动。这可能意味着尝试修复或升级到人类用户。

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

将分类工作流与/loop结合,让Claude持续执行。

探索与品味

当探索不同解决方案的方法时,工作流可能很有用,尤其是当基于品味(如设计或命名)并且受益于评分标准时。

尝试让Claude探索一堆解决方案,并为审查代理提供一个评分标准,描述好的解决方案是什么样的。当审查代理觉得符合标准时任务完成。解决方案也可以通过基于评分标准的锦标赛进行排序或选择。

评估

你可以通过在工作树中分配单独的代理,然后分配比较代理对特定输出进行对比和评分来运行特定任务的轻量级评估。例如,根据特定标准评估然后优化你创建的技能。

模型与智能路由

创建一个针对你的任务调整的分类器代理,决定使用哪个模型。当你的任务涉及许多工具调用,并且执行前进行研究可以识别最适合任务的模型时,这很有帮助。

例如,对于任务“解释auth模块如何工作”,最佳模型取决于auth模块中有多少文件以及代码库的结构。分类器代理可以进行这项研究,然后根据任务的预期复杂度路由到Sonnet或Opus。

何时不使用动态工作流

工作流是新的。虽然有许多使用场景可以产生超大的效果,但它们并非每个任务都需要,并且可能消耗明显更多的token。

最好创造性地使用工作流,以前所未有的方式推动Claude Code。对于常规编码任务,尝试问自己:它真的需要更多计算吗?例如,大多数传统编码任务不需要5位评审员的小组。

构建动态工作流的提示

提示

使用上述具体技术详细提示动态工作流会产生最佳结果。

工作流不仅适用于大型任务。你可以提示模型使用“快速工作流”。例如,你可以创建一个对某个假设的快速对抗性审查。

结合/goal和/loop

当使用可重复的工作流时,例如分类、研究或验证,将它们与/loop结合以定期运行,并与/goal结合以设置硬性完成要求。

Token使用预算

你可以为动态工作流设置明确的token使用预算,以限制任务使用的token数量。你可以使用预算提示,例如:“使用10000个token”,这将设置上限。

保存和共享动态工作流

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

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

探索的新起点

工作流是扩展Claude Code的一种有用新方式。我鼓励你将它们视为探索新方法使用Claude完成任务的新起点。关于如何最好地使用它们,还有很多有待发现。请告诉我你的发现。

本文由Thariq Shihipar和Sid Bidasaria撰写,他们是Anthropic在Claude Code团队的技术人员。

阅读原文
📚 相关主题 工程研究

📬 订阅 AI Pulse

每天三次更新,不错过重要信号

▲ 回到顶部