应用类型与执行模式
应用类型与执行模式
相关源文件
以下文件为本维基页面的生成提供了上下文:
api/core/app/app_config/entities.pyapi/core/app/apps/advanced_chat/app_config_manager.pyapi/core/app/apps/advanced_chat/app_generator.pyapi/core/app/apps/advanced_chat/app_runner.pyapi/core/app/apps/advanced_chat/generate_task_pipeline.pyapi/core/app/apps/agent_chat/app_generator.pyapi/core/app/apps/base_app_generator.pyapi/core/app/apps/chat/app_generator.pyapi/core/app/apps/completion/app_generator.pyapi/core/app/apps/message_based_app_generator.pyapi/core/app/apps/pipeline/pipeline_runner.pyapi/core/app/apps/workflow/app_generator.pyapi/core/app/apps/workflow/app_runner.pyapi/core/app/apps/workflow/generate_task_pipeline.pyapi/core/app/apps/workflow_app_runner.pyapi/core/app/entities/queue_entities.pyapi/core/app/entities/task_entities.pyapi/core/app/task_pipeline/easy_ui_based_generate_task_pipeline.pyapi/core/app/task_pipeline/message_cycle_manager.pyapi/core/app/workflow/layers/persistence.pyapi/core/llm_generator/output_parser/structured_output.pyapi/core/rag/entities/__init__.pyapi/core/rag/entities/index_entities.pyapi/core/rag/entities/metadata_entities.pyapi/core/rag/entities/processing_entities.pyapi/core/rag/entities/retrieval_settings.pyapi/core/workflow/nodes/knowledge_index/entities.pyapi/core/workflow/nodes/knowledge_retrieval/entities.pyapi/libs/helper.pyapi/models/account.pyapi/models/api_based_extension.pyapi/models/dataset.pyapi/models/model.pyapi/models/provider.pyapi/models/source.pyapi/models/task.pyapi/models/tools.pyapi/models/utils/file_input_compat.pyapi/models/web.pyapi/models/workflow.pyapi/services/entities/knowledge_entities/rag_pipeline_entities.pyapi/tests/unit_tests/core/app/apps/chat/test_base_app_runner_multimodal.pyapi/tests/unit_tests/core/app/apps/test_advanced_chat_app_generator.pyapi/tests/unit_tests/core/app/apps/test_base_app_generator.pyapi/tests/unit_tests/core/app/task_pipeline/test_easy_ui_based_generate_task_pipeline.pyapi/tests/unit_tests/core/app/task_pipeline/test_message_cycle_manager_optimization.pyapi/tests/unit_tests/core/workflow/nodes/test_start_node_json_object.pyapi/tests/unit_tests/libs/test_token_manager.pyweb/app/components/base/chat/chat/utils.ts
本文档解释了 Dify 支持的不同应用类型及其执行模式。内容涵盖应用的配置方式、模式如何决定执行行为,以及应用模式、工作流和 Agent 配置之间的关系。
有关工作流执行细节,请参阅 工作流定义与执行模型。有关检索增强生成(RAG)的特定配置,请参阅 检索策略与元数据过滤。
目的与范围
Dify 支持多种不同的应用类型,每种类型都针对不同的使用场景而设计。本文档描述了以下内容:
AppMode枚举及其取值。- 每种模式如何决定应用的行为和执行流程。
- 应用模式、
AppModelConfig和Workflow实体之间的关系。 - “简易 UI”(基于提示词)应用与基于工作流应用之间的区别。
- 用于处理流式响应和阻塞响应的任务管线架构。
应用模式枚举
所有 Dify 应用都有一个 mode 字段,用于确定其类型和执行行为。可用的模式在 AppMode 枚举中定义。
来源: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 的事件,并将其转换为流式或阻塞响应。
来源: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" 执行一个可视化图。它通常不保留对话历史状态。它使用 WorkflowAppGenerator 和 WorkflowAppRunner api/core/app/apps/workflow/app_generator.py:60-60, api/core/app/apps/workflow/app_runner.py:12-12。
高级对话模式
模式值: "advanced-chat" 将可视化工作流执行与对话记忆相结合。它允许在保持对话界面的同时实现复杂的逻辑(循环、条件)。
高级对话的执行流程:
- 运行器初始化:
AdvancedChatAppRunner准备GraphRuntimeStateapi/core/app/apps/advanced_chat/app_generator.py:23-23。 - 系统变量:通过
build_system_variables将对话上下文(例如dialogue_count、conversation_id、user_id)注入到工作流中api/core/app/apps/advanced_chat/generate_task_pipeline.py:175-184。 - 状态管理:使用
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
技术数据流:代码实体空间
下图弥合了高层应用概念与处理执行的具体代码实体之间的差距。
来源: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(例如ChatbotAppBlockingResponse)api/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