干貨分享:Dify中四種核心變量詳解!
在 Dify 工作流(Workflow 和 Chatflow)的實現中,“變量”做為最基礎、最核心的組件發揮著不可或缺的作用,因為它承載了不同節點間數據傳遞的作用。
也就是說,我們在實現 Workflow 和 Chatflow 時,需要一種動態數據容器,能夠存儲和傳遞不固定的內容,在不同的節點內被相互引用,實現信息在節點間的靈活通信,這個就是“變量”了。
“
變量作用:用于不同節點的信息傳遞。
例如以下場景,我們需要將第一個節點用戶輸入的內容,傳遞給第二個節點大模型,就需要使用變量進行傳遞。
圖片
1.變量分類
Dify 中總共有以下 4 種變量類型:
- 用戶(輸入)變量
- 系統變量
- 環境變量
- 會話變量
分別來看這四種變量類型的詳細介紹。
2.用戶變量
用戶變量是用戶在與 Dify 應用交互過程中直接輸入的信息,這些信息可以是文本、段落(多行文本)、下拉選項、數字、單文件、文件列表(多文件)等,如下圖所示:
圖片
例如,在對話框中,用戶輸入“我想查詢明天的天氣”,這個輸入內容就會作為用戶變量,應用可以根據這個變量調用天氣查詢接口等。
注意:變量名稱只能為英文、數字和下劃線。
3.系統變量
系統變量是由 Dify 預設的系統級參數,可以被其它節點全局讀取,用于記錄和管理應用運行過程中的關鍵信息,以 sys. 前綴開頭。
其中 WorkFlow 和 ChatFlow 的系統變量還有所不同。
Workflow
Workflow 類型應用提供以下系統變量:
變量名稱 | 數據類型 | 說明 | 備注 |
sys.files[LEGACY] | Array[File] | 文件參數,存儲用戶初始使用應用時上傳的圖片 | 圖片上傳功能需在應用編排頁右上角的 “功能” 處開啟 |
sys.user_id | String | 用戶 ID,每個用戶在使用工作流應用時,系統會自動向用戶分配唯一標識符,用以區分不同的對話用戶 | |
sys.app_id | String | 應用 ID,系統會向每個 Workflow 應用分配一個唯一的標識符,用以區分不同的應用,并通過此參數記錄當前應用的基本信息 | 面向具備開發能力的用戶,通過此參數區分并定位不同的 Workflow 應用 |
sys.workflow_id | String | Workflow ID,用于記錄當前 Workflow 應用內所包含的所有節點信息 | 面向具備開發能力的用戶,可以通過此參數追蹤并記錄 Workflow 內的包含節點信息 |
sys.workflow_run_id | String | Workflow 應用運行 ID,用于記錄 Workflow 應用中的運行情況 | 面向具備開發能力的用戶,可以通過此參數追蹤應用的歷次運行情況 |
圖片
Chatflow
Chatflow 類型應用提供以下系統變量:
變量名稱 | 數據類型 | 說明 | 備注 |
sys.query | String | 用戶在對話框中初始輸入的內容 | |
sys.files | Array[File] | 用戶在對話框內上傳的圖片 | 圖片上傳功能需在應用編排頁右上角的 “功能” 處開啟 |
sys.dialogue_count | Number | 用戶在與 Chatflow 類型應用交互時的對話輪數。每輪對話后自動計數增加 1,可以和 if-else 節點搭配出豐富的分支邏輯。例如到第 X 輪對話時,回顧歷史對話并給出分析 | |
sys.conversation_id | String | 對話框交互會話的唯一標識符,將所有相關的消息分組到同一個對話中,確保 LLM 針對同一個主題和上下文持續對話 | |
sys.user_id | String | 分配給每個應用用戶的唯一標識符,用以區分不同的對話用戶 | |
sys.app_id | String | 應用 ID,系統會向每個 Workflow 應用分配一個唯一的標識符,用以區分不同的應用,并通過此參數記錄當前應用的基本信息 | 面向具備開發能力的用戶,通過此參數區分并定位不同的 Workflow 應用 |
sys.workflow_id | String | Workflow ID,用于記錄當前 Workflow 應用內所包含的所有節點信息 | 面向具備開發能力的用戶,可以通過此參數追蹤并記錄 Workflow 內的包含節點信息 |
sys.workflow_run_id | String | Workflow 應用運行 ID,用于記錄 Workflow 應用中的運行情況 | 面向具備開發能力的用戶,可以通過此參數追蹤應用的歷次運行情況 |
圖片
4.環境變量
環境變量用于保護工作流內所涉及的敏感信息,例如運行工作流時所涉及的 API 密鑰、數據庫密碼等。它們被存儲在工作流程中,而不是代碼中,以便在不同環境中共享。
環境變量支持以下三種數據類型:
圖片
- String 字符串
- Number 數字
- Secret 密鑰
其中,Secret 密鑰用于定義敏感信息或數據,導出 DSL 時設置了防泄露機制。
環境變量擁有以下特性:
- 環境變量可在大部分節點內全局引用;
- 環境變量命名不可重復;
- 環境變量為只讀變量,不可寫入。
5.會話變量
會話變量只存在 ChatFlow 場景中,因為它是面向多輪對話場景,而 Workflow 類型應用的交互是線性而獨立的,不存在多次對話交互的情況,因此會話變量僅適用于 Chatflow 類型(聊天助手 → 工作流編排)應用。
會話變量允許應用開發者在同一個 Chatflow 會話內,指定需要被臨時存儲的特定信息,并確保在當前工作流內的多輪對話內都能夠引用該信息,如上下文、上傳至對話框的文件(即將上線)、 用戶在對話過程中所輸入的偏好信息等。好比為 LLM 提供一個可以被隨時查看的”備忘錄”,避免因 LLM 記憶出錯而導致的信息偏差。
例如,你可以將用戶在首輪對話時輸入的語言偏好存儲至會話變量中,LLM 在回答時將參考會話變量中的信息,并在后續的對話中使用指定的語言回復用戶。
圖片
會話變量支持以下六種數據類型:
- String 字符串
- Number 數值
- Object 對象
- Array[string] 字符串數組
- Array[number] 數值數組
- Array[object] 對象數組
會話變量具有以下特性:
- 會話變量可在大部分節點內全局引用;
- 會話變量的寫入需要使用變量賦值節點;
- 會話變量為可讀寫變量。
使用“變量賦值”組件修改會話變量的值:
圖片
小結
在 Dify 工作流(Workflow 和 Chatflow)的實現中,“變量”做為最基礎、最核心的組件發揮著不可或缺的作用,因為它承載了不同節點間數據傳遞的作用。變量總共分為 4 種類型:用戶變量、系統變量、環境變量和會話變量,我們需要根據不同的業務場景選擇合適的變量類型進行使用。