跳轉到內容

變數與資料流設計技巧

節點會連,變數不會傳 —— 這是新手最常卡住的地方。本篇講清楚資料在流程中怎麼流動、怎麼變形。

先畫資料流,再擺節點

搭建前先回答三個問題:

  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 輸出變數配置