支持私有云部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Dify工作流节点篇(上)

发布日期:2025-03-26 07:40:32 浏览次数: 1778 来源:PM墨者
推荐语

掌握Dify工作流节点,高效设计自动化流程。

核心内容:
1. 工作流节点的作用与设计重要性
2. “开始”节点的配置与输入字段类型
3. 大语言模型(LLM)节点的多种应用场景

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家
之前已经带大家了解了变量,那么今天我们就来聊一聊在dify最新的V1.0.1版本工作流中的节点,希望可以让小伙伴们对工作流中的节点有个明确的了解,只有了解了各节点的作用,才能更好的设计我们的工作流。
由于节点内容较多,我会用三篇来讲解,今天就聊上篇。
节点是工作流中的关键构成,通过连接不同功能的节点,执行工作流的一系列操作。
开始(Start)
开始】节点是每个工作流应用(Chatflow / Workflow)必备的预设节点,定义流程启动的初始参数,为后续工作流节点以及应用的正常流转提供必要的初始信息,例如应用使用者所输入的内容、以及上传的文件等。
配置节点
在开始节点的设置页,我们可以看到两部分,分别是输入字段和预设的系统变量。其中系统变量我们在《Dify工作流变量篇》已经详细介绍过,有兴趣的小伙伴可以移步去看看。
输入字段

输入字段功能由应用开发者设置,通常用于让应用使用者主动补全更多信息。例如在翻译小助手应用中要求使用者按照格式预先提供更多背景信息,如需要翻译文本字符串、目标语言、风格等。这些前置信息将有助于 LLM 生成质量更高的答复。

输入字段支持以下六种类型输入变量,所有变量均可设置为必填项:
文本
短文本,由应用使用者自行填写内容,最大长度 256 字符。
段落
长文本,允许应用使用者输入较长字符。
下拉选项
由应用开发者固定选项,应用使用者仅能选择预设选项,无法自行填写内容。
数字
仅允许用户输入数字。
单文件
允许应用使用者单独上传文件,支持文档类型文件、图片、音频、视频和其它文件类型。支持通过本地上传文件或粘贴文件 URL。
文件列表
允许应用使用者批量上传文件,支持文档类型文件、图片、音频、视频和其它文件类型。支持通过本地上传文件或粘贴文件 URL。
PS:Dify内置的文档提取器节点只能够处理部分格式的文档文件。如需处理图片、音频或视频类型文件,可以通过API拓展的方式实现使用外部工具的节点。
配置完成后,用户在使用应用前将按照输入项指引,向LLM提供必要信息。
系统变量

这部分可以查看 《Dify工作流变量篇》,下面是截图:

大语言模型(LLM)

调用大语言模型的能力,处理用户在 “开始” 节点中输入的信息(自然语言、上传的文件或图片),给出有效的回应信息。

应用类型

LLM 节点是 Chatflow/Workflow 的核心节点。该节点能够利用大语言模型的对话/生成/分类/处理等能力,根据给定的提示词处理广泛的任务类型,并能够在工作流的不同环节使用。

意图识别
在客服对话情景中,对用户问题进行意图识别和分类,导向下游不同的流程。
文本生成
在文章生成情景中,作为内容生成的节点,根据主题、关键词生成符合的文本内容。
内容分类
在邮件批处理情景中,对邮件的类型进行自动化分类,如咨询/投诉/垃圾邮件。
文本转换
在文本翻译情景中,将用户提供的文本内容翻译成指定语言。
代码生成
在辅助编程情景中,根据用户的要求生成指定的业务代码,编写测试用例。
RAG
在知识库问答情景中,将检索到的相关知识和用户问题重新组织回复问题。
图片理解
使用具备 vision 能力的 LLM,理解与问答图像内的信息。
文件分析
在文件处理场景中,使用 LLM 识别并分析文件包含的信息。

选择合适的模型,编写提示词,你可以在 Chatflow/Workflow 中构建出强大、可靠的解决方案。

特殊变量说明

上下文变量

上下文变量是一种特殊变量类型,用于向 LLM 提供背景信息,常用于在知识检索场景下使用。

图片变量

具备视觉能力的 LLM 可以通过变量读取应用使用者所上传的图片。开启 VISION 后,选择图片文件的输出变量完成设置。

