Anthropic 给 Claude Code 加了一个值得注意的能力——Dynamic Workflows。过去让 AI Agent 处理大型工程任务,最大的瓶颈不是单个 Agent 的智力,而是协调:任务怎么拆、拆完怎么跑、跑完怎么验。Dynamic Workflows 直接把这三步串成了一条自动化链路,Claude 不再只是"回答问题",而是自己写编排脚本、并行派发子任务、校验结果后再交出最终答案。
从单线程对话到多 Agent 并行
传统模式下,你和 Claude Code 的交互是线性的:提需求 → 等回复 → 再提需求 → 再等回复。遇到复杂任务——比如同时重构三个模块、跑测试、写文档——线性流程要么超时,要么上下文窗口被撑爆。
Dynamic Workflows 的核心变化是:Claude 可以在运行时动态生成编排脚本,把一个大任务拆成多个独立子任务,分配给多个 Agent 并行执行,最后汇总校验。这不是预设的固定 pipeline,而是根据任务内容实时决定拆分策略。
整个流程可以概括为四步:
- 任务分析:Claude 评估输入,判断哪些部分可以并行化。
- 脚本生成:动态写出 orchestration 脚本,定义子任务边界和依赖关系。
- 并行执行:多个 Agent 同时处理各自子任务,互不阻塞。
- 结果校验:汇总各子任务输出,做一致性检查和错误回溯,再呈现最终结果。
实际跑起来是什么样
假设你有一个中型 Python 项目,需要同时完成三件事:给 auth 模块加类型注解、给 api 模块补单元测试、更新 README 中的 API 文档段落。用 Claude Code 的 Dynamic Workflows,你可以这样触发:
# 安装 Claude Code(如果还没装)
npm install -g @anthropic-ai/claude-code
# 在项目根目录启动 Claude Code,启用动态工作流
claude --workflow dynamic \
"请并行完成以下三个任务:
1. 给 src/auth/*.py 的所有公开函数添加类型注解,保持向后兼容
2. 给 src/api/*.py 补齐缺失的单元测试,目标覆盖率 ≥ 80%
3. 更新 README.md 中 'API Reference' 章节,与当前 src/api/ 的实际接口保持一致
完成后请运行 pytest 验证没有破坏现有测试。"
Claude Code 收到这条指令后,不会逐个串行处理。它会:
- 生成一份内部编排脚本,把三个任务标记为可并行子任务。
- 同时启动三个 Agent 分别处理类型注解、测试补写、文档更新。
- 各子任务完成后,汇总结果,跑一遍
pytest做集成校验。 - 如果测试失败,回溯到对应子任务的 Agent 重新修正。
你可以在终端看到类似这样的实时输出:
[workflow] Analyzing task... 3 parallel subtasks identified
[workflow] Generating orchestration script...
[agent-1] → Adding type annotations to src/auth/*.py
[agent-2] → Writing unit tests for src/api/*.py
[agent-3] → Updating README.md API Reference
[agent-1] ✓ Type annotations complete (7 files modified)
[agent-2] ✓ 12 new test cases added, coverage 83%
[agent-3] ✓ README updated with 5 endpoint descriptions
[workflow] Running validation: pytest
[workflow] ✓ All 47 tests passed
[workflow] Final result ready
编排脚本的内部逻辑
虽然 Claude Code 自动生成编排脚本,但理解它的设计思路有助于你写出更高效的任务描述。一个典型的编排脚本大致遵循这样的结构:
# 伪代码:Claude Code 动态工作流的编排逻辑示意
# 注意:这是概念性展示,并非 Claude Code 实际内部代码
class DynamicWorkflow:
def run(self, task_description: str):
# 1. 分析任务,识别可并行子任务
subtasks = self.analyze_and_decompose(task_description)
# 2. 构建依赖图——有些子任务必须等前置完成
dependency_graph = self.build_dependency_graph(subtasks)
# 3. 按依赖关系调度并行执行
results = {}
for batch in dependency_graph.parallel_batches():
# 同一批次内的子任务并行派发
batch_results = self.dispatch_parallel(batch)
results.update(batch_results)
# 批次间做中间校验
if not self.validate_batch(batch_results):
self.retry_failed(batch_results)
# 4. 最终汇总校验
final = self.aggregate_and_validate(results)
return final
def dispatch_parallel(self, batch: list[Subtask]):
"""给每个子任务分配独立 Agent,并行执行"""
agents = [self.spawn_agent(st) for st in batch]
return {st.id: agent.result for st, agent in zip(batch, agents)}
关键设计点:
- 依赖图而非扁平列表:不是所有子任务都能并行。比如"写测试"依赖"代码改完",编排脚本会自动识别这类先后关系,把无依赖的任务放同一批次并行,有依赖的排成先后批次。
- 中间校验:每个并行批次完成后做一次检查,失败的任务会重试而不是等到最后才发现问题。
- 动态生成:脚本不是硬编码模板,而是根据你的任务描述实时生成。不同任务会产出不同的编排策略。
写好任务描述的几个技巧
Dynamic Workflows 的效果很大程度上取决于你怎么描述任务。以下是实践中总结的几点:
明确边界,避免模糊重叠。 不要说"优化整个项目",而是说"给 auth 模块加类型注解、给 api 模块补测试"。边界清晰,Claude 才能正确拆分。
声明校验标准。 告诉 Claude 怎么判断任务完成——"覆盖率 ≥ 80%"、"pytest 全绿"、"README 和代码接口一致"。没有校验标准的并行任务,汇总时容易各说各话。
标注依赖关系。 如果某些子任务有先后顺序,在描述里直接说:"先完成类型注解,再跑测试"。Claude 会据此构建依赖图,避免并行冲突。
# 一个更精细的任务描述示例
claude --workflow dynamic \
"分两批处理这个项目:
第一批(并行):
- 给 src/models/*.py 添加 pydantic validator,确保字段校验逻辑完整
- 给 src/utils/*.py 的纯函数补齐 docstring 和类型注解
第二批(依赖第一批完成):
- 给 src/models/*.py 写单元测试,覆盖所有 validator 边界情况
- 更新 docs/api.md,与修改后的 models 接口对齐
校验:第二批完成后运行 pytest,要求 0 failures。"
限制与取舍
Dynamic Workflows 不是万能的,有几个现实边界需要留意:
- 上下文窗口仍然有限:每个 Agent 共享主上下文,子任务太多会导致信息稀释。实践中,3-5 个并行子任务是比较稳妥的范围,超过 8 个时质量可能下降。
- 子任务间冲突:如果两个 Agent 同时修改同一个文件,合并时可能产生冲突。Claude Code 会尝试做合并校验,但复杂冲突仍需人工介入。尽量让并行任务操作不同的文件集合。
- 成本与时间:并行 Agent 意味着并行消耗 token。任务简单时,串行处理反而更省。Dynamic Workflows 的价值在于复杂任务的效率提升,不是所有场景都该用它。
- 校验不是银弹:自动校验能跑测试、检查格式,但无法判断"这个重构是否真的更好"。业务逻辑层面的判断仍然需要人来做。
什么时候该用,什么时候不该用
一个简单的决策清单:
| 场景 | 建议 |
|---|---|
| 单文件小修改 | 不用,串行对话足够 |
| 3+ 个模块同时改动,彼此独立 | 用,并行收益明显 |
| 改动有先后依赖但步骤多 | 用,依赖图编排比手动串行高效 |
| 所有子任务都改同一个核心文件 | 慎用,合并冲突风险高 |
| 需要业务判断而非机械校验 | 用但加人工审核环节 |
Dynamic Workflows 解决的是"复杂工程任务的协调成本"问题。如果你经常遇到"这个改动牵涉五个地方,逐个改太慢"的情况,它值得认真试用。如果你的日常是单点修改和简单问答,传统对话模式依然是更轻量的选择。