可视化工作流/工作流变量(Workflow Variables)
5.8 工作流变量(Workflow Variables)
在 Pop 的可视化工作流系统中,“变量(Variables)”是让节点之间实现 跨节点数据共享、状态记录、循环累加、条件判断、上下文存储 的核心机制。
变量系统使得你可以构建更动态、更灵活、更可编排的复杂流程。
本章节将介绍:
- 什么是工作流变量
- 变量的几种类别
- 如何在节点中读取与写入
- 在 PSL 中操作变量
- 常见使用场景
- 最佳实践与注意事项
🧩 一、什么是工作流变量?
工作流变量就是运行过程中全局可访问的数据存储区域。
它具有:
- 作用域跨节点
- 生命周期贯穿整个运行
- 可写入、可读取
- 适合保存中间结果、状态标记、循环累加项
在 Pop 中,变量由系统自动维护,并可通过 PSL、脚本节点、条件节点、AI 节点、HTTP 节点 等进行访问。
🗂 二、变量的类别
Pop 的工作流变量目前包含三大类:
| 类型 | 示例 | 作用 |
|---|---|---|
| 输入变量 input | input.value.title |
用户输入的数据 |
| 节点输出变量 nodes | nodes[n].output.xxx |
某个节点的输出结果 |
| 全局变量 globals | globals.set("key", value) |
跨节点共享、可随时写入 |
三者关系如下:
input → nodes → globals
其中 globals 是可写的,是“核心变量存储区”。
🧰 三、输入变量(input)
输入变量是由入口节点统一提供的。
读取方式:
input.value.name;
input.value.file;
input.value.settings;
特点:
- 只读
- 由用户运行时提供
- 适合作为工作流的初始数据源
🔗 四、节点变量(nodes)
每个节点运行后,都会产生一个节点输出。
你可以通过两种方式访问:
方式 1:通过节点 ID(顺序编号)
nodes[3].output;
方式 2:通过节点序列号(推荐)
nodes.sn(12).output.result;
优势:
- 即使节点顺序变化也不会失效
- 多次运行更稳定
节点变量用于读取 上一个节点的执行结果,例如:
nodes.sn(5).output.text
nodes.sn(7).output.json.data
🌍 五、全局变量(globals)——最关键的变量体系
全局变量是 唯一可写入 的变量,也是“跨节点共享数据”的核心。
1. 写入变量
globals.set("summary", "生成的摘要文本");
globals.set("items", [1, 2, 3]);
globals.set("status", { step: 2, message: "OK" });
2. 读取变量
globals.value.summary;
globals.value.items;
3. 覆盖策略
多次写入会自动覆盖:
globals.set("count", globals.value.count + 1);
非常适合循环、计数、累积内容等场景。
✨ 六、在 PSL 中使用变量
几乎所有变量操作都可以通过 PSL 完成:
1. 读取输入
const name = input.value.name;
2. 读取其他节点输出
const data = nodes.sn(10).output.json;
3. 设置全局变量
globals.set("result", data.processed);
4. 判断变量是否存在
if (globals.value.cache) {
return globals.value.cache;
}
🔄 七、变量的运行生命周期
变量在 一次工作流运行期间 持续有效:
- 工作流开始 → 变量初始化
- 节点依次执行 → 节点输出写入 nodes
- 脚本、AI、逻辑节点可写入 globals
- 工作流结束 → 返回输出参数
不会跨运行保留,并不具备永久存储能力。
📘 八、变量典型使用场景
✔ 1. 在不同节点间共享数据
例如:
AI 节点总结 → 写入 globals → 后续节点统一使用
✔ 2. 循环累加数据
循环节点内:globals.set("items", [...globals.value.items, newItem])
✔ 3. 缓存中间结果避免重复计算
if (globals.value.cache) return globals.value.cache;
✔ 4. 条件判断
if (globals.value.score > 60) ...
✔ 5. 汇总多个节点输出作为最终结果
globals.set("final", {
a: nodes.sn(3).output.x,
b: nodes.sn(7).output.y,
});
⚠️ 九、注意事项与最佳实践
1. 为变量命名保持一致性
推荐使用:
snake_case
或
lowerCamelCase
例如:
user_info
report_items
summaryText
2. 避免存储过大的文件内容
例如 PDF 字节、图片 Buffer 等可能导致性能下降。
建议:
- 写入文件节点保存
- 全局变量仅保存文件路径或索引号
3. 避免变量名冲突
同一工作流内不要重复使用同名变量。
4. 不要滥用变量
能通过节点连接传递的就用节点连接。
全局变量适用于:
- 条件
- 循环
- 状态共享
- 高级脚本逻辑
🎯 十、小结
工作流变量让 Pop 的编排能力从“线性流程”扩展到“真正的可编程自动化”。
掌握变量之后,你可以:
- 在节点间共享状态
- 实现循环、判断、缓存
- 构建复杂的数据流管道
- 更灵活地控制流程执行