工作流系统(Workflow System)是 Dify 的核心组件,它支持通过可视化编程界面创建复杂的 AI 应用程序。它允许用户通过将不同的功能块连接在一起来设计工作流,以处理数据、与 AI 模型交互、管理条件并执行各种操作。本文将详细分析工作流系统的架构、组件和功能,重点介绍了前端编辑器和后端执行引擎。
👆👆👆欢迎关注,一起进步👆👆👆
往期内容推荐阅读
- 从零开始学 Dify - 简介
- 从零开始学 Dify-系统架构
- 从零开始学 Dify- API 后端架构原来是这样设计的
- 从零开始学 Dify- 帐户与租户管理系统设计揭秘
- 从零开始学 Dify- 模型提供者系统设计实现模型统一调用接口
- 从零开始学 Dify- RAG 知识库系统设计详解
- 从零开始学 Dify- 对话系统的关键功能
架构概述
工作流系统在构建时明确区分了前端和后端组件:
- 前端提供了一个基于 ReactFlow 的可视化编辑器,允许用户通过添加节点并连接它们来设计工作流程
- 后端处理工作流存储、验证和执行
工作流系统架构
核心数据表
前端工作流编辑器
工作流编辑器是一个可视化画布,用户可以在其中创建和编辑工作流。它基于 ReactFlow 构建,ReactFlow 是一个用于构建基于节点的编辑器和交互式图表的库。
工作流编辑器包括几个关键组件:
- 标题(Header) :包含发布、更新和管理工作流版本的操作
- 面板(Panel) :显示所选节点的配置选项
- 操作员(Operator) :提供添加块、缩放和更改模式的工具
- ReactFlow :显示并可操作节点和边的主画布
节点类型
工作流系统支持各种类型,每种都有特定的功能:
| 类别 | 节点类型 | 目的 | | --- | --- | --- | | 流程控制 | 开始、结束 | 定义工作流的入口点和出口点 | | 输出 | 回答 | 定义聊天对话的回复内容 | | AI | LLM, Agent | 调用大型语言模型进行文本生成 | | Knowledge | Knowledge Retrieval | 从知识库查询内容 | | Logic | If/Else,问题分类器 | 实现条件分支 | | Code | 代码、模板转换 | 执行代码或转换数据 | | 数据 | HTTP 请求,变量分配器 | 获取外部数据或管理变量 | | 迭代 | 迭代、循环 | 处理列表或创建循环 | | Tools | Tool | 调用外部工具或插件 |
节点交互
工作流编辑器中的节点支持各种交互:
- 拖放(Drag and Drop) :可以在画布上拖动节点
- 连接(Connect) :可以通过从源手柄拖动到目标手柄来连接节点
- 配置(Configure) :单击节点显示其配置面板
- 调整大小(Resize) :某些节点可以调整大小
- 删除 :可以删除节点
工作流编辑器包括针对这些操作的复杂交互处理:
后端工作流管理
工作流系统的后端处理工作流的存储、验证和执行。
Workflow Services
后端为工作流管理提供了几种服务:
- WorkflowService :处理工作流的 CRUD 操作,包括草稿和已发布版本
- AppDslService :以 DSL(领域特定语言)的形式管理导入和导出工作流
- WorkflowExecutionService :执行工作流并管理其状态
工作流 CRUD 操作
Dify 中的工作流程遵循草稿和发布模型:
- 草稿工作流程(Draft Workflow) :每个工作流程应用程序都有一个可以编辑的草稿版本
- 已发布的工作流程(Published Workflow) :草稿准备好后即可发布,从而创建版本快照
- 版本历史记录(Version History) :已发布的工作流程有版本控制,允许用户查看和恢复以前的版本
DSL 导入/导出
可以使用领域特定语言 (DSL) 将工作流导出为 YAML 文件。这允许:
- 备份(Backup) :保存工作流程以供备份
- 共享(Sharing) :在实例或用户之间共享工作流程
- 版本控制 :将工作流程存储在版本控制系统中
AppDslService 处理导入和导出工作流,包括处理敏感信息:
工作流执行
工作流系统包括用于执行工作流的组件,既可用于开发期间的测试,也可用于生产使用。
执行流程
执行工作流时,它遵循以下步骤:
- 初始化(Initialization) :加载工作流配置并创建执行上下文
- 节点执行(Node Execution) :根据图执行工作流中的每个节点
- 数据流(Data Flow) :根据连接在节点之间传递数据
- **错误处理(
Error Handling)** :根据节点配置处理错误
- 完成(Completion) :返回最终结果
错误处理
节点可以配置不同的错误处理策略:
- None :发生错误时停止执行
- 默认值 :如果发生错误,则返回默认值
- 失败分支(Fail Branch) :发生错误时执行特定分支
此外,可以将节点配置为在失败时重试:
高级功能特性
变量和数据流
工作流系统支持多种类型的变量:
- 环境变量(Environment Variables) :存储配置和密码等
- 对话变量(Conversation Variables) :存储会话之间需要记住的交互信息
- 节点输出变量(Node Output Variables) :每个节点生成的数据可供后续节点使用
变量是有类型的,可以包括:
- Strings 字符串
- Numbers 数字
- Objects 对象
- Arrays 数组
- Files 文件
并行和迭代处理
工作流系统支持高级流程控制:
- 并行处理 :同时执行多个分支
- 迭代 :逐个处理列表中的项目
- 循环 :重复节点序列,直到满足条件
工作流作为工具
工作流系统的一个强大功能是能够将工作流公开为可用于其他工作流或应用程序的工具:
- 工作流可以作为工具发布
- 该工具可以像任何其他工具一样在其他工作流程中使用
- 这使得工作流程的可重用性和组合成为可能
与其他 Dify 组件集成
工作流系统与 Dify 的其他核心组件集成:
模型提供者集成
工作流可以通过模型提供程序系统使用大型语言模型 (LLM):
- LLM 节点连接到模型提供系统以访问各种 AI 模型
- 系统处理身份验证、速率限制和特定于模型的配置
知识库集成
知识检索节点可以访问 Dify 的知识库:
- 工作流可以查询知识库来检索相关信息
- 检索到的内容可用于提示或进一步处理
工具集成
工作流程可以使用各种工具:
- 内置工具(Built-in Tools) :Dify 提供的系统工具
- 自定义工具(Custom Tools) :用户定义的 API 工具
- 插件工具(Plugin Tools) :已安装插件的工具
- 工作流工具(Workflow Tools) :其他以工具形式公开的工作流
总结
工作流系统是 Dify 的一个强大组件,它使用户能够通过可视化界面创建复杂的 AI 应用程序。它提供了一种灵活的、基于节点的方法来设计流程,可以整合 AI 模型、数据操作、外部服务和逻辑操作。
主要特点包括:
- 用于设计工作流程的可视化编辑器
- 支持多种节点类型用于不同的操作
- 节点间数据流的变量系统
- 高级流程控制,包括条件、迭代和循环
- 与其他 Dify 组件(如模型、知识库和工具)集成
- 错误处理和重试机制
- 通过 DSL 导入/导出功能
工作流系统使技术和非技术用户无需编写代码即可创建复杂的 AI 应用程序,同时仍提供复杂用例所需的灵活性和功能。
参考资料
https://github.com/langgenius/dify
推荐阅读
- 从零开始学 Dify - 简介
- 从零开始学 Dify-系统架构
- 从零开始学 Dify- API 后端架构原来是这样设计的
- 从零开始学 Dify- 帐户与租户管理系统设计揭秘
- 从零开始学 Dify- 模型提供者系统设计实现模型统一调用接口
- 从零开始学 Dify- RAG 知识库系统设计详解
- 从零开始学 Dify- 对话系统的关键功能
接下来将分别介绍各个子系统:
模型提供者系统(Model Provider System) ✅
RAG 知识系统(RAG Knowledge System) ✅
对话系统(Conversation System) ✅
工作流系统(Workflow System) ✅
👆👆👆欢迎关注,一起进步👆👆👆
欢迎留言讨论哈
🧐点赞、分享、推荐 ,恭喜发财👇
