🐦 第4章 扣子工作流详解
📄 一句话概括

平台上的节点有十五种,归四类: 数据(取)、处理(改)、控制(走哪条路)、能力(调外面的东西)。 十五个里日常真正用到的只有五个:大模型、代码、知识库检索、选择器、循环。 这一节按四类逐个讲清「吃什么、吐什么」,再用六个节点跑一条真链。

📝 本章和前面几章的关系

上一节讲图的语法,这一节讲图的词汇。十五种节点就是十五个动词。 这一节是全章最长的一篇,但它其实只干一件事: 让你在看到任何一个节点时,能一句话说出它吃什么、吐什么。 建议先读四类的划分,再按需查具体节点。第一次读不必记住十五个名字。

一、四类的分法

十五种节点,按「它在链条里干什么」分四类。这个分法比按名字记有用得多。

类 干什么 有哪些 个数
数据 把外面的东西取进来 知识库检索、数据库、画板、长期记忆、知识库写入 5
处理 把数据改个形状 大模型、代码、文本处理、变量赋值 4
控制 决定走哪条路 选择器、意图识别、循环 3
能力 调外部的能力 插件、图像生成、工作流 3

一条典型的链是这样的顺序:数据 → 处理 → 控制 → 处理 → 结束。先取,再改,中间判断一次,再改, 交出。 所以看图先看有没有「取」。一条链里一个数据节点都没有,它就只能拿模型的记忆回答,答不了具体业务。

二、数据类:五个,都是「把东西取进来」

知识库检索吃一句查询,吐若干命中段落。第 5 章整章讲它。 数据库吃表名和条件,吐记录。要真的 SQL 查询时用它,别让模型编。 长期记忆吃用户标识,吐这个人以前说过什么。做个性化才用得上。

画板吃图片和文本框,吐合成后的一张图。做海报、做数据卡片用它。 知识库写入反过来:吃文本和库名,把内容写进去。做自动归档用它。 五个里前两个是主力。后三个属于「有特定需求才想起来」的类型。

三、处理类:四个,都是「把数据改形状」

大模型吃提示词加上游变量,吐一段文本。这是唯一带随机性的节点。 代码吃入参加一段代码,吐返回值。要算数、要格式转换、要做规则判断,都放这儿。确定性最高的一种。 文本处理吃一段文本和一条规则(截断、替换、拼接),吐处理后的文本。 它其实是「常用代码片段的按钮版」。

变量赋值吃不点什么,只是往上下文里写一个值。看着没用,但它是「把常量集中到一处」的唯一办法。 四个里前两个能顶后面两个。拿不准就用代码节点——它更笨,也更可控。

四、控制类:三个,都是「决定走哪条路」

选择器吃若干条件,决定走哪条分支。条件写在节点里,通常是对上游变量做比较。 意图识别吃用户这句话加一串候选意图,吐命中的那个。 它内部是大模型,所以带随机性——能用选择器就别用它。 循环吃一个数组加一段子流程,对每项跑一遍,吐每轮结果。 这就是上一节说的「图上无环,循环在节点内部」。

三个里选择器和循环是必需的,意图识别是可选的。 前者确定,后者灵活——和第 3.2 节插件那两种接法一个道理。

五、能力类:三个,都是「调外面的东西」

插件吃插件名和参数,吐接口返回的字段。第 3 章讲过。 图像生成吃画图提示词,吐图片地址。第 12 章的海报案例用它。 工作流吃一张子工作流的参数,吐子流的输出。这是把复杂图拆开的唯一办法。

第三个最容易被忽略,也最值得学。二十个节点的图拆成三张,每张七八个——好读、好改、好复用。 拆的标准很简单:一段逻辑如果你能说出一个名字,它就该是子工作流。

六、一句话的选节点口诀

能算的用代码,不能算的用大模型。 这是第一句,也是最有用的一句。 能明说的用选择器,说不清的用意图识别。 第二句,管分支。 要事实的用知识库,要动作的用插件。 第三句,管外部。

要重复的用循环,要复用的用子工作流。 第四句,管结构。 四句话覆盖了十五个节点的九成用法。剩下几个,用到时再查。

七、六个节点跑一次

演示里连了七个节点、用了六种类型:开始、意图识别、知识库检索、文本处理、变量赋值、大模型、结束。 路径是:先判意图,命中就走知识库查资料,查回来整理一下,写进一个变量,交给大模型生成答复。 没命中就直接送结束。 看轨迹的「类型」那一列,四类的分工一眼能看出来:意图识别决定走哪条路,文本处理和大模型改数据, 知识库取资料。

这就是第 5 章那个汽车客服的骨架。 那一个案例换掉的只是知识库里的资料。

八、动手 Demo:十五个节点,归四类

先把十五个节点按「吃什么、吐什么」过一遍,数出四类各几个。 再把其中六个连成一条链,真跑一次,看四类在轨迹里怎么分工。

