调用大语言模型的能力,处理用户在 “开始” 节点中输入的信息(自然语言、上传的文件或图片),给出有效的回应信息。
LLM 节点
LLM 节点是 Chatflow/Workflow 的核心节点。该节点能够利用大语言模型的对话/生成/分类/处理等能力,根据给定的提示词处理广泛的任务类型,并能够在工作流的不同环节使用。
选择合适的模型,编写提示词,你可以在 Chatflow/Workflow 中构建出强大、可靠的解决方案。
在应用编辑页中,点击鼠标右键或轻点上一节点末尾的 + 号,添加节点并选择 LLM。
LLM 节点配置-选择模型
配置步骤:
如果你是初次使用 Dify ,在 LLM 节点选择模型之前,需要在 系统设置—模型供应商 内提前完成模型配置。
如果在编写系统提示词(SYSTEM)时没有好的思路,也可以使用提示生成器功能,借助 AI 能力快速生成适合实际业务场景的提示词。
提示生成器
在提示词编辑器中,你可以通过输入 ”/” 呼出 变量插入菜单,将 特殊变量块 或者 上游节点变量 插入到提示词中作为上下文内容。
呼出变量插入菜单
上下文变量
上下文变量是一种特殊变量类型,用于向 LLM 提供背景信息,常用于在知识检索场景下使用。详细说明请参考知识检索节点。
文件变量
部分 LLMs(例如 Claude 3.5 Sonnet)已支持直接处理并分析文件内容,因此系统提示词已允许输入文件变量。为了避免潜在异常,应用开发者在使用该文件变量前需前往 LLM 官网确认 LLM 支持何种文件类型。
阅读文件上传了解如何搭建具备文件上传功能的 Chatflow/Workflow 应用。
会话历史
为了在文本补全类模型(例如 gpt-3.5-turbo-Instruct)内实现聊天型应用的对话记忆,Dify 在原提示词专家模式(已下线)内设计了会话历史变量,该变量沿用至 Chatflow 的 LLM 节点内,用于在提示词中插入 AI 与用户之间的聊天历史,帮助 LLM 理解对话上文。
会话历史变量应用并不广泛,仅在 Chatflow 中选择文本补全类模型时可以插入使用。
插入会话历史变量
模型参数
模型的参数会影响模型的输出效果。不同模型的参数会有所区别。下图为gpt-4
的参数列表。
模型参数列表
主要的参数名词解释如下:
如果你不理解这些参数是什么,可以选择加载预设,从创意、平衡、精确三种预设中选择。
加载预设参数
记忆: 开启记忆后问题分类器的每次输入将包含对话中的聊天历史,以帮助 LLM 理解上文,提高对话交互中的问题理解能力。
记忆窗口: 记忆窗口关闭时,系统会根据模型上下文窗口动态过滤聊天历史的传递数量;打开时用户可以精确控制聊天历史的传递数量(对数)。
对话角色名设置: 由于模型在训练阶段的差异,不同模型对于角色名的指令遵循程度不同,如 Human/Assistant,Human/AI,人类/助手等等。为适配多模型的提示响应效果,系统提供了对话角色名的设置,修改对话角色名将会修改会话历史的角色前缀。
Jinja-2 模板: LLM 的提示词编辑器内支持 Jinja-2 模板语言,允许你借助 Jinja2 这一强大的 Python 模板语言,实现轻量级数据转换和逻辑处理,参考官方文档。
错误重试:针对节点发生的部分异常情况,通常情况下再次重试运行节点即可解决。开启错误重试功能后,节点将在发生错误的时候按照预设策略进行自动重试。你可以调整最大重试次数和每次重试间隔以设置重试策略。
异常处理:提供多样化的节点错误处理策略,能够在当前节点发生错误时抛出故障信息而不中断主流程;或通过备用路径继续完成任务。详细说明请参考异常处理。
结构化输出:确保 LLM 返回的数据格式可用、稳定、可预测,减少错误处理和格式转换的工作。
JSON Schema 编辑器
LLM 节点中的 JSON Schema 编辑器 让你能够定义 LLM 返回的数据结构,确保输出可解析、可复用、可控。你可以使用可视化编辑模式直观编辑,或通过代码编辑模式精细调整,适配不同复杂度的需求。
作为节点级能力,JSON Schema 适用于所有模型的结构化输出定义和约束。
原生支持结构化输出的模型:可直接使用 JSON Schema 定义结构化变量。
不支持结构化输出的模型:系统会将 JSON Schema 以提示词方式输入。你可以尝试引导模型按结构生成内容,但这并不保证一定可以正确解析输出。
JSON Schema 编辑器入口
点击 LLM 节点 > 输出变量,打开 结构化开关 > 配置,即可进入 JSON Schema 编辑器 界面。JSON Schema 编辑器分为可视化编辑窗口与代码编辑窗口,两者可无缝切换。
适用场景
你只需要定义几个简单的字段,例如 name
、email
、age
等,并不涉及嵌套结构。
你不熟悉 JSON Schema 语法,希望不写代码,而是用直观的界面拖拽、添加字段。
你希望快速迭代字段结构,而不是每次修改都需要更新 JSON 代码。
添加字段
在 结构化输出 框中点击 添加子字段 按钮,并配置字段参数:
(必填) 字段名
(必填) 字段类型:支持 string、number、object、array 等字段类型等。
对象(object)或数组(array)字段可添加子字段。
描述:帮助 LLM 理解字段含义,提高输出准确性。
必填:开启后,LLM 将强制返回该字段值。
枚举值:用于限制字段值的可选范围,使模型仅能从预设的枚举值中返回值。例如,若只允许 red
、green
、blue
:
该规则要求输入值只能是
red
、green
或blue
。
删改字段
编辑字段:鼠标悬停至字段卡片,点击 编辑 图标,修改字段类型、描述、默认值等参数。
删除字段:鼠标悬停至字段卡片,点击 删除 图标,字段将从列表中删除。
删除对象(object)或数组(array)字段时,其所有子字段也会被删除。
导入现有 JSON 示例
使用 AI 生成 JSON Schema
“我需要一个包含用户名(string)、年龄(number)和兴趣爱好(array)的 JSON Schema。”
想要让工作流应用具备读取 “知识库” 内容的能力,例如搭建智能客服应用,请参考以下步骤:
result
填写至 LLM 节点中的 上下文变量 内;知识检索节点输出的变量 result
还包含了分段引用信息,你可以通过 引用与归属 功能查看信息来源。
上游节点的普通变量同样可以填写至上下文变量内,例如开始节点的字符串类型变量,但 引用与归属 功能将会失效。
想要让工作流应用具备读取读取文档内容的能力,例如搭建 ChatPDF 应用,可以参考以下步骤:
text
填写至 LLM 节点中的提示词内。如需了解更多,请参考文件上传。
LLM 节点处理信息时有可能会遇到输入文本超过 Token 限制,未填写关键参数等错误。应用开发者可以参考以下步骤配置异常分支,在节点出现异常时启用应对方案,而避免中断整个流程。
如需了解更多应对异常的处理办法,请参考异常处理。
案例:客户信息采集表单
你可以通过以下视频,了解如何使用结构化输出功能采集客户信息: