TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

Dify 的 LLM 节点

Dify 的 LLM 节点把配置好的提示词发给大模型并取回回复。本文讲模型参数、提示词变量、知识库上下文、结构化输出、记忆、推理内容分离和出错重试。

这篇适合谁,读完能做什么

这篇适合想在 Dify 工作流里调用大模型、用自己的变量组装提示词,并且需要固定输出格式的人。读完你能配置 LLM 节点,写好带变量和知识库上下文的提示词,拿到结构化输出,并处理推理内容和出错重试。

开始前先配置模型供应商

先在 集成 > 模型供应商 中配置至少一个模型供应商[1]。之后 LLM 节点就能从已配置的模型中选择[1]。

设置模型参数

温度 的范围从 0(确定性)到 1(创造性)。核采样 通过概率限制词汇选择。频率惩罚 减少重复,存在惩罚 鼓励出现新话题[1]。如果不想逐项调整,可以直接使用预设:精确、平衡 或 创意[1]。

多个节点共用一套模型配置

多个 LLM 节点要用同一个模型时,可以把模型选择存入环境变量,不必逐个节点配置[1]。打开 环境变量 面板,添加一个 LLM 类型的变量,选择模型及其参数[1]。然后在每个 LLM 节点中,把 模型 字段切换为变量模式,并选择该变量[1]。变量承载模型供应商、模型和模型参数,提示词等其他设置仍保留在各节点中[1]。之后编辑这个变量,比如让它指向另一个模型,所有绑定该变量的节点都会一并更新[1]。

提示词怎么写

提示词编辑界面会随模型类型变化。聊天模型使用消息角色:系统 用于设定行为,用户 用于输入,助手 用于给出示例;完成模型则使用简单的文本续写[1]。

在提示词中用双花括号引用工作流变量,例如 {{variable_name}}。变量在到达模型之前会被替换成实际的值[1]。一个聊天模型的提示词大致是这样的[1]:

System: You are a technical documentation expert.
User: {{user_input}}

用知识库内容作为上下文

上下文变量可以在保留来源的前提下注入外部知识。这正是检索增强生成(RAG)应用的基础,让模型能基于你自己的文档回答问题[1]。把 知识检索 或 Agent 知识检索 节点的输出连接到 LLM 节点的上下文输入,再在提示词中引用它[1]:

Answer using only this context:
{{knowledge_retrieval.result}}

Question: {{user_question}}

上下文变量来自知识检索时,Dify 会自动记录引用,方便用户看到信息来源[1]。

怎么让模型返回固定的 JSON 格式

结构化输出让模型返回指定的数据格式(如 JSON),程序可以直接使用[1]。有三种配置方式[1]:

  • 可视化编辑器:添加带名称和类型的字段,标记必需字段,并设置描述。编辑器会自动生成 JSON Schema。
  • JSON Schema:直接编写 Schema,适合嵌套对象、数组和验证规则较复杂的结构。
  • AI 生成:用自然语言描述需求,让 AI 生成 Schema。

下面是一个情感字段的 Schema 示例,该字段为必需项,只接受三个取值[1]:

{
  "type": "object",
  "properties": {
    "sentiment": {
      "type": "string",
      "enum": ["positive", "negative", "neutral"]
    }
  },
  "required": ["sentiment"]
}

如果 结构化输出 旁边出现 模型不支持,说明该模型不原生支持结构化输出。此时 Dify 会改为在提示词中加入 JSON Schema,但回复仍可能不符合 Schema,导致节点运行失败。想要稳定的结构化输出,应选择没有这个提示的模型[1]。

记忆怎么用,文件怎么传

启用记忆后,同一个 Chatflow 对话里的多次 LLM 调用之间可以保持上下文。之前的交互会以格式化的用户、助手输出,包含在后续提示词中[1]。记忆属于节点本身,不会延续到不同的对话里。你可以通过编辑 USER 模板,自定义用户提示词的内容[1]。

对于文件处理,需要把文件变量添加到多模态模型的提示词中。GPT-4V 处理图像,Claude 直接处理 PDF,其他模型可能需要先做预处理[1]。

视觉能力可以设置细节级别:高细节 对复杂图像更准确,但消耗更多 token;低细节 处理简单图像更快,消耗也更少[1]。视觉的默认变量选择器是 userinput.files,它会自动从用户输入节点获取文件[1]。

用 Jinja2 写循环和条件

在 Jinja2 模式(edition_type: "jinja2")下,提示词支持 Jinja2 模板,可以写循环、条件和复杂的数据转换[1]。Jinja2 变量与普通的变量替换分开处理[1]。遍历搜索结果的写法如下[1]:

{% for item in search_results %}
{{ loop.index }}. {{ item.title }}: {{ item.content }}
{% endfor %}

流式输出和推理内容

LLM 节点默认支持流式返回。每个文本块都会作为 RunStreamChunkEvent 输出,用于实时显示[1]。

部分推理模型会用 <think>...</think> 标签包裹思考过程,默认情况下这些标签保留在 text 输出中。打开 启用推理标签分离 开关,思考过程会移到单独的 reasoning_content 输出变量中[1]。在 API 中,这个开关对应 reasoning_format 参数,流式客户端会通过单独的 reasoning_chunk 事件接收推理内容[1]。这个设置只对用 <think> 标签包裹推理内容的模型生效[1]。

出错怎么办

为失败的 LLM 调用配置重试行为:最大重试次数、重试间隔和退避乘数。重试仍不够时,可以定义回退方案,例如默认值、错误路由或替代模型[1]。

下一步

LLM 节点的全部配置项,请参阅 Dify 官方文档[1]。

本文改编自 Dify 官方文档中关于大语言模型节点的说明[1],原文以 CC BY 4.0 许可证发布。

来源

  1. 1
    大语言模型Dify docs (CC BY 4.0)

引用本页: Dify 的 LLM 节点. TellWorld, https://www.tellworld.net/zh/practice/practice-dify-llm-node. 更新于 2026-11-14

相关动态