动态工作流(Claude Code)
概述
动态工作流是 Claude Code(v2.1.154+)中的一种编排原语。Claude 会生成一个 JavaScript 脚本,由后台运行时执行,从而在大规模场景下协调多个子智能体。其核心架构转变在于:编排计划转移到代码中——Claude 不再逐轮决定下一步派发什么任务;脚本本身承载循环、分支与中间结果,Claude 的上下文窗口只接收最终答案。
动态工作流适用于以下场景:需要协调的智能体数量超出单次对话的承载能力,或编排流程本身需要可重复执行——例如跨代码库的全量 Bug 扫描、大规模文件迁移、需要交叉验证的多源研究问题,以及从多个独立视角起草方案。
该功能适用于 Pro、Max、Team 和 Enterprise 方案,需要 Anthropic API、Amazon Bedrock、Google Cloud Vertex AI 或 Microsoft Foundry 的访问权限。
编排原语对比
Claude Code 提供四种协调方式,动态工作流处于高规模、脚本驱动的一端。
| 子智能体 | 技能 | 智能体团队 | 工作流 | |
|---|---|---|---|---|
| 是什么 | Claude 派发的工作者 | Claude 遵循的指令 | 监督对等会话的领导智能体 | 运行时执行的脚本 |
| 由谁决定下一步 | Claude,逐轮决策 | Claude,按提示词执行 | 领导智能体,逐轮决策 | 脚本 |
| 中间结果存储位置 | Claude 的上下文窗口 | Claude 的上下文窗口 | 共享任务列表 | 脚本变量 |
| 可重复的部分 | 工作者定义 | 指令 | 团队定义 | 编排流程本身 |
| 规模 | 每轮少量任务 | 与子智能体相同 | 少量长时运行的对等智能体 | 每次运行可达数十至数百个智能体 |
| 中断行为 | 重启该轮次 | 重启该轮次 | 队友持续运行 | 可在同一会话内恢复 |
工作流与其他原语的本质区别在于计划即代码这一特性:使用子智能体和智能体团队时,Claude 本身充当编排者,每轮都需从上下文中重建意图;而工作流脚本将该意图一次性固化,后续由运行时驱动执行。
架构与运行时
脚本生成
在以下情况下,Claude 会为任务生成 JavaScript 工作流脚本:
- 用户在提示词中包含 ultracode,或以"使用工作流"的方式描述请求
- /effort ultracode 已激活(Claude 会为会话中每个实质性任务规划工作流)
- 调用已保存的工作流命令(如 /deep-research)
每次运行都会将脚本写入 ~/.claude/projects/<session>/ 目录下的文件,该脚本可被读取、与历史运行进行差异对比,或经编辑后重新启动。
执行环境
运行时在独立于对话的隔离环境中执行脚本:
- 中间结果存储在脚本变量中,不占用上下文窗口
- 每次运行最多支持 16 个并发智能体(在 CPU 核心数有限的机器上会相应减少)
- 每次运行最多支持 1,000 个智能体(防止失控循环)
- 子智能体始终在 acceptEdits 模式下运行,并继承会话的工具许可名单
- 文件编辑自动审批;未在许可名单中的 shell 命令和 Web 请求可能在运行过程中触发提示
可恢复性
若运行被暂停或停止,可在同一会话内恢复:已完成的智能体返回缓存结果,其余智能体实时继续执行。若在运行途中退出 Claude Code,则下次会话需重新开始。
后台执行
运行在后台进行,会话保持响应。可通过 /workflows 或输入框下方的任务面板查看进度。/workflows 视图支持深入查看各阶段和各智能体的详情、暂停/恢复、停止单个智能体,以及将脚本保存为可复用命令。
内置与已保存工作流
Claude Code 内置了一个工作流:
| 命令 | 功能说明 |
|---|---|
/deep-research <question> |
从多个维度并发进行 Web 搜索,抓取并交叉验证来源,对每条声明进行投票,最终返回一份过滤掉未经证实内容的带引用报告 |
用户可将任意运行的脚本保存为项目级命令(存放于 .claude/workflows/,与代码库共享),或个人命令(存放于 ~/.claude/workflows/,在所有项目中均可使用)。已保存的工作流会与内置工作流一同显示在 / 自动补全列表中,并通过 args 全局变量接受结构化输入。
计划即代码模式
动态工作流是"将计划转移到代码中"这一更广泛架构理念的具体实现,带来的是质的提升,而非单纯的规模扩展:
- 对抗性交叉验证:独立智能体可在结果上报前相互审查各自的发现,比单次处理产出更可靠的结果
- 多角度规划:多个智能体从不同的初始假设出发起草方案,脚本在确定最终方案前对各版本进行权衡
- 规模扩展无上下文成本:数百个智能体的结果累积在脚本变量中,不消耗编排者的上下文窗口
这与"代码即智能体运行框架(Agent Harness)"范式(Ning et al., 2026)相吻合——代码提供了纯自然语言编排所无法实现的可执行性、可检视性和有状态性。参见 Code as Agent Harness。
与 Perplexity Search as Code 的对比
Perplexity 的 Search as Code(SaC)范式与 Claude Code 的动态工作流在结构上高度相似——两者都是同一元模式的实例化——但作用于技术栈的不同层次。
| 维度 | Perplexity Search as Code | Claude Code 动态工作流 |
|---|---|---|
| 模型生成的内容 | Python 检索流水线 | JavaScript 编排脚本 |
| 代码控制的对象 | 搜索 SDK 原语(抓取、排序、综合) | 子智能体调用 |
| 执行环境 | 安全计算沙箱 | 隔离的工作流运行时 |
| 规模 | 每任务数百至数千次检索操作 | 每次运行最多 1,000 个子智能体 |
| 计划存储位置 | 生成的代码(而非模型上下文) | 生成的代码(而非模型上下文) |
| 复用方式 | SDK 级别(按任务类型) | 可保存为项目或个人命令 |
| 主要领域 | 搜索与检索 | 通用任务编排 |
两者都将控制权从模型在上下文中逐轮决策转移到生成的脚本确定性地执行。Perplexity SaC 使检索原语可编程;Claude Code 动态工作流使智能体协调可编程。两者处理的是智能体技术栈的相邻层——SaC 是动态工作流可能调用的检索底层。
两者共同的架构根源是"代码即编排者"这一理念:对于单个上下文窗口无法容纳的复杂大型任务,更好的表达方式是由运行时驱动的可执行脚本,而模型则充当代码生成控制面,而非逐轮决策者。
检索层版本的完整介绍,请参见 Search as Code (Perplexity)。
最佳实践
| 挑战 | 说明 | 建议 |
|---|---|---|
| 成本失控 | 单个工作流可派发数百个智能体,消耗的 Token 量远超对话模式 | 先在小范围内运行(单个目录、单个具体问题),评估开销后再提交大规模任务 |
| 运行途中工具提示 | 调用不在许可名单中的 shell 命令或 Web 请求的智能体可能暂停长时运行 | 在启动大规模运行前,将预期命令添加到工具许可名单 |
| 模型选择 | 所有智能体默认使用会话模型;高能力模型在大规模场景下成本较高 | 在描述任务时,建议 Claude 将复杂度较低的阶段路由至较小的模型 |
| 可重复性 | 临时工作流在会话结束后即消失 | 对产出有价值结果的运行,在成功执行后立即保存为项目或个人命令 |
| 跨次运行的确定性 | 脚本逻辑每次运行时可能产生不同的智能体分配 | 将已保存工作流视为稳定的编排方案——避免在保存的脚本中嵌入特定于某次运行的 ID 或时间戳 |
| 质量与速度的权衡 | Ultracode 模式对每个任务均应用工作流,会增加 Token 消耗和延迟 | 将 /effort ultracode 保留用于多智能体交叉验证能明显提升价值的任务;日常工作使用 /effort high |
参见
- Claude Code 编排原语——决策指南
- Search as Code (Perplexity)
- Code as Agent Harness
- 工作流编排
- 多智能体系统
- Claude 托管智能体
- 生产最佳实践:部署
- 生产最佳实践:成本管理
参考资料
- Orchestrate subagents at scale with dynamic workflows — Claude Code Docs — Claude Code 动态工作流官方文档,涵盖编排模型、运行时限制、内置工作流、ultracode 模式及复用模式。