跳转到内容

变量与数据流设计技巧

节点会连,变量不会传 —— 这是新手最常卡住的地方。本篇讲清楚数据在流程中怎么流动、怎么变形。

先画数据流,再摆节点

搭建前先回答三个问题:

  1. 入口有什么? Start 节点收集哪些字段 (用户消息、自定义变量)
  2. 出口要什么? Answer 的回复模版 / End 的输出变量需要哪些数据
  3. 中间怎么变? 从入口到出口,数据经过哪些加工

把这条链写成一行,再对着它摆节点:

用户消息 → 分类结果 → (行情分支)股票代码 → 行情JSON → 格式化文本 → 回复

结构化输出:让 LLM 的结果能被下游"用"

LLM 默认输出自由文本 text(String),下游节点很难精确取值。需要下游做判断、取字段时,打开 LLM 节点的结构化输出开关:

  • 输出变量变为 structured_output(Object),按你配置的 JSON Schema 生成
  • 配置时逐个定义字段:参数名、参数类型、是否必填
  • 典型用法:让 LLM 抽取 {"ticker": "NVDA", "intent": "查行情"},下游 IF Else / Http Request 直接引用字段

原则:给人看的用 text,给机器用的用 structured_output

三个变量节点的分工

节点干什么什么时候用
Variables Transformer用 Jinja2 模板做格式化、类型转换、合并拆分拼接文案、把 Object 转成展示文本、简单变换
Parameter Extractor用大模型从文本中提取结构化参数需要把自然语言转成工具调用入参时
CodePython / JavaScript 自定义逻辑Transformer 表达不了的复杂计算、清洗、校验

选择顺序:能用 Transformer 就不用 Code(模板比代码好维护);Code 是兜底方案。

分支数据的汇聚:Branch Aggregator

IF Else / Question Classifier 分出去的多条分支,各自产生了不同的输出变量,下游 (如 Answer) 只想引用"一个"结果时,用 Branch Aggregator:

  • 不分组状态:把多个分支的变量聚合为一个输出,类型由选择的第一个变量决定 —— 所以各分支的输出类型要保持一致(都是 String 或都是 Object)
  • 分组状态:需要聚合多组不同含义的变量时使用

反模式:每个分支各接一个 Answer 节点、复制同样的回复模版。改为分支 → 聚合 → 单个 Answer,模版只维护一份。

循环中的数据传递

  • Iteration(迭代):输入一个列表,对每个元素执行一遍内部子流程,产出结果列表。支持并行模式加速,支持配置错误处理(单个元素失败不影响整体)。适合"对每篇新闻生成摘要"这类批量任务
  • Loop(循环):按次数或条件反复执行,每轮更新变量并传给下一轮,内部有「结束循环」特殊节点控制退出。适合"反复优化直到满足条件"这类任务
  • 两者内部都不能放 Start / End 节点,子流程从内部的 Home 开始

常见数据流问题排查

症状常见原因解法
下游选不到想要的变量上游节点没连线,或变量在分支里检查连线;分支变量先过 Branch Aggregator
LLM 提示词报"请在提示中填写上下文变量"配了上下文但提示词里没插入变量在提示词中插入该变量,或移除上下文配置
输出的 JSON 下游解析失败靠提示词约束格式,模型偶尔跑偏改用结构化输出 (JSON Schema 强约束)
聚合后类型不对Branch Aggregator 各分支类型不一致统一各分支输出类型,必要时先用 Transformer 转换
循环里的结果没带出来循环体内变量没写回迭代输出检查 Iteration 输出变量配置