agentic_huge_data_base / wiki
页面 Dify · 2.3 应用类型与执行模式·DeepWiki 中文全文译文

2.3 · 应用类型与执行模式(Application Types and Execution Modes)

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

项目Dify 章节2.3 状态全文译文 模块工作流与编排、智能体运行时、入库与解析、图谱与关系
源码线索
  • api/core/app/app_config/entities.py
  • api/core/app/apps/advanced_chat/app_config_manager.py
  • api/core/app/apps/advanced_chat/app_generator.py
  • api/core/app/apps/advanced_chat/app_runner.py
  • api/core/app/apps/advanced_chat/generate_task_pipeline.py
  • api/core/app/apps/agent_chat/app_generator.py
  • api/core/app/apps/base_app_generator.py
  • api/core/app/apps/chat/app_generator.py
  • api/core/app/apps/completion/app_generator.py
  • api/core/app/apps/message_based_app_generator.py
模块标签
  • 工作流与编排
  • 智能体运行时
  • 入库与解析
  • 图谱与关系
  • 系统架构

章节正文

应用类型与执行模式

应用类型与执行模式

相关源文件

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

  • api/core/app/app_config/entities.py
  • api/core/app/apps/advanced_chat/app_config_manager.py
  • api/core/app/apps/advanced_chat/app_generator.py
  • api/core/app/apps/advanced_chat/app_runner.py
  • api/core/app/apps/advanced_chat/generate_task_pipeline.py
  • api/core/app/apps/agent_chat/app_generator.py
  • api/core/app/apps/base_app_generator.py
  • api/core/app/apps/chat/app_generator.py
  • api/core/app/apps/completion/app_generator.py
  • api/core/app/apps/message_based_app_generator.py
  • api/core/app/apps/pipeline/pipeline_runner.py
  • api/core/app/apps/workflow/app_generator.py
  • api/core/app/apps/workflow/app_runner.py
  • api/core/app/apps/workflow/generate_task_pipeline.py
  • api/core/app/apps/workflow_app_runner.py
  • api/core/app/entities/queue_entities.py
  • api/core/app/entities/task_entities.py
  • api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py
  • api/core/app/task_pipeline/message_cycle_manager.py
  • api/core/app/workflow/layers/persistence.py
  • api/core/llm_generator/output_parser/structured_output.py
  • api/core/rag/entities/__init__.py
  • api/core/rag/entities/index_entities.py
  • api/core/rag/entities/metadata_entities.py
  • api/core/rag/entities/processing_entities.py
  • api/core/rag/entities/retrieval_settings.py
  • api/core/workflow/nodes/knowledge_index/entities.py
  • api/core/workflow/nodes/knowledge_retrieval/entities.py
  • api/libs/helper.py
  • api/models/account.py
  • api/models/api_based_extension.py
  • api/models/dataset.py
  • api/models/model.py
  • api/models/provider.py
  • api/models/source.py
  • api/models/task.py
  • api/models/tools.py
  • api/models/utils/file_input_compat.py
  • api/models/web.py
  • api/models/workflow.py
  • api/services/entities/knowledge_entities/rag_pipeline_entities.py
  • api/tests/unit_tests/core/app/apps/chat/test_base_app_runner_multimodal.py
  • api/tests/unit_tests/core/app/apps/test_advanced_chat_app_generator.py
  • api/tests/unit_tests/core/app/apps/test_base_app_generator.py
  • api/tests/unit_tests/core/app/task_pipeline/test_easy_ui_based_generate_task_pipeline.py
  • api/tests/unit_tests/core/app/task_pipeline/test_message_cycle_manager_optimization.py
  • api/tests/unit_tests/core/workflow/nodes/test_start_node_json_object.py
  • api/tests/unit_tests/libs/test_token_manager.py
  • web/app/components/base/chat/chat/utils.ts

本文档解释了 Dify 支持的不同应用类型及其执行模式。内容涵盖应用的配置方式、模式如何决定执行行为,以及应用模式、工作流和 Agent 配置之间的关系。

有关工作流执行细节,请参阅 工作流定义与执行模型。有关检索增强生成(RAG)的特定配置,请参阅 检索策略与元数据过滤

目的与范围

Dify 支持多种不同的应用类型,每种类型都针对不同的使用场景而设计。本文档描述了以下内容:

  • AppMode 枚举及其取值。
  • 每种模式如何决定应用的行为和执行流程。
  • 应用模式、AppModelConfigWorkflow 实体之间的关系。
  • “简易 UI”(基于提示词)应用与基于工作流应用之间的区别。
  • 用于处理流式响应和阻塞响应的任务管线架构。

应用模式枚举

所有 Dify 应用都有一个 mode 字段,用于确定其类型和执行行为。可用的模式在 AppMode 枚举中定义。

Dify · 应用模式枚举 · 图 1
Dify · 应用模式枚举 · 图 1

来源:api/models/model.py:49-69, api/core/app/apps/message_based_app_generator.py:46-46, api/core/app/apps/workflow/app_generator.py:60-60

执行管线架构

Dify 使用标准化的管线架构来管理应用请求的生命周期,从输入验证到流式响应生成。

任务管线层次结构

BasedGenerateTaskPipeline 是所有应用执行逻辑的基础。管线负责消费来自 AppQueueManager 的事件,并将其转换为流式或阻塞响应。

