微信扫码
添加专属顾问
我要投稿
掌握Dify工作流节点,高效设计自动化流程。 核心内容: 1. 工作流节点的作用与设计重要性 2. “开始”节点的配置与输入字段类型 3. 大语言模型(LLM)节点的多种应用场景
输入字段功能由应用开发者设置,通常用于让应用使用者主动补全更多信息。例如在翻译小助手应用中要求使用者按照格式预先提供更多背景信息,如需要翻译文本字符串、目标语言、风格等。这些前置信息将有助于 LLM 生成质量更高的答复。
这部分可以查看 《Dify工作流变量篇》,下面是截图:
调用大语言模型的能力,处理用户在 “开始” 节点中输入的信息(自然语言、上传的文件或图片),给出有效的回应信息。
LLM 节点是 Chatflow/Workflow 的核心节点。该节点能够利用大语言模型的对话/生成/分类/处理等能力,根据给定的提示词处理广泛的任务类型,并能够在工作流的不同环节使用。
选择合适的模型,编写提示词,你可以在 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的参数列表。
主要的参数名词解释如下:
记忆: 开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
记忆窗口: 记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。
对话角色名设置: 由于模型在训练阶段的差异,不同模型对于角色名的指令遵循程度不同,如 Human/Assistant,Human/AI,人类/助手等等。为适配多模型的提示响应效果,系统提供了对话角色名的设置,修改对话角色名将会修改会话历史的角色前缀。
Jinja-2 模板: LLM 的提示词编辑器内支持 Jinja-2 模板语言,允许你借助 Jinja2 这一强大的 Python 模板语言,实现轻量级数据转换和逻辑处理。
失败时重试:针对节点发生的部分异常情况,通常情况下再次重试运行节点即可解决。开启失败时重试功能后,节点将在发生错误的时候按照预设策略进行自动重试。你可以调整最大重试次数和每次重试间隔以设置重试策略。
异常处理:提供多样化的节点错误处理策略,能够在当前节点发生错误时抛出故障信息而不中断主流程;或通过备用路径继续完成任务。
sys.query
作为查询变量,知识库所能接受的最大查询内容为 200 字符;result
为从知识库中检索到的相关文本分段。其变量数据结构中包含了分段内容、标题、链接、图标、元数据信息。在常见的对话类应用中,知识库检索的下游节点一般为 LLM 节点,知识检索的输出变量 result
需要配置在 LLM 节点中的 上下文变量 内关联赋值。关联后你可以在提示词的合适位置插入 上下文变量。
通过定义分类描述,问题分类器能够根据用户输入,使用 LLM 推理与之相匹配的分类并输出分类结果,向下游节点提供更加精确的信息。
配置步骤:
1、选择输入变量,指用于分类的输入内容,支持输入文件变量。客服问答场景下一般为用户输入的问题 sys.query;
2、选择推理模型,问题分类器基于大语言模型的自然语言分类和推理能力,选择合适的模型将有助于提升分类效果;
3、编写分类标签/描述,你可以手动添加多个分类,通过编写分类的关键词或者描述语句,让大语言模型更好的理解分类依据。
4、选择分类对应的下游节点,问题分类节点完成分类之后,可以根据分类与下游节点的关系选择后续的流程路径。
指令:你可以在 高级设置-指令 里补充附加指令,比如更丰富的分类依据,以增强问题分类器的分类能力。
记忆:开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
图片分析:仅适用于具备图片识别能力的 LLM,允许输入图片变量。
记忆窗口:记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。
根据 If/else/elif 条件将 Chatflow / Workflow 流程拆分成多个分支。
1、包含(Contains)
2、不包含(Not contains)
代码节点支持运行 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+中大型企业
2024-12-24
2024-04-25
2024-07-16
2024-07-20
2024-04-24
2024-05-08
2024-06-21
2024-05-09
2024-08-06
2024-05-07