文件变量

部分 LLMs(例如Qwen2-VL-72B-Instruct)已支持直接处理并分析文件内容,因此系统提示词已允许输入文件变量。需要注意的是,不同LLM支持的文件类型不同,需要去LLM官网确认LLM 支持何种文件类型。

会话历史

为了在文本补全类模型(例如 gpt-3.5-turbo-Instruct)内实现聊天型应用的对话记忆,Dify设计了会话历史变量,该变量在 Chatflow 的 LLM 节点内,用于在提示词中插入 AI 与用户之间的聊天历史,帮助 LLM 理解对话上文。

模型参数

模型的参数会影响模型的输出效果。不同模型的参数会有所区别。下图为InternVL2-26B的参数列表。

主要的参数名词解释如下:

温度
通常是0-1的一个值,控制随机性。温度越接近0,结果越确定和重复,温度越接近1,结果越随机。
Top P
控制结果的多样性。模型根据概率从候选词中选择,确保累积概率不超过预设的阈值P。
存在惩罚
用于减少重复生成同一实体或信息,通过对已经生成的内容施加惩罚,使模型倾向于生成新的或不同的内容。参数值增加时,对于已经生成过的内容,模型在后续生成中被施加更大的惩罚,生成重复内容的可能性越低。
频率惩罚
对过于频繁出现的词或短语施加惩罚,通过降低这些词的生成概率。随着参数值的增加,对频繁出现的词或短语施加更大的惩罚。较高的参数值会减少这些词的出现频率,从而增加文本的词汇多样性。

高级功能

记忆: 开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。

记忆窗口: 记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。

对话角色名设置: 由于模型在训练阶段的差异,不同模型对于角色名的指令遵循程度不同,如 Human/Assistant,Human/AI,人类/助手等等。为适配多模型的提示响应效果,系统提供了对话角色名的设置,修改对话角色名将会修改会话历史的角色前缀。

Jinja-2 模板: LLM 的提示词编辑器内支持 Jinja-2 模板语言,允许你借助 Jinja2 这一强大的 Python 模板语言,实现轻量级数据转换和逻辑处理

失败时重试针对节点发生的部分异常情况,通常情况下再次重试运行节点即可解决。开启失败时重试功能后,节点将在发生错误的时候按照预设策略进行自动重试。你可以调整最大重试次数和每次重试间隔以设置重试策略。

异常处理提供多样化的节点错误处理策略,能够在当前节点发生错误时抛出故障信息而不中断主流程;或通过备用路径继续完成任务。

知识检索(Knowledge Retrieval)
从知识库中检索与用户问题相关的文本内容,可作为下游 LLM 节点的上下文来使用。 
配置流程:
1、选择查询变量。查询变量通常代表用户输入的问题,该变量可以作为输入项并检索知识库中的相关文本分段。在常见的对话类应用中一般将开始节点的 sys.query 作为查询变量,知识库所能接受的最大查询内容为 200 字符;
2、选择需要查询的知识库,可选知识库需要在 Dify 知识库内预先创建;
3、制定找回模式;
4、连接并配置下游节点,一般为LLM节点;
输出变量:
知识检索的输出变量 result 为从知识库中检索到的相关文本分段。其变量数据结构中包含了分段内容、标题、链接、图标、元数据信息。
配置下游节点:

在常见的对话类应用中,知识库检索的下游节点一般为 LLM 节点,知识检索的输出变量 result 需要配置在 LLM 节点中的 上下文变量 内关联赋值。关联后你可以在提示词的合适位置插入 上下文变量

PS:上下文变量是 LLM 节点内定义的特殊变量类型,用于在提示词内插入外部检索的文本内容。
当用户提问时,若在知识检索中召回了相关文本,文本内容会作为上下文变量中的值填入提示词,提供 LLM 回复问题;若未在知识库检索中召回相关的文本,上下文变量值为空,LLM 则会直接回复用户问题。
该变量除了可以作为 LLM 回复问题时的提示词上下文作为外部知识参考引用,另外由于其数据结构中包含了分段引用信息,同时可以支持应用端的引用与归属功能。
问题分类(Question Classifier)

通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。

配置步骤:

1、选择输入变量指用于分类的输入内容,支持输入文件变量。客服问答场景下一般为用户输入的问题 sys.query

