工作流概述
工作流是Dify的核心功能,允许通过可视化方式构建复杂的AI应用逻辑。工作流由多个节点组成,节点之间通过数据流连接,实现复杂的业务逻辑处理。
工作流的作用
# 工作流的作用
workflow_purpose = {
"可视化开发": "无需编程即可构建复杂应用",
"逻辑编排": "将多个步骤组合成完整流程",
"灵活扩展": "支持自定义节点和插件",
"易于维护": "可视化界面便于理解和修改"
}
工作流基础概念
1. 节点(Node)
节点是工作流的基本组成单位,每个节点执行特定的功能:
# 节点类型
节点类型:
LLM节点:
功能: "调用大语言模型生成文本"
输入: "提示词、上下文"
输出: "生成的文本"
知识库检索节点:
功能: "从知识库检索相关信息"
输入: "查询文本"
输出: "相关文档片段"
代码执行节点:
功能: "执行Python代码"
输入: "代码、变量"
输出: "执行结果"
HTTP请求节点:
功能: "调用外部API"
输入: "URL、参数"
输出: "API响应"
条件判断节点:
功能: "根据条件分支处理"
输入: "条件表达式"
输出: "分支选择"
2. 连接(Connection)
连接定义节点之间的数据流向:
# 连接类型
连接类型:
数据流连接:
- 将上游节点的输出作为下游节点的输入
- 支持数据转换和映射
条件连接:
- 根据条件选择不同的分支
- 支持多分支处理
3. 变量(Variable)
变量用于在工作流中存储和传递数据:
# 变量类型
变量类型:
输入变量:
- 工作流的输入参数
- 用户提供的初始数据
中间变量:
- 节点执行过程中产生的数据
- 在节点间传递
输出变量:
- 工作流的最终输出
- 返回给用户的结果
基础节点详解
1. 开始节点
开始节点是工作流的入口,定义输入变量:
# 开始节点配置
开始节点:
功能: "定义工作流输入"
配置:
- 变量名: "定义输入变量名称"
- 变量类型: "文本、数字、对象等"
- 默认值: "可选默认值"
- 必填: "是否必填"
示例:
变量名: user_query
类型: string
描述: "用户查询内容"
2. LLM节点
LLM节点用于调用大语言模型:
# LLM节点配置
LLM节点:
模型选择:
- OpenAI GPT-4
- OpenAI GPT-3.5
- Claude 3
- 本地模型
提示词配置:
- 系统提示词: "定义AI角色和行为"
- 用户提示词: "用户输入内容"
- 上下文: "历史对话或检索内容"
参数设置:
- Temperature: "控制随机性(0-2)"
- Max Tokens: "最大生成长度"
- Top P: "核采样参数"
输出:
- 生成的文本
- Token使用量
- 模型信息
3. 知识库检索节点
知识库检索节点从知识库中检索相关信息:
# 知识库检索节点配置
知识库检索节点:
输入:
- 查询文本: "用户查询内容"
- 知识库选择: "选择要检索的知识库"
检索参数:
- Top K: "返回最相关的K个结果"
- 相似度阈值: "最低相似度要求"
- 检索模式: "语义检索、关键词检索"
输出:
- 相关文档片段
- 相似度分数
- 文档来源
4. 代码执行节点
代码执行节点允许执行Python代码:
# 代码执行节点配置
代码执行节点:
功能: "执行Python代码处理数据"
输入:
- 代码: "Python代码"
- 变量: "可用的输入变量"
安全限制:
- 沙箱执行
- 禁止危险操作
- 超时控制
输出:
- 代码执行结果
- 错误信息(如有)
5. HTTP请求节点
HTTP请求节点用于调用外部API:
# HTTP请求节点配置
HTTP请求节点:
请求配置:
- URL: "请求地址"
- 方法: "GET、POST、PUT、DELETE"
- 请求头: "自定义请求头"
- 请求体: "请求参数"
认证:
- API Key
- Bearer Token
- Basic Auth
输出:
- 响应状态码
- 响应体
- 响应头
6. 条件判断节点
条件判断节点根据条件选择不同的分支:
# 条件判断节点配置
条件判断节点:
条件类型:
- 等于: "变量 == 值"
- 不等于: "变量 != 值"
- 大于: "变量 > 值"
- 小于: "变量 < 值"
- 包含: "变量包含值"
- 正则匹配: "正则表达式匹配"
逻辑运算:
- AND: "且"
- OR: "或"
- NOT: "非"
输出:
- True分支
- False分支
7. 变量设置节点
变量设置节点用于设置和修改变量:
# 变量设置节点配置
变量设置节点:
功能: "设置或修改变量值"
操作:
- 设置新变量
- 修改变量值
- 变量计算
示例:
- 设置变量: result = "处理完成"
- 计算变量: total = price * quantity
8. 结束节点
结束节点定义工作流的输出:
# 结束节点配置
结束节点:
功能: "定义工作流输出"
输出变量:
- 选择要输出的变量
- 设置输出格式
- 数据转换
示例:
输出: {
"answer": "",
"sources": ""
}
工作流设计示例
1. 简单问答工作流
# 简单问答工作流
工作流步骤:
1: "开始节点 - 接收用户问题"
2: "知识库检索节点 - 检索相关信息"
3: "LLM节点 - 基于检索内容生成回答"
4: "结束节点 - 返回答案"
数据流:
用户问题 → 知识库检索 → 相关文档 → LLM生成 → 答案
2. 多步骤处理工作流
# 多步骤处理工作流
工作流步骤:
1: "开始节点 - 接收输入"
2: "代码执行节点 - 数据预处理"
3: "HTTP请求节点 - 调用外部API"
4: "条件判断节点 - 判断结果"
5a: "LLM节点(成功分支) - 生成报告"
5b: "变量设置节点(失败分支) - 设置错误信息"
6: "结束节点 - 返回结果"
数据流:
输入 → 预处理 → API调用 → 条件判断 → 分支处理 → 输出
3. 循环处理工作流
# 循环处理工作流
工作流步骤:
1: "开始节点 - 接收列表数据"
2: "代码执行节点 - 遍历列表"
3: "LLM节点 - 处理每个项目"
4: "变量设置节点 - 累积结果"
5: "条件判断节点 - 判断是否完成"
6: "结束节点 - 返回处理结果"
数据流:
列表输入 → 遍历 → 处理 → 累积 → 判断 → 输出
变量使用
1. 变量引用
# 变量引用语法
变量引用:
基本引用: ""
对象属性: ""
数组元素: ""
嵌套引用: ""
2. 变量作用域
# 变量作用域
作用域:
全局变量:
- 在整个工作流中可用
- 从开始节点定义
局部变量:
- 在特定节点中定义
- 仅在后续节点可用
3. 变量转换
# 变量转换
转换函数:
字符串操作:
- toUpperCase: "转大写"
- toLowerCase: "转小写"
- trim: "去除空格"
数值操作:
- parseInt: "转整数"
- parseFloat: "转浮点数"
数组操作:
- join: "数组连接"
- length: "数组长度"
错误处理
1. 错误捕获
# 错误处理机制
错误处理:
节点错误:
- 自动捕获节点执行错误
- 记录错误信息
- 继续执行或终止
重试机制:
- 配置重试次数
- 重试间隔
- 重试条件
2. 错误分支
# 错误分支处理
错误分支:
配置:
- 错误处理节点
- 错误信息记录
- 降级处理
示例:
- API调用失败 → 使用缓存数据
- 知识库检索失败 → 使用默认回答
最佳实践
1. 工作流设计原则
# 设计原则
设计原则:
单一职责: "每个节点只做一件事"
模块化: "将复杂逻辑拆分为多个节点"
可读性: "使用清晰的节点命名"
可维护性: "添加注释和说明"
2. 性能优化
# 性能优化
优化建议:
并行处理: "使用并行节点提高效率"
缓存机制: "缓存重复计算结果"
批量处理: "批量处理数据减少调用"
异步执行: "使用异步节点提高响应"
总结
Dify工作流基础的关键要点:
- 基础概念:节点、连接、变量
- 节点类型:开始、LLM、知识库检索、代码执行、HTTP请求、条件判断、变量设置、结束
- 工作流设计:简单问答、多步骤处理、循环处理
- 变量使用:变量引用、作用域、转换
- 错误处理:错误捕获、错误分支
- 最佳实践:设计原则、性能优化
掌握这些基础知识,可以开始设计和构建自己的AI应用工作流。


