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
详细文档: nodes/http-request.md
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
示例: patterns/rag.md
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