NODES = [('插件节点', '能力'), ('大模型节点', '处理'),
         ('代码节点', '处理'), ('知识库检索节点', '数据'),
         ('图像生成节点', '能力'), ('循环节点', '控制'),
         ('选择器节点', '控制'), ('文本处理节点', '处理'),
         ('意图识别节点', '控制'), ('变量赋值节点', '处理'),
         ('数据库节点', '数据'), ('画板节点', '数据'),
         ('长期记忆节点', '数据'), ('工作流节点', '能力'),
         ('知识库写入节点', '数据')]

for k in ('处理', '控制', '数据', '能力'):
    ns = [n for n, c in NODES if c == k]
    print(k, len(ns), '、'.join(ns))

实跑输出:

--------------------------------------------------------------------
十五个节点,归四类
--------------------------------------------------------------------


| 节点 | 类 | 吃什么 | 吐什么 |
|---|---|---|---|
| 插件节点 | 能力 | 选一个插件 + 填参数 | 插件返回的字段 |
| 大模型节点 | 处理 | 提示词 + 上游变量 | 模型输出文本 |
| 代码节点 | 处理 | 入参 + 一段代码 | 返回值 |
| 知识库检索节点 | 数据 | 查询语句 | 命中的若干段落 |
| 图像生成节点 | 能力 | 画图提示词 | 图片地址 |
| 循环节点 | 控制 | 数组 + 子流程 | 每轮结果 |
| 选择器节点 | 控制 | 若干条件 | 走哪条分支 |
| 文本处理节点 | 处理 | 一段文本 + 规则 | 处理后的文本 |
| 意图识别节点 | 控制 | 用户这句话 + 候选意图 | 命中的意图 |
| 变量赋值节点 | 处理 | 变量名 + 值 | 写进上下文 |
| 数据库节点 | 数据 | 表名 + 条件 | 查到的记录 |
| 画板节点 | 数据 | 图片 + 文本框 | 合成后的图片 |
| 长期记忆节点 | 数据 | 用户标识 + 内容 | 读写结果 |
| 工作流节点 | 能力 | 选一张子工作流 + 参数 | 子流输出 |
| 知识库写入节点 | 数据 | 文本 + 库名 | 写入结果 |

  四类各几个:处理 4 个、控制 3 个、数据 5 个、能力 3 个
  十五个里有一半(4 个)你日常只用得到几个:大模型、代码、知识库检索、选择器。

  ② 把六个节点连起来跑一遍
  --------------------------------------------------------------------

| 步 | 节点 | 类型 | 输出端口 | 毫秒 |
|---:|---|---|---|---:|
|  1 | 开始 | 开始 | q | 0.0 |
|  2 | 意图识别 | 意图识别 | tag | 0.0 |
|  3 | 知识库检索 | 知识库检索 | hit | 0.0 |
|  4 | 文本处理 | 文本处理 | t | 0.0 |
|  5 | 变量赋值 | 变量赋值 | n | 0.0 |
|  6 | 大模型 | 大模型 | a | 0.0 |
|  7 | 结束 | 结束 | out | 0.0 |

  七个节点用了六种类型。分支那一步把「其他」直接送到了结束。
  看「类型」那一列:控制节点(意图识别)决定走哪条路,处理节点(文本、变量、大模型)改数据,
  数据节点(知识库)取资料。

①第一张表按名字顺序列了十五个,第四列是「吃什么、吐什么」。记不住名字没关系,记住这一列就行。 ②四类各几个:处理 4、控制 3、数据 5、能力 3。数据类最多,因为「取什么」这件事花样最多。 ③第二段那张轨迹表是重点。七个节点用了六种类型,看「类型」那列就能分出四类的分工。 ④注意「输出端口」:意图识别吐的是 tag,知识库吐的是 hit,文本处理吐 t,变量赋值吐 n。 每个节点的出参名字都不一样,下游要按名字接。 ⑤最后那句:这条链就是第 5 章汽车客服的骨架。那一个案例换掉的只是库里的资料,节点一个没变。

30 秒实验

  1. 把你图里的节点按四类标一遍。一个数据节点都没有的图,大概率在拿模型记忆当事实。
  2. 找一个大模型节点,问它能不能改成代码节点。能改就改,改完再跑一遍对比。
  3. 把你超过十二个节点的图,找一段能用一句话命名的逻辑,拆成子工作流。

常见误区

  1. 「十五个节点都要学。」日常只用五个:大模型、代码、知识库检索、选择器、循环。其余用到再查。
  2. 「意图识别比选择器高级。」它内部是大模型,带随机性。能写成条件就用选择器。
  3. 「节点越多能力越强。」节点是函数。一个节点能做的事,别拆成三个。 拆的目的是圈住随机性,不是为了数量。
自测三问(点开对答案) 1. 四类节点分别管什么? —— 数据取、处理改、控制走哪条路、能力调外部。一条典型链的顺序是取、改、判、改、交出。 2. 「能算的用代码」是什么意思? —— 凡是有确定答案的计算和格式转换,都放代码节点。它不带随机性,出错能定位到行。 3. 什么时候该拆子工作流? —— 一段逻辑你能说出一个名字的时候。拆完每张图七八个节点,好读好改好复用。

节点都认识了,最后一节把它们连起来。 从空画布开始,六步想清楚,连成一条能真跑的链,再看分支跳步是怎么发生的。

相关笔记