组合的本质不是画流程图,是排依赖:谁必须在谁之后,谁跟谁不相干。 排完依赖只有三种排法:串联(一条链)、并联(同层一起发)、循环(打回重做)。 同一个七步任务,一次一个要七轮,按层同时只要四轮。省下的三轮全来自「同层」这三个字。
上一篇把共用的能力拆出去了,这一篇讲拆完之后怎么排顺序。 第 4 章的五个技能是一条现成的链,这里拿它当例子排一遍。 下一篇讲并联的一个前提:主智能体只有一个,要同时催好几路,得派子智能体。
一、组合的本质是排依赖
先说清楚「组合」到底在做什么。不是把几个技能画成一排方框,是回答两个问题。 谁必须在谁之后?没有大纲写不了初稿,这是硬依赖,绕不过去。 谁跟谁不相干?第一节和第二节写的时候互不看对方,这是可并联。 两个问题答完,图就自己长出来了。先画方框再想依赖,是反的。 依赖只有两种:数据依赖(要上一步的产出)和判断依赖(要人点头)。 判断依赖常被忽略。写完大纲要人挑一个,这一步不进图,但它同样卡住后面所有步。
二、串联:一条链
最直觉的排法:做完一个接下一个。七步就七轮。 它的好处是简单、好排查。哪一步坏了,看最后一个产物就知道。 坏处是慢。而且慢得没必要——七步里有三步本来可以同时做。 串联该用在哪:有硬前后关系的那些步。素材分析到定大纲,必须串。 判断一句:如果下一步要看上一步的结果才知道怎么干,就必须串。
三、并联:同层一起发
把七步按依赖分层,同一层的可以一起发。这个任务分出来是四层。
| 层 | 几步 | 哪些 |
|---|---|---|
| 第 1 层 | 1 | 素材分析 |
| 第 2 层 | 1 | 定大纲 |
| 第 3 层 | 3 | 三节初稿 |
| 第 4 层 | 2 | 统一润色、配图方案 |
四层,最宽的一层三步。这就是「七轮变四轮」的来源——省下的三轮全在第三层。 并联有一条硬前提:同层的几个产物必须互不依赖。 如果第一节写到一半要看看第二节怎么写的,那它们就不能并行,得退回串联。 还有一条软代价:同层的结果要先合并,才能进下一层。合并本身要花一轮。
四、循环:打回重做
第三种不是排顺序,是加回头路。写完评一遍,不达标就打回重写。 润色这一步天然是循环:改完按清单评,不达标再改。 循环必须有出口,而且出口要写成数字:最多再改两轮。 没有上限的循环是工作流里最常见的坑。它会一直改下去,而且越改越偏。 出口有两种写法:按轮数(最多三轮)、按标准(密度降到 1.0 以下就停)。 两种都写最好:标准决定什么时候该停,轮数决定什么时候必须停。
五、一张表:什么场景用什么
| 方式 | 图上长什么样 | 什么时候用 |
|---|---|---|
| 串联 | 一条链,做完一个接下一个 | 步骤有硬前后关系 |
| 并联 | 同层几个一起发 | 几个产物互不依赖 |
| 循环 | 做→评→不达标→回去改 | 有明确的验收标准 |
三种不是互斥的,一条真实的工作流里三种都有。 以上面那条链为例:整体是串联(分层之后仍有先后),第三层内部是并联,润色那一步是循环。 所以别问「该用哪一种」,要问「这一段该用哪一种」。
六、导演口令:把排法说成四句话
排法想清楚之后,落到嘴上就是几句话。这几句话是要说给智能体听的。 第一句派活:「先做素材分析,做完把结论给我看一眼。」 第二句上闸:「我点头之后定大纲,大纲出三个方案让我挑。」 第三句并行:「挑完三节同时写,三节都要按同一份大纲的措辞。」 第四句收口:「三节齐了再润色,改完按清单评一遍,不达标最多再改两轮。」 四句话里有三处在派活,一处在上闸:三个方案、同一份措辞、最多两轮。 这三处闸门就是导演和操作员的区别。操作员一句一句喊,导演只定闸门。
七、动手 Demo:把七步排成四层,省下三轮
这一段拿一篇五节的文章当任务,拆成七个动作,按依赖算出层次,再比两种排法的轮数。 分层是真算的:反复挑出「依赖都已完成」的动作,挑一轮就是一层。
TASKS = [('A 素材分析', []),
('B 定大纲', ['A 素材分析']),
('C1 第一节初稿', ['B 定大纲']),
('C2 第二节初稿', ['B 定大纲']),
('D 统一润色', ['C1', 'C2', 'C3']), ...]
done, layers = set(), []
while len(done) < len(TASKS):
cur = [n for n, deps in TASKS if n not in done and all(d in done for d in deps)]
layers.append(cur)
done |= set(cur)
实跑输出:
--------------------------------------------------------------------
把七步排成四层,省下三轮
--------------------------------------------------------------------
① 一篇五节的文章,拆成七个动作
--------------------------------------------------------------------
| 动作 | 依赖谁 |
|---|---|
| A 素材分析 | 无 |
| B 定大纲 | A 素材分析 |
| C1 第一节初稿 | B 定大纲 |
| C2 第二节初稿 | B 定大纲 |
| C3 第三节初稿 | B 定大纲 |
| D 统一润色 | C1 第一节初稿、C2 第二节初稿、C3 第三节初稿 |
| E 配图方案 | C1 第一节初稿、C2 第二节初稿、C3 第三节初稿 |
七个动作里,只有 C1、C2、C3 三个互不相干。
其余四个都有明确的前后关系:没有大纲写不了初稿,没有初稿润不了色。
② 按依赖分层:同一层可以同时做
--------------------------------------------------------------------
| 层 | 几步 | 哪些 |
|---|:---:|---|
| 第 1 层 | 1 | A 素材分析 |
| 第 2 层 | 1 | B 定大纲 |
| 第 3 层 | 3 | C1 第一节初稿、C2 第二节初稿、C3 第三节初稿 |
| 第 4 层 | 2 | D 统一润色、E 配图方案 |
一共 4 层,最宽的一层有 3 步。
③ 两种排法的轮数差
--------------------------------------------------------------------
| 排法 | 最少几轮 | 代价 |
|---|:---:|---|
| 一次一个 | 7 | 安全,但慢 |
| 按层同时 | 4 | 快,但同层的结果要先合并 |
七轮变 4 轮,省 3 轮。
! 同层能同时做的前提是互不依赖。C1 写到一半要看 C2 写了什么,就得退回串行。
④ 第三种组合:循环(打回重做)
--------------------------------------------------------------------
| 方式 | 图上长什么样 | 什么时候用 |
|---|---|---|
| 串联 | 一条链,做完一个接下一个 | 步骤有硬前后关系 |
| 并联 | 同层几个一起发 | 几个产物互不依赖 |
| 循环 | 做→评→不达标→回去改 | 有明确的验收标准 |
润色这一步天然是循环:写完评一遍,不达标就打回上一节重写。
循环必须有出口。没有「最多改几轮」的约定,它会一直改下去。
⑤ 导演口令:把排法说成一句话
--------------------------------------------------------------------
[派活口令 · 逐字可用]
| 先做素材分析,做完把结论给我看一眼。
| 我点头之后定大纲,大纲出三个方案让我挑。
| 挑完三节同时写,三节都要按同一份大纲的措辞。
| 三节齐了再润色,改完自己按清单评一遍,不达标最多再改两轮。
这四句话就是一条工作流的全部指令
四句话里有三处在派活,一处在上闸:三个方案、同一份措辞、最多两轮。
! 不给上限的循环,是工作流里最常见的坑。
第一段七个动作摆开,只有 C1、C2、C3 三个互不相干,其余四个都有明确的前后关系。 第二段按依赖分层,算出四层:素材、大纲、三节初稿、润色加配图。最宽的一层三步。 第三段比轮数:一次一个要七轮,按层同时只要四轮,省三轮。 省下的三轮全在第三层。这也说明并联的收益取决于「最宽那层有多宽」,不是「步数有多少」。 第四段讲循环:润色天然是循环,但必须有出口,出口要写成数字。 第五段是导演口令,四句话里三处在派活、一处在上闸。三处闸门是导演和操作员的区别。
30 秒实验
- 把你手上的一个多步任务写成「动作加依赖」两列,然后算出层次。你会发现层数远少于步数。
- 给每一步标一下:这步的产出下一步是不是必须看。标完就知道哪些能同时发。
- 给你现有的循环加一个数字上限。没有上限的那个,就是你最容易卡住的地方。
常见误区
- 先画方框再想依赖。方框是结果不是起点。先答「谁在谁之后」,图自己会长出来。
- 忽略判断依赖。「写完大纲要人挑一个」不进图,但它同样卡住后面所有步。 不算进去,排出来的轮数永远是错的。
- 循环不设出口。没有「最多再改几轮」的约定,它会一直改下去,而且越改越偏。 标准决定什么时候该停,轮数决定什么时候必须停,两个都写。
自测三问(点开对答案)
1. 组合的本质是在做什么? —— 排依赖:谁必须在谁之后,谁跟谁不相干。两问答完,图自然就出来了。 2. 并联省下的时间取决于什么? —— 取决于最宽的那一层有多宽,不是总步数有多少。七步里最宽的一层三步,就只省三轮。 3. 循环的出口为什么要写成数字? —— 没有上限的循环会一直改下去。标准决定什么时候该停,轮数决定什么时候必须停。下一篇讲并联的前提:主智能体只有一个,要同时催三路,得先派三个分身出去。
- ☐ (本篇完,下一篇 5.3 怎么同时催:子智能体上岗)