调用大语言模型的能力,处理用户在 “开始” 节点中输入的信息(自然语言、上传的文件或图片),给出有效的回应信息。
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。”
适用场景
你只需要定义几个简单的字段,例如 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。”
适用场景
你的数据结构复杂,需要支持嵌套对象或数组,例如 订单详情
、产品列表
等。
你已经有一个 JSON Schema(或者 API 响应示例),希望直接粘贴并手动调整。
你希望使用高级 Schema 特性,如 pattern
(正则表达式匹配)或 oneOf
(多种类型支持)。
你使用 LLM 生成了初步 Schema,但希望修改某些字段的类型或结构,使其更符合业务需求。
添加字段
进入 JSON Schema 代码编辑器。
点击 从 JSON 导入, 输入字段。例如:
删改字段:在 JSON 代码框直接删改字段类型、描述、默认值等参数,并点击 保存。
导入现有 JSON 示例
使用 AI 生成 JSON Schema
“我需要一个包含用户名(string)、年龄(number)和兴趣爱好(array)的 JSON Schema。”
想要让工作流应用具备读取 “知识库” 内容的能力,例如搭建智能客服应用,请参考以下步骤:
result
填写至 LLM 节点中的 上下文变量 内;知识检索节点输出的变量 result
还包含了分段引用信息,你可以通过 引用与归属 功能查看信息来源。
上游节点的普通变量同样可以填写至上下文变量内,例如开始节点的字符串类型变量,但 引用与归属 功能将会失效。
想要让工作流应用具备读取读取文档内容的能力,例如搭建 ChatPDF 应用,可以参考以下步骤:
text
填写至 LLM 节点中的提示词内。如需了解更多,请参考文件上传。
LLM 节点处理信息时有可能会遇到输入文本超过 Token 限制,未填写关键参数等错误。应用开发者可以参考以下步骤配置异常分支,在节点出现异常时启用应对方案,而避免中断整个流程。
如需了解更多应对异常的处理办法,请参考异常处理。
案例:客户信息采集表单
你可以通过以下视频,了解如何使用结构化输出功能采集客户信息:
调用大语言模型的能力,处理用户在 “开始” 节点中输入的信息(自然语言、上传的文件或图片),给出有效的回应信息。
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。”
适用场景
你只需要定义几个简单的字段,例如 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。”
适用场景
你的数据结构复杂,需要支持嵌套对象或数组,例如 订单详情
、产品列表
等。
你已经有一个 JSON Schema(或者 API 响应示例),希望直接粘贴并手动调整。
你希望使用高级 Schema 特性,如 pattern
(正则表达式匹配)或 oneOf
(多种类型支持)。
你使用 LLM 生成了初步 Schema,但希望修改某些字段的类型或结构,使其更符合业务需求。
添加字段
进入 JSON Schema 代码编辑器。
点击 从 JSON 导入, 输入字段。例如:
删改字段:在 JSON 代码框直接删改字段类型、描述、默认值等参数,并点击 保存。
导入现有 JSON 示例
使用 AI 生成 JSON Schema
“我需要一个包含用户名(string)、年龄(number)和兴趣爱好(array)的 JSON Schema。”
想要让工作流应用具备读取 “知识库” 内容的能力,例如搭建智能客服应用,请参考以下步骤:
result
填写至 LLM 节点中的 上下文变量 内;知识检索节点输出的变量 result
还包含了分段引用信息,你可以通过 引用与归属 功能查看信息来源。
上游节点的普通变量同样可以填写至上下文变量内,例如开始节点的字符串类型变量,但 引用与归属 功能将会失效。
想要让工作流应用具备读取读取文档内容的能力,例如搭建 ChatPDF 应用,可以参考以下步骤:
text
填写至 LLM 节点中的提示词内。如需了解更多,请参考文件上传。
LLM 节点处理信息时有可能会遇到输入文本超过 Token 限制,未填写关键参数等错误。应用开发者可以参考以下步骤配置异常分支,在节点出现异常时启用应对方案,而避免中断整个流程。
如需了解更多应对异常的处理办法,请参考异常处理。
案例:客户信息采集表单
你可以通过以下视频,了解如何使用结构化输出功能采集客户信息: