Dify节点的详细介绍(上)
节点是工作流的关键构成,通过连接不同的节点,从而实现工作流的功能。首先我们要明白一个核心概念:节点是为功能服务的。根据节点的功能,可以将节点划分为以下三类:基础与流程控制、数据处理与转换、AI与外部交互。
- 基础与流程控制:开始、结束、条件分支、迭代、循环、直接回复
- 数据处理与转换:变量赋值、变量聚合、参数提取、模板转换、列表操作、问题分类、文档提取
- AI与外部交互:LLM、知识检索、HTTP请求、Agent、工具、代码执行
以下是基础与流程控制类节点详细介绍:
1. 开始节点
作为工作流的「启动钥匙」,开始节点主要作用就是做数据的采集。数据分为输入字段、系统变量两种,输入字段用来采集用户输入的数据,而以sys.
开头的则是系统变量,系统变量用来记录应用的全局信息。
- 输入字段:点击
+
可以添加多个输入字段 - 系统变量:系统变量不可更改,也不能自己添加,是应用内预设的系统级参数。通常用于进阶开发场景,例如搭建多轮次对话应用、收集应用日志与监控、记录不同应用和用户的使用行为等。
输入字段可以添加以下6种类型的数据
类型 | 适用场景 | 示例 |
---|---|---|
文本 | 简短信息收集 | 姓名/电话号码 |
段落 | 长文本描述 | 项目需求描述 |
下拉选项 | 标准化输入 | 产品型号选择 |
数字 | 数值型数据 | 订单数量 |
单文件 | 单个文件上传 | 合同文档上传 |
文件列表 | 批量文件处理 | 多图上传场景 |
系统变量,工作流(Workflow )和对话流(Chatflow)的系统变量所包含的信息稍有不同,具体如下
变量名称 | 数据类型 | 说明 | 备注 |
---|---|---|---|
sys.user_id | String | 每个用户在使用应用时,系统自动分配的唯一标识符,用于区分不同的对话用户 | 公共变量 |
sys.app_id | String | 系统为每个应用分配的唯一标识符,用于区分不同的应用,并记录当前应用的基本信息 | 公共变量 |
sys.workflow_id | String | 用于记录当前应用内所包含的所有节点信息 | 公共变量 |
sys.workflow_run_id | String | 用于记录应用中的运行情况 | 公共变量 |
sys.files[LEGACY] | Array[File] | 文件参数,存储用户初始使用应用时上传的图片 | Workflow 独有,图片上传功能需在应用编排页右上角的 “功能” 处开启,未来将去掉图片上传功能,因为新的文件上传已经包含了图片上传 |
sys.query | String | 用户在对话框中初始输入的内容 | Chatflow 独有 |
sys.files | Array[File] | 用户在对话框内上传的图片 | Chatflow 独有,图片上传功能需在应用编排页右上角的 “功能” 处开启 |
sys.dialogue_count | Number | 用户与应用交互时的对话轮数。每轮对话后自动计数增加 1,可以和 if-else 节点搭配出丰富的分支逻辑。 | Chatflow 独有,例如到第 X 轮对话时,回顾历史对话并给出分析 |
sys.conversation_id | String | 对话框交互会话的唯一标识符,将所有相关的消息分组到同一个对话中,确保 LLM 针对同一个主题和上下文持续对话 | Chatflow 独有 |
2. 结束节点
结束节点用于定义工作流的终点并输出最终结果。每个工作流至少包含一个结束节点,因为只有当流程运行到结束节点时,才会输出执行结果,且结束节点之后不能再添加其他节点。
如果工作流中存在条件分支,需要根据不同的分支情况分别定义多个结束节点。
在设置结束节点时,需要声明一个或多个输出变量,这些变量可以引用前面节点的输出变量,以便将整个流程的关键结果汇总并输出。
3. 条件分支
条件分支用来控制流程的走向,通过判断不同的条件,选择执行对应的节点
条件分支的运行机制包含以下六个路径:
- IF 条件:选择变量,设置条件和满足条件的值;
- IF 条件判断为
True
,执行 IF 路径; - IF 条件判断为
False
,执行 ELSE 路径; - ELIF 条件判断为
True
,执行 ELIF 路径; - ELIF 条件判断为
False
,继续判断下一个 ELIF 路径或执行最后的 ELSE 路径;
条件类型
数字类型支持以下条件判断:=、≠、>、 <、 >=、 <=、 为空、不为空
其他类型支持以下条件判断:
- 包含(Contains)
- 不包含(Not contains)
- 以什么开头(Start with)
- 以什么结束(End with)
- 是(Is)
- 不是(Is not)
- 为空(Is empty)
- 不为空(Is not empty)
4. 迭代节点
迭代节点的作用是对数组中的元素依次执行相同的操作步骤,直至输出所有结果。它通常需要与数组变量配合使用。
例如在翻译长篇文章的场景中,如果直接将全部内容输入大语言模型可能会超出单次处理限制。这时可以先通过上游节点将文章拆分成多个片段,再使用迭代节点对每个片段分别执行翻译操作,从而避免触发消息长度限制。
数组是一种特定的数据类型,通常包含多个元素。其中元素用逗号分隔,以 [
开头,以 ]
结尾
字符串数组的格式如下:[“文本1”, “文本2”,“文本3”,“文本4”,“文本5”]
数字数组的格式如下:[1,2,3,4,5]
JSON数组的格式如下:
[
{
"name": "张三",
"age": 18,
"email": "zhangsan@xxx.com"
},
{
"name": "李四",
"age": 25,
"email": "lisi@xxx.com"
},
{
"name": "王五",
"age": 18,
"email": "wangwu@xxx.com"
}
]
5. 循环节点
循环节点用来执行一段逻辑直到满足条件或者达到循环次数上限
循环节点的配置包含两个关键项:
配置项 | 作用 | 示例 |
---|---|---|
循环终止条件(Loop Termination Condition) | 设置循环何时停止。可以在条件中使用循环体内的变量或会话中的全局变量。 | 当变量 x > 80 并且 num <90 时,停止循环。 |
最大循环次数(Maximum Loop Count) | 限制最多执行的轮次,避免无限循环。 | 最多执行 100 轮,无论是否满足退出条件。 |
总结:
- 循环终止条件:明确设置循环停止的条件,例如变量值达到某个阈值。
- 最大循环次数:设置一个上限,防止循环无限运行。
循环节点和迭代节点适用于不同的任务场景:
类型 | 特点 | 适用场景 |
---|---|---|
循环(Loop) | 轮次之间存在依赖关系,每一轮执行都依赖上一轮的结果。 | 适用于递归、优化问题等需要依赖前一轮结果的场景。 |
迭代(Iteration) | 轮次之间无依赖关系,每一轮任务可以独立运行,无需依赖前一轮。 | 适用于数据批量处理等独立任务的场景。 |
总结:
- 如果任务需要依赖前一轮的结果(如递归或优化问题),选择 循环节点。
- 如果任务可以独立运行(如批量处理数据),选择 迭代节点。
6. 直接回复
直接回复节点用于定义 Chatflow 流程中回复的内容。支持多种类型的输出。可以在文本编辑器中自由定义回复格式,包括自定义一段固定的文本内容、使用前置步骤中的输出变量作为回复内容、或者将自定义文本与变量组合后回复。
直接回复节点可以不作为最终的输出节点,作为流程过程节点时,可以在中间步骤流式输出结果。
可随时加入节点将内容流式输出至对话回复,支持所见即所得配置模式并支持图文混排,如:
- 输出 LLM 节点回复内容
- 输出生成图片
- 输出纯文本
下一节,我们将详细介绍数据处理与转换类节点
🔥《零基础小白AI实战教程:手把手教你打造专属的智能体》🚀 系列教程更新中!
✅ 已更新:AI实践虚拟化平台安装
✅ 已更新:Docker Desktop 安装
✅ 已更新:Ollama安装教程
✅ 已更新:DeepSeek私有化部署
✅ 已更新:Dify私有化部署
✅ 已更新:Dify + DeepSeek搭建本地私有化知识库
✅ 已更新:Dify应用类型的选择
✅ 已更新:Dify升级指南
✅ 已更新:Dify节点的详细介绍(上)
✅ 已更新:Dify节点的详细介绍(中)
✅ 已更新:Dify节点的详细介绍(下)
👉 关注公众号"北灵聊AI"获取最新更新,免费领取教程资料和源码