工作流程變數 (Workflow Variables)
變數 (Variable) 是一個獨立存在於流程(而不是單一節點)內部的具名數值。只需建立一次,即可在需要該數值的任何地方進行讀取或寫入 — 包含在文字欄位中透過 {variable_name} 進行行內替換。
與目錄巨集路徑變數的差異
巨集 (Macros) 是專案系統用來動態建構檔案路徑的範本語法(如 {outputs}/{file_name_base}.{file_extension})。工作流程變數則是創作者自行建立、並在工作流程節點參數之間儲存與重複使用的數值。兩者在底層共用相同的 {name} / {name:spec} 語法結構與格式規範,且在文字欄位中輸入 { 時,專案巨集(例如 workspace_dir 和 workflow_name)亦會與您自訂的變數一同列出 — 但巨集路徑範本是用於定義如何產生檔名,而工作流程變數則是您在執行期自訂並動態變更的數值。若您正在建構檔案儲存路徑,請參閱巨集語法 (Macros)。
何時使用變數
假設工作流程中分佈在不同位置的三個提示詞 (Prompt) 欄位皆需要帶入同一個客戶名稱。從單一來源節點拉線連線至每個需要的欄位雖然可行,但會使畫布線條雜亂不堪;而且若日後想在欄位中直接打字而非拉線,連線機制便會失效。
變數無需任何實體連線即可優雅解決此問題:設定一次變數,即可在任意數量的文字參數中直接引用 {project_name}。一旦變更該變數的值,所有引用它的欄位在下一次執行時皆會自動取用最新數值。
建立變數
節點程式庫中的 Variables 分類提供了一組用於建立與管理變數的專用節點:
- Create Variable — 建立具備名稱、型別與初始值的變數;若目前流程中已存在同名變數,則予以更新。將任何輸出連線至其
value輸入端,系統會自動推斷該變數的資料型別。 - Set Variable — 設定變數的值;若該變數尚不存在則先行建立。其
variable_name欄位為目前作用域中可用變數的下拉選單,並包含 Create new variable 選項,選取後會展開名稱輸入欄位。 - Set Variables from Data — 將 dict、JSON/YAML 字串或鍵值對清單一次轉換為多個變數。當您已手握現成的 JSON 資料(解析後的設定檔、API 回應結果)並希望每個鍵值自動成為獨立變數時極為實用,省去為每個鍵建立一個 Set Variable 節點的麻煩。
- Get Variable — 將變數的當前值讀取為標準輸出連接埠,用於連線至不支援行內
{name}替換的下游節點。 - Has Variable — 檢查特定變數是否存在,以便進行條件分支處理(例如:僅在流程首次執行時建立變數)。
Create Variable 與 Set Variable 一律在節點當前所屬的流程中建立變數(流程作用域,詳見下文)— 目前沒有任何節點可直接建立全域變數。這些節點上的 scope 設定項(位於 Advanced 面板下)控制的是它們去哪裡尋找既有變數,而非決定新變數的建立位置。
這些節點將其存取的變數視為即時狀態 (Live State),而非僅解析一次的靜態值。Create Variable 在每次工作流程或該節點執行時,都會強制將自身重設為未解析 (Unresolved) 狀態,確保一律重新套用其當前的 value。Get Variable、Set Variable 與 Has Variable 每次被查詢解析狀態時,皆會主動比對變數的實際最新值;若與上次讀寫的數值不符,便會將自身標記為未解析 — 如此一來,即可即時感應在其他位置(另一個 Set Variable 節點或不同子流程)所做的變更,無需手動重新觸發。
作用域 (Scopes)
每項變數請求 — create、get、set、list — 皆需指定 scope (作用域),用以控制搜尋查找的範圍:
| 作用域 (Scope) | 行為說明 |
|---|---|
hierarchical (預設) |
先搜尋目前流程,再逐層向上搜尋各父級流程直到根流程,最後搜尋全域變數。由最先相符的項目勝出。 |
current_flow_only |
僅搜尋該節點所在的精確流程。徹底忽略父級流程與全域變數。 |
global_only |
僅搜尋全域變數 — 即不歸屬於任何特定流程的變數。 |
all |
包含所有流程中的所有變數,主要用於列舉遍歷(填充下拉選擇器或清單),而非單一數值解析。 |
在絕大多數情況下,hierarchical 都是最佳選擇:在最頂層流程中定義一次 project_name,其內部巢狀嵌套的所有子流程皆可直接讀取 {project_name} 而無需重新宣告。若某個巢狀子流程定義了專屬的同名 project_name,該巢狀定義會在子流程內部遮蔽 (Shadow) 父級的同名變數;而父級的數值依然完好無損,一旦跳出該子流程即可重新顯現。
簡而言之:距離讀取點最近的定義優先權最高,且流程層級變數優先於全域變數。
變數資料型別
變數的 type 與一般節點參數上的型別標籤完全相同 — str、int、float、bool、json、圖像型別等。Create Variable 與 Set Variable 會根據連線至其 value 輸入端的資料自動推斷型別;除非您未接線而是在節點中直接輸入字面常數,否則無需手動設定。
僅有持有 str 或 int 數值(不含 bool)的變數,才能在文字欄位中透過 {name} 標籤進行行內替換 — 詳見下方的文字欄位中的行內替換。持有其他型別(JSON、圖像、清單)的變數依然能與 Get Variable / Set Variable 完美搭配運作;只是無法以純標籤形式直接插入文字欄位中,因為圖像等物件無法以合理方式在行內彩現為文字。
在執行期間設定與讀取數值
若在節點之外直接針對引擎的請求 API 撰寫自動化腳本,相關的請求介面為 CreateVariableRequest、GetVariableValueRequest 以及 SetVariableValueRequest — 每個請求皆接受 name 與 lookup_scope。SetVariableValueRequest 會將下游所有引用該變數且已解析的節點標記為未解析,因此在編輯中途修改變數值,能正確使依賴舊值運算的所有項目失效並重新觸發。
對於行內替換,在純變數查找之上還有一層整合機制:當節點執行時,引擎會將其參數值中的所有 {name} 標籤,與由您的工作流程變數加上專案唯讀巨集數值(workspace_dir、workflow_name 以及專案範本中定義的所有目錄)合併而成的清單進行解析比對 — 若名稱發生衝突,以您自訂的工作流程變數為最高優先權。正是這種合併機制,使得文字欄位能同時並排引用 {workflow_name} 與 {project_name},即便前者源自專案設定、後者源自您自訂的變數。
文字欄位中的行內替換
在任何支援替換的文字參數欄位中輸入 {,編輯器便會彈出變數選取器,列出目前作用域內的所有變數與專案巨集,並依來源分組呈現:
點選其中一項,或自行鍵入變數名稱並補齊右大括號 — {project_name} — 引擎便會在執行期自動替換為相應數值。若該名稱無法解析為作用域內的任何項目,標籤會完好保留在文字中(或者若是選用標籤則靜默丟棄 — 詳見下文),因此拼寫錯誤絕不會靜默輸出錯誤數值。
若您特別希望字面上的 {literal text like this} 保持原樣傳遞而不被當作標籤解析,可透過 Set Variable Substitution 節點在個別工作流程層級關閉此替換行為。
格式規範 (Format specs)
標籤可在 : 之後附加格式規範修飾元(由左至右依序套用),其語法與底層支援清單與巨集語法 → 字串轉換所記錄的完全一致:
| 格式規範 | 轉換效果 |
|---|---|
:lower |
全小寫字母 |
:upper |
全大寫字母 |
:title |
首字大寫 (Title Case) |
:snake |
蛇形命名法 (snake_case) |
:pascal |
帕斯卡命名法 (PascalCase) |
:camel |
駝峰命名法 (camelCase) |
:screaming_snake |
全大寫蛇形 (SCREAMING_SNAKE_CASE) |
:slug |
網址友善 Slug (url-safe-slug) |
:dot |
點分隔命名 (dot.case) |
:abbrev |
擷取每個單字的首字母 |
:trim |
剔除頭尾空白字元 |
{project_name} → "Autumn Campaign"
{project_name:lower} → "autumn campaign"
{project_name:slug} → "autumn-campaign"
{project_name:snake:upper} → "AUTUMN_CAMPAIGN"
此外,還有兩項繼承自巨集語法的機制在此處運作邏輯相同:
- 選用標記
?— 當變數未找到時,{project_name?}會彩現為空字串而非留下字面標籤,讓您能靈活建構在變數未設定時自動去除該子句的語句。 - 預設值
|default— 當project_name不在作用域內時,{project_name|untitled}會替換為untitled。
數值補零填塞 (:03)、序號欄位 ({###}) 以及前導分隔符號 (:^prefix) 同樣由同一個底層引擎解析,在文字欄位中技術上完全有效,但它們主要是為了建構帶有自動遞增計數器的檔名而設計 — 如需此類行為請參閱巨集語法 (Macros)。對於一般文字替換,上述的字串轉換以及選用/預設值規範即可滿足絕大多數日常情境。
實戰範例:跨多個提示詞共用專案名稱
假設有一個工作流程負責生成概念藝術圖,且多個提示詞欄位皆需要引用同一個專案名稱:
-
在流程頂部放置一個 Create Variable 節點。將
variable_name設為project_name,在value中直接鍵入Autumn Campaign(常數字面值無需接線),並讓variable_type維持自動推斷的str。 -
在提示詞建構節點的文字欄位中輸入:
A cinematic key art poster for {project_name}, dramatic lighting, wide shot -
在流程另一處的第二個提示詞欄位中輸入:
Concept sketch, {project_name:slug} style guide, muted palette -
執行一次流程。兩個提示詞皆會帶入 "Autumn Campaign"(或您輸入的任何文字),且第二個提示詞在套用 slug 規範處會成功彩現為
autumn-campaign。
若要在新的執行階段變更專案名稱,只需修改 Create Variable 節點上的數值(或拉線連入不同的來源)— 下一次執行流程時,所有引用 {project_name} 的欄位皆會自動更新,完全無需重新接線。