agentic_huge_data_base / wiki
页面 Dify · 5.3 大模型节点实现·DeepWiki 中文全文译文

5.3 · 大模型节点实现(LLM Node Implementation)

应用编排与外部知识接入 · 聚焦本章的模块关系、源码依据与实现要点。

项目Dify 章节5.3 状态全文译文 模块入库与解析、记忆与上下文、模型调用与提供方适配、配置治理
源码线索
  • api/core/agent/base_agent_runner.py
  • api/core/agent/cot_agent_runner.py
  • api/core/agent/cot_chat_agent_runner.py
  • api/core/agent/cot_completion_agent_runner.py
  • api/core/agent/entities.py
  • api/core/agent/fc_agent_runner.py
  • api/core/app/app_config/easy_ui_based_app/agent/manager.py
  • api/core/app/apps/agent_chat/app_runner.py
  • api/core/app/apps/base_app_runner.py
  • api/core/app/apps/chat/app_runner.py
模块标签
  • 入库与解析
  • 记忆与上下文
  • 模型调用与提供方适配
  • 配置治理
  • 评测、反馈与人工复核

章节正文

大模型节点实现

LLM 节点实现

相关源文件

以下文件为本维基页面的生成提供了上下文:

  • api/core/agent/base_agent_runner.py
  • api/core/agent/cot_agent_runner.py
  • api/core/agent/cot_chat_agent_runner.py
  • api/core/agent/cot_completion_agent_runner.py
  • api/core/agent/entities.py
  • api/core/agent/fc_agent_runner.py
  • api/core/app/app_config/easy_ui_based_app/agent/manager.py
  • api/core/app/apps/agent_chat/app_runner.py
  • api/core/app/apps/base_app_runner.py
  • api/core/app/apps/chat/app_runner.py
  • api/core/app/apps/completion/app_runner.py
  • api/core/memory/token_buffer_memory.py
  • api/core/prompt/advanced_prompt_transform.py
  • api/core/prompt/agent_history_prompt_transform.py
  • api/core/prompt/entities/advanced_prompt_entities.py
  • api/core/prompt/prompt_transform.py
  • api/core/prompt/simple_prompt_transform.py
  • api/factories/file_factory/message_files.py
  • api/factories/file_factory/validation.py
  • api/providers/trace/trace-langsmith/src/dify_trace_langsmith/entities/langsmith_trace_entity.py
  • api/tests/unit_tests/core/memory/test_token_buffer_memory.py
  • api/tests/unit_tests/core/prompt/test_advanced_prompt_transform.py
  • api/tests/unit_tests/core/prompt/test_agent_history_prompt_transform.py
  • api/tests/unit_tests/core/prompt/test_simple_prompt_transform.py
  • api/tests/unit_tests/core/workflow/nodes/llm/test_node.py
  • api/tests/unit_tests/factories/test_file_validation.py
  • web/app/components/app/configuration/config-vision/param-config-content.tsx
  • web/app/components/app/configuration/dataset-config/context-var/index.tsx
  • web/app/components/billing/priority-label/index.tsx
  • web/app/components/workflow/nodes/_base/components/option-card.tsx
  • web/app/components/workflow/nodes/_base/components/variable/utils.ts
  • web/app/components/workflow/nodes/assigner/panel.tsx
  • web/app/components/workflow/nodes/http/components/key-value/key-value-edit/index.tsx
  • web/app/components/workflow/nodes/http/components/timeout/index.tsx
  • web/app/components/workflow/nodes/http/default.ts
  • web/app/components/workflow/nodes/http/panel.tsx
  • web/app/components/workflow/nodes/http/types.ts
  • web/app/components/workflow/nodes/http/use-config.ts
  • web/app/components/workflow/nodes/iteration/panel.tsx
  • web/app/components/workflow/nodes/knowledge-retrieval/use-single-run-form-params.ts
  • web/app/components/workflow/nodes/list-operator/components/filter-condition.tsx
  • web/app/components/workflow/nodes/list-operator/panel.tsx
  • web/app/components/workflow/nodes/llm/components/resolution-picker.tsx
  • web/app/components/workflow/nodes/llm/panel.tsx
  • web/app/components/workflow/nodes/llm/use-config.ts
  • web/app/components/workflow/nodes/parameter-extractor/panel.tsx
  • web/app/components/workflow/nodes/start/panel.tsx
  • web/app/components/workflow/nodes/trigger-webhook/components/generic-table.tsx
  • web/app/components/workflow/nodes/utils.ts
  • web/app/components/workflow/types.ts
  • web/utils/completion-params.ts

目的与范围

本文档记录了 Dify 工作流引擎中 LLM 节点的实现。LLM 节点负责使用构造好的提示词调用大语言模型,管理对话记忆,处理多模态输入,以及处理包括流式输出、结构化输出和推理内容在内的多种响应类型。

关于整体工作流执行模型和节点调度的信息,请参见工作流定义与执行模型。关于工作流中检索增强生成(RAG)的集成,请参见知识检索节点。关于提供商级别的配额管理,请参见6.3 配额管理与积分池

节点类架构