2、选择推理模型问题分类器基于大语言模型的自然语言分类和推理能力,选择合适的模型将有助于提升分类效果;

3、编写分类标签/描述,你可以手动添加多个分类,通过编写分类的关键词或者描述语句,让大语言模型更好的理解分类依据。

4、选择分类对应的下游节点,问题分类节点完成分类之后,可以根据分类与下游节点的关系选择后续的流程路径。

高级设置:

指令:你可以在 高级设置-指令 里补充附加指令,比如更丰富的分类依据,以增强问题分类器的分类能力。

记忆:开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。

图片分析:仅适用于具备图片识别能力的 LLM,允许输入图片变量。

记忆窗口:记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。

输出变量:
class_name 存储了分类模型的预测结果。当分类完成后,这个变量会包含具体的类别标签,你可以在后续的处理节点中引用这个分类结果来执行相应的逻辑。
条件分支(IF/ELSE)

根据 If/else/elif 条件将 Chatflow / Workflow 流程拆分成多个分支。

功能节点
条件分支的运行机制包含以下六个路径:
1、IF条件,选择变量,设置条件和满足条件的值;
2、IF条件判断为True,执行IF路径;
3、IF条件判断为False,执行ELSE路径;
4、ELIF条件判断为True,执行ELIF路径;
5、ELIF条件判断为False,继续判断下一个ELIF路径或执行最后的ELSE路径;
条件类型:
支持设置以下条件类型:

1、包含(Contains)

2、不包含(Not contains)

3、开始是(Start with)
4、结束是(End with)
5、是(Is)
6、不是(Is not)
7、为空(Is empty)
8、不为空(Is not empty)
代码执行(Code)

代码节点支持运行 Python / NodeJS 代码以在工作流程中执行数据转换。它可以简化你的工作流程,适用于Arithmetic、JSON transform、文本处理等情景。

该节点极大地增强了开发人员的灵活性,使他们能够在工作流程中嵌入自定义的 Python 或 Javascript 脚本,并以预设节点无法达到的方式操作变量。通过配置选项,你可以指明所需的输入和输出变量,并撰写相应的执行代码:

配置

如果需要使用其它节点的变量,需要在输入变量中定义变量名,并引用这些变量。

使用场景

使用代码执行节点,我们可以完成很多操作,比如:

结构化数据处理: 

数学计算:

拼接数据:

本地部署

我们可以启动沙盒服务,可以确保恶意代码不会被执行,同时启动该服务需要使用Docker服务,我们可以直接通过docker-compose启动服务:

docker compose -f docker-compose.middleware.yaml up -d

PS:我们使用以下命令启动的时候,已经自动启动了沙盒服务,故不需要额外使用上述命令:

docker compose up -d
安全策略

无论是 Python3 还是 Javascript 代码执行器,它们的执行环境都被严格隔离(沙箱化),以确保安全性。这意味着开发者不能使用那些消耗大量系统资源或可能引发安全问题的功能,例如直接访问文件系统、进行网络请求或执行操作系统级别的命令。这些限制保证了代码的安全执行,同时避免了对系统资源的过度消耗。

失败时重试:

针对节点发生的部分异常情况,通常情况下再次重试运行节点即可解决。开启错误重试功能后,节点将在发生错误的时候按照预设策略进行自动重试。你可以调整最大重试次数和每次重试间隔以设置重试策略。

其中,最大重试次数为10次,最大重试间隔时间为5000ms

异常处理:

代码节点处理信息时有可能会遇到代码执行异常的情况。我们可以在代码执行节点启用“异常处理”,选择异常处理方案并进行配置,在节点出现异常时启用应对方案,而避免中断整个流程。

常见问题

 在代码执行节点内填写代码后为什么无法保存?

请检查代码是否包含危险行为。例如:

def main() -> dict:    return {        "result": open("/etc/passwd").read(),    }

这段代码包含以下问题

1、未经授权的文件访问: 代码试图读取 "/etc/passwd" 文件,这是 Unix/Linux 系统中存储用户账户信息的关键系统文件。

2、敏感信息泄露: "/etc/passwd" 文件包含系统用户的重要信息,如用户名、用户 ID、组 ID、home 目录路径等。直接访问可能会导致信息泄露


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询