Dify 工作流設計 SKILL
掌握 Dify 工作流設計的核心知識與最佳實務
快速導覽
工作流概述
Dify 工作流是一個可視化的 AI 應用編排系統,透過節點與邊的組合,實現複雜的業務邏輯。
核心概念
- 節點 (Node):工作流的基本執行單元,每個節點執行特定功能
- 邊 (Edge):連接節點,定義資料流與執行順序
- 變數 (Variable):在節點間傳遞資料
- DSL (Domain Specific Language):YAML 格式的工作流定義語言
工作流類型
- Workflow:標準工作流,適合複雜的多步驟處理
- Advanced Chat:進階對話應用,支援工作流編排
- Agent:智慧代理,自主決策與工具呼叫
執行模型
- 佇列驅動:基於 Ready Queue 的節點排程
- 事件驅動:節點執行產生事件流
- 平行執行:支援 2-8 個工作執行緒平行處理
- 串流回應:支援即時串流輸出
核心節點類型
1. Start 節點
功能:工作流的入口,定義輸入變數
配置範例:
- data:
desc: ''
selected: false
title: 開始
type: start
variables:
- label: 使用者輸入
max_length: 1000
required: true
type: text-input
variable: user_input
id: start
type: custom
詳細文件:nodes/start.md
2. LLM 節點
功能:呼叫大語言模型進行推理與生成
配置範例:
- data:
type: llm
model:
provider: openai
name: gpt-4
completion_params:
temperature: 0.7
max_tokens: 2000
prompt_template:
- id: system
role: system
text: "你是一個專業的助手"
- id: user
role: user
text: "{{#sys.query#}}"
context:
enabled: true
variable_selector: ["knowledge", "result"]
id: llm
關鍵參數:
model:模型配置(提供商、名稱、參數)prompt_template:提示詞模板(支援系統訊息與使用者訊息)context:上下文配置(啟用知識庫檢索結果)memory:對話記憶配置vision:視覺能力配置(支援圖像輸入)
詳細文件:nodes/llm.md
3. Agent 節點
功能:智慧代理,根據使用者需求自主呼叫工具
配置範例:
- data:
type: agent
agent_parameters:
instruction:
type: constant
value: "根據使用者需求,呼叫合適的工具完成任務"
model:
type: constant
value:
provider: openai
model: gpt-4
completion_params:
temperature: 0.7
query:
type: constant
value: "{{#sys.query#}}"
tools:
type: constant
value:
- enabled: true
provider_name: time
tool_name: current_time
type: builtin
- enabled: true
provider_name: duckduckgo
tool_name: ddgo_search
type: builtin
agent_strategy_name: function_calling
id: agent
支援的策略:
function_calling:函式呼叫(推薦)react:ReAct 推理模式
詳細文件:nodes/agent.md
4. Knowledge Retrieval 節點
功能:從知識庫檢索相關資訊(RAG)
配置範例:
- data:
type: knowledge-retrieval
dataset_ids:
- "dataset-uuid-1"
- "dataset-uuid-2"
query_variable_selector: ["start", "sys.query"]
retrieval_mode: single
single_retrieval_config:
model:
provider: openai
name: text-embedding-3-small
top_k: 3
score_threshold: 0.7
reranking_model:
provider: cohere
model: rerank-english-v2.0
id: knowledge
檢索模式:
single:單次檢索multiple:多次檢索
詳細文件:nodes/knowledge-retrieval.md
5. Code 節點
功能:執行 Python 或 JavaScript 程式碼
配置範例:
- data:
type: code
code_language: python3
code: |
def main(input_text: str) -> dict:
# 處理邏輯
result = input_text.upper()
return {
"output": result,
"length": len(result)
}
variables:
- variable: input_text
value_selector: ["start", "user_input"]
outputs:
output:
type: string
length:
type: number
id: code
支援的語言:
- Python 3
- JavaScript (Node.js)
詳細文件:nodes/code.md
6. HTTP Request 節點
功能:呼叫外部 HTTP API
配置範例:
- data:
type: http-request
method: POST
url: "https://api.example.com/endpoint"
headers:
Content-Type: application/json
Authorization: "Bearer {{#env.API_KEY#}}"
body:
type: json
data:
query: "{{#sys.query#}}"
options:
temperature: 0.7
timeout: 30
id: http
支援的方法:
- GET, POST, PUT, DELETE, PATCH
7. Tool 節點
功能:呼叫內建或自訂工具
配置範例:
- data:
type: tool
provider_id: google_translate
provider_type: builtin
provider_name: google_translate
tool_name: translate
tool_parameters:
content:
type: mixed
value: "{{#sys.query#}}"
dest:
type: mixed
value: "zh-CN"
id: tool
工具類型:
builtin:內建工具api:API 工具workflow:工作流工具
詳細文件:nodes/tool.md
8. If-Else 節點
功能:條件分支控制
配置範例:
- data:
type: if-else
conditions:
- variable_selector: ["llm", "text"]
comparison_operator: contains
value: "關鍵詞"
logical_operator: and
id: condition
支援的運算子:
contains,not containsis,is notempty,not empty>,<,>=,<=,=,!=
詳細文件:nodes/if-else.md
9. Iteration 節點
功能:迭代處理陣列資料
配置範例:
- data:
type: iteration
iterator_selector: ["start", "items"]
output_selector: ["iteration_inner", "output"]
parallel_nums: 3
error_handle_mode: continue
id: iteration
錯誤處理模式:
continue:繼續執行stop:停止迭代
詳細文件:nodes/iteration.md
10. Answer 節點
功能:輸出工作流結果
配置範例:
- data:
type: answer
answer: "{{#llm.text#}}"
id: answer
詳細文件:nodes/answer.md
設計模式
1. 順序管道模式
適用場景:簡單的線性處理流程
結構:
Start → LLM → Answer
2. 條件分支模式
適用場景:根據條件執行不同的處理邏輯
結構:
Start → LLM → If-Else → [分支A / 分支B] → Answer
3. 迭代處理模式
適用場景:批次處理陣列資料
結構:
Start → Code → Iteration → LLM → Answer
4. 知識檢索模式(RAG)
適用場景:基於知識庫的問答
結構:
Start → Knowledge Retrieval → LLM (with context) → Answer
5. 多源聚合模式
適用場景:整合多個資料來源的資訊
結構:
Start → [Tool1, Tool2, HTTP] → Variable Aggregator → LLM → Answer
工作流範本
簡單問答
描述:最基礎的問答工作流
節點:Start → LLM → Answer
RAG 助手
檔案:templates/rag-assistant.yml
描述:基於知識庫的智慧助手
節點:Start → Knowledge Retrieval → LLM → Answer
Agent 工具呼叫
描述:智慧代理自主呼叫工具
節點:Start → Agent → Answer
多步驟處理
描述:複雜的多步驟處理流程
節點:Start → Code → HTTP → LLM → If-Else → Answer
變數系統
系統變數
{{#sys.query#}} # 使用者查詢
{{#sys.files#}} # 上傳的檔案
{{#sys.conversation_id#}} # 會話 ID
{{#sys.user_id#}} # 使用者 ID
節點變數
{{#節點ID.輸出欄位#}} # 引用節點輸出
{{#llm.text#}} # LLM 文字輸出
{{#knowledge.result#}} # 知識檢索結果
{{#code.output#}} # 程式碼節點輸出
會話變數
{{#conversation.變數名#}} # 會話級變數
環境變數
{{#env.API_KEY#}} # 環境變數
{{#env.DATABASE_URL#}} # 資料庫連線
迭代變數
{{#item#}} # 當前迭代項
{{#index#}} # 當前索引
最佳實務
1. 模組化設計
- 將複雜流程拆分為多個獨立節點
- 使用變數傳遞資料,避免硬編碼
- 合理使用條件分支與迭代節點
2. 變數命名規範
- 使用有意義的變數名稱
- 遵循統一的命名約定
- 添加必要的描述資訊
3. 錯誤處理
- 在關鍵節點添加錯誤處理邏輯
- 使用條件分支處理異常情況
- 提供友善的錯誤提示
4. 效能最佳化
- 避免不必要的節點呼叫
- 合理使用快取機制
- 控制迴圈迭代次數
- 使用平行分支提升效能
5. 可維護性
- 添加節點描述與註解
- 使用清晰的節點命名
- 保持工作流結構簡潔
- 定期審查與最佳化
詳細內容:best-practices.md
下一步
相關 SKILL
- 02-plugin SKILL - 開發自訂工具與外掛
- 03-performance SKILL - 最佳化工作流效能
- 06-reference SKILL - DSL 語法參考
版本:v1.0.0 最後更新:2026-03-04 返回:總 SKILL