LLM 节点通过 LLMNode 类实现,该类扩展了基础 Node 类,并增加了 LLM 调用的专门能力。

LLM 节点类结构
Dify · LLM 节点类结构 · 图 1
Dify · LLM 节点类结构 · 图 1

来源: api/graphon/nodes/llm/node.py:70-77, api/graphon/nodes/llm/entities.py:53-62, api/tests/unit_tests/core/workflow/nodes/llm/test_node.py:156-171

节点执行生命周期

LLM 节点的执行遵循从输入处理到响应生成的结构化管线。_run() 方法负责编排变量提取、记忆加载和模型调用。

执行流程示意图
Dify · 执行流程示意图 · 图 2
Dify · 执行流程示意图 · 图 2

来源: api/graphon/nodes/llm/node.py:151-353, api/tests/unit_tests/core/workflow/nodes/llm/test_node.py:201-215

提示词构建管线

LLM 节点通过组装模板、上下文、记忆和多模态文件来构建提示词。它支持"基础"和"Jinja2"两种编辑类型。

提示词组装流程
Dify · 提示词组装流程 · 图 3
Dify · 提示词组装流程 · 图 3

来源: api/graphon/nodes/llm/node.py:628-662, api/graphon/nodes/llm/node.py:664-723, api/core/prompt/advanced_prompt_transform.py:37-80

变量类型与转换
变量类型来源转换方式
{{input_var}}用户输入或上游节点输出通过 VariableTemplateParserJinja2Formatter 进行直接字符串替换
#context#知识检索节点输出从文档片段组装,包含摘要
#histories#对话记忆使用角色前缀(Human/Assistant)格式化
#files#视觉文件选择器转换为 ImagePromptMessageContent

来源: api/graphon/nodes/llm/node.py:584-626, api/graphon/nodes/llm/node.py:664-723, api/core/prompt/simple_prompt_transform.py:93-146

记忆集成

LLM 节点通过 TokenBufferMemory 与对话历史集成,以维持多轮对话。它使用 extract_thread_messages 确保只包含当前对话线程中的相关消息。

记忆检索流程
Dify · 记忆检索流程 · 图 4
Dify · 记忆检索流程 · 图 4

来源: api/graphon/nodes/llm/node.py:208-221, api/core/memory/token_buffer_memory.py:30-45, api/core/memory/token_buffer_memory.py:122-148, api/tests/unit_tests/core/workflow/nodes/llm/test_node.py:87-96

多模态支持

LLM 节点通过将图像文件附加到用户消息中来处理支持视觉的模型。TokenBufferMemory 在从历史构建提示词消息时也会处理文件附件。

视觉文件处理
Dify · 视觉文件处理 · 图 5
Dify · 视觉文件处理 · 图 5

来源: api/graphon/nodes/llm/node.py:175-186, api/core/memory/token_buffer_memory.py:87-122, api/tests/unit_tests/core/workflow/nodes/llm/test_node.py:163-171

模型调用

LLM 节点支持标准文本生成和结构化输出生成。它还包含重新计算 max_tokens 的逻辑,以防提示词 Token 和请求的补全 Token 之和超过模型的上下文限制。

调用架构
Dify · 调用架构 · 图 6
Dify · 调用架构 · 图 6

来源: api/graphon/nodes/llm/node.py:355-413, api/core/app/apps/base_app_runner.py:53-86

响应处理

LLM 节点根据流式模式和响应类型以不同方式处理响应。它处理标准 LLMResultChunkLLMResultChunkWithStructuredOutput 两种类型。

响应处理流程
Dify · 响应处理流程 · 图 7
Dify · 响应处理流程 · 图 7

来源: api/graphon/nodes/llm/node.py:415-527, api/graphon/nodes/llm/node.py:534-567

推理内容提取

LLM 节点支持使用正则表达式模式从 <think> 标签中提取推理内容(例如来自 DeepSeek 等模型)。

Dify · 推理内容提取 · 图 8
Dify · 推理内容提取 · 图 8

来源: api/graphon/nodes/llm/node.py:534-567, api/tests/unit_tests/core/workflow/nodes/llm/test_node.py:170-171

节点输出

LLM 节点生成多个输出变量,下游节点可以访问这些变量:

输出变量类型描述
text字符串干净的文本输出("separated"模式下已移除推理内容)
reasoning_content字符串<think> 标签中提取的内容
usage对象Token 使用量元数据(prompt_tokens, completion_tokens, total_tokens)
finish_reason字符串LLM 补全原因(stop, length, tool_calls)

来源: api/graphon/nodes/llm/node.py:299-309, api/graphon/model_runtime/entities/llm_entities.py:29-30

错误处理

LLM 节点处理提示词构建和模型调用过程中的各种错误情况:

错误类型原因
NoPromptFoundError未找到提示词模板或历史
VariableNotFoundError引用的变量在 VariablePool 中不存在
InvalidContextStructureError上下文字典缺少 'content' 字段
TemplateRenderErrorJinja2 模板渲染失败

来源: api/graphon/nodes/llm/exc.py:1-25, api/graphon/nodes/llm/node.py:64-68