Dify · 任务管线层次结构 · 图 2
Dify · 任务管线层次结构 · 图 2

来源:api/core/app/task_pipeline/based_generate_task_pipeline.py:1-50, api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:69-72, api/core/app/apps/workflow/generate_task_pipeline.py:75-75, api/core/app/apps/advanced_chat/generate_task_pipeline.py:141-141

简易 UI(基于提示词)模式

这些模式由 MessageBasedAppGenerator 管理,并使用 EasyUIBasedGenerateTaskPipeline。与完整的可视化工作流相比,它们的特点是配置更简单(系统提示词 + 大语言模型(LLM)设置)。

补全模式

模式值: "completion" 代表单轮文本补全。用户提供输入,应用生成单个响应。它不支持对话历史或对话名称生成 api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:123-128

对话与智能体对话模式

模式值: "chat", "agent-chat" 这些模式支持多轮对话。Agent Chat 通过自主工具调用能力扩展了标准对话。标准对话应用每轮只调用一次大语言模型(LLM),而 Agent 对话可能涉及多次“思考”和工具调用。

关键组件:

  • MessageCycleManager:处理辅助任务,如生成对话名称和管理标注 api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:109-112, api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:125-127
  • EasyUITaskState:跟踪 LLMResult,其中包含提示消息和使用情况 api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:100-107

来源:api/core/app/apps/message_based_app_generator.py:46-63, api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:69-85

基于工作流的模式

这些模式执行由 GraphEngine 管理的、由相互连接的节点组成的可视化图。

工作流模式

模式值: "workflow" 执行一个可视化图。它通常不保留对话历史状态。它使用 WorkflowAppGeneratorWorkflowAppRunner api/core/app/apps/workflow/app_generator.py:60-60, api/core/app/apps/workflow/app_runner.py:12-12

高级对话模式

模式值: "advanced-chat" 将可视化工作流执行与对话记忆相结合。它允许在保持对话界面的同时实现复杂的逻辑(循环、条件)。

高级对话的执行流程:

  1. 运行器初始化AdvancedChatAppRunner 准备 GraphRuntimeState api/core/app/apps/advanced_chat/app_generator.py:23-23
  2. 系统变量:通过 build_system_variables 将对话上下文(例如 dialogue_countconversation_iduser_id)注入到工作流中 api/core/app/apps/advanced_chat/generate_task_pipeline.py:175-184
  3. 状态管理:使用 WorkflowTaskState 来跟踪工作流运行的生命周期 api/core/app/apps/advanced_chat/generate_task_pipeline.py:191-192

来源:api/core/app/apps/advanced_chat/generate_task_pipeline.py:141-157, api/core/app/apps/workflow/generate_task_pipeline.py:75-88

技术数据流:代码实体空间

下图弥合了高层应用概念与处理执行的具体代码实体之间的差距。

Dify · 技术数据流:代码实体空间 · 图 3
Dify · 技术数据流:代码实体空间 · 图 3

来源:api/core/app/apps/message_based_app_generator.py:75-81, api/core/app/apps/workflow/app_generator.py:23-26, api/core/app/apps/advanced_chat/app_generator.py:23-26, api/core/app/apps/workflow/app_generator.py:41-43

任务状态与事件流

执行进度通过专门的队列事件进行通信,这些事件被封装在 StreamResponse 对象中。

支持的流式事件
  • QueuePingEvent:心跳保活事件 api/core/app/entities/queue_entities.py:44-44
  • QueueTextChunkEvent:用于对话/补全的标准文本片段 api/core/app/entities/queue_entities.py:47-47
  • QueueAgentThoughtEvent:由 Agent 应用使用,用于展示推理过程和工具调用 api/core/app/entities/queue_entities.py:19-19
  • QueueWorkflowStartedEvent / QueueWorkflowSucceededEvent:工作流执行的生命周期事件 api/core/app/entities/queue_entities.py:51-52
  • QueueNodeStartedEvent / QueueNodeSucceededEvent:单个节点状态转换的事件 api/core/app/entities/queue_entities.py:42-43
  • QueueHumanInputFormFilledEvent:当工作流在用户交互后恢复时触发 api/core/app/entities/queue_entities.py:30-30
状态实体
用途来源
EasyUITaskState存储简单应用的 LLMResult 和元数据api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:100-107
WorkflowTaskState跟踪基于工作流应用的任务状态和响应数据api/core/app/entities/task_entities.py:68-68
GraphRuntimeState工作流引擎的核心状态,包含变量池api/core/app/apps/workflow/generate_task_pipeline.py:122-122

实现细节:响应处理

BasedGenerateTaskPipeline 实现了将内部队列事件转换为外部响应的过程。

阻塞模式与流式模式
  • 流式模式:管线生成 StreamResponse 对象,这些对象通常会被转换为服务器推送事件(SSE) api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:130-131
  • 阻塞模式:管线消费整个生成器,将结果累积在 TaskState 中,并返回一个单一的 BlockingResponse(例如 ChatbotAppBlockingResponseapi/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:135-163
# 来自 api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:142-146
for stream_response in generator:
    match stream_response:
        case ErrorStreamResponse():
            raise stream_response.err
        case MessageEndStreamResponse():
            # 累积使用情况和元数据,用于最终的阻塞响应

来源:api/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.py:135-163, api/core/app/apps/workflow/generate_task_pipeline.py:139-170