核心思想

动态工作流不是”配更大预算的 /goal”,也不是”开几个子智能体扫一眼输出”,而是让 Claude 为每个任务现场写出一整套编排脚本:用 agent()/parallel()/pipeline() 等注入式全局原语扇出工作、用类型化输出(JSON schema)强约束返回、再独立核验结果。作者由此提出一条新的扩展轴——基础模型算力 × 思考算力 × 生成式 harness 算力。代价是显著更高的额度消耗,宜先小范围试水,再上大迁移。

大多数人都严重低估了 Claude Code 的动态工作流(dynamic workflows)。它不是给 /goal 配上更大的预算,也不是”随手开几个子智能体,然后扫一眼输出就完事”。Claude 会当场写出一整套 agent harness,然后把它跑起来。

丢给它一个大任务。Claude 会规划工作流、写出编排脚本、把活儿扇出(fan out)到几十乃至上百个子智能体身上,逐一校验每个子智能体的返回,并在汇报之前先核实结果。模型不只是在干活——它在搭建那套用来干活的系统,而且是每个任务现搓一套、全新的。

停下来好好品一下这句话:**模型写出了那个控制模型的程序。**

这些原语

Claude 写出的编排脚本,只用到一小撮积木:

  • agent(prompt) —— 派生一个子智能体
  • parallel([...]) —— 扇出,并等待全部完成
  • pipeline(items, ...stages) —— 让任务以流式穿过各个阶段
  • phase() / log() —— 实时吐出进度

其余的一切都是纯粹的 JavaScript:循环、过滤、映射、条件判断。是真正的控制流,而不是一个只能拧几个旋钮的配置文件。

类型化输出才是真正的解锁

让这一切真正可用的,是类型化输出(typed output)。给 agent() 传入一份 JSON schema,运行时就会校验返回结果。子智能体必须返回那个一模一样的结构,不达标就一直重试,直到匹配为止。

不必再拿正则去硬刚整墙整墙的散文。不必再祈祷模型按你要求的格式来组织答案。每个子智能体交回来的都是结构化数据,脚本可以直接对它做路由、排序或过滤:

const triaged = await parallel(issues.map((n) => () =>
  agent(`triage issue #${n}`, { schema: TRIAGE_SCHEMA })
))

11 个 issue 变成 11 个同时运行的 agent,每个都返回 { priority, effort, nextStep }。然后再来一个 agent,把它们排成一块看板。类型化地进,类型化地出,中间没有半行胶水代码。

指挥家自己把自己写了出来

agent()、parallel()、pipeline() 并不是脚本 import 进来的库。运行时把它们当作全局变量直接注入。

所以这个脚本本身就是一位指挥家:用纯 JS 负责控制流,再配上少数几个全局函数——它们伸手回到 harness 里去,唤起一个个活生生的 Claude。而这位指挥家,正是 Claude 写的。它先写出程序,再把程序交还给运行时去执行。

这件事为什么对代码库至关重要

对代码而言,这就是全部胜负所在。查 bug、做迁移、搞审计、做重构——任何能沿着文件或模块拆解开的活儿——都不再是单个智能体的苦役,而摇身变成一个舰队级的问题。

比起过去那种单智能体循环,你多拿到的是:

  • 每个子智能体都从一份全新的上下文起步
  • 工作并行展开,而不是一个文件一个文件地磨
  • 各项发现都经过独立核实,而不是凭信任照单全收
  • 漫长的任务不再烂在某一段臃肿不堪的对话里

这就是那个一直缺席的 `/clear` 原语,被放大到了舰队规模。

静态树 vs. 生成树

ralph、GSD,以及那些手工堆叠出来的 .md 任务文件,都是手写的 harness。动态工作流则是被生成出来的 harness。两者属于同一范畴。区别只在于:一个是你预先烤好的,另一个是模型在运行时现场合成的。

在那套被生成的 harness 里,最锋利的一件原语是 pipeline()。各个条目穿过一道道阶段,中间没有全局屏障(barrier)——条目 A 可以已经跑到第 3 阶段,而条目 B 还卡在第 1 阶段。于是整体耗时(wall-clock)坍缩成最慢的那一条单链,而不是所有阶段时间的总和。绝大多数多步骤的智能体工作,本就该被塑造成这个形状,却偏偏没有。

代价所在

这可不是天上掉下来的免费魔法。一次动态工作流可能会显著多吃掉你的额度,远超一次普通会话——因为你是在为整支舰队买单。所以一开始要圈定范围。先在小任务上摸清它的脾性,等你真正信得过它了,再毕业去啃那些大迁移。

这一切正驶向何方

AI 写代码,正在从”模型写代码”,转向”模型写出那套 harness,由它去协调一群模型来写代码、验代码”。这是一条全新的扩展轴,叠加在旧有的那些之上:

基础模型算力 × 思考算力 × 生成式 harness 算力

这些东西都没有什么像样的文档——大部分是我靠读运行时自己留下的 trace 一点点拼凑出来的。而这正是我在做的事:ax,一张面向你的编程智能体的本地遥测图谱。它会把每一份 transcript 都摄入进来,让你看清你的智能体到底在干些什么。→ ax.necmttn.com

相关笔记