agentic_huge_data_base / wiki
页面 Dify · 2.2 核心数据模型与领域实体·DeepWiki 中文全文译文

2.2 · 核心数据模型与领域实体(Core Data Models and Domain Entities)

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

项目Dify 章节2.2 状态全文译文 模块文档对象与元数据、检索、召回与索引、模型调用与提供方适配、配置治理
源码线索
  • api/controllers/console/app/workflow_comment.py
  • api/controllers/console/app/workflow_run.py
  • api/fields/annotation_fields.py
  • api/fields/conversation_fields.py
  • api/fields/conversation_variable_fields.py
  • api/fields/end_user_fields.py
  • api/fields/file_fields.py
  • api/fields/member_fields.py
  • api/fields/message_fields.py
  • api/fields/tag_fields.py
模块标签
  • 文档对象与元数据
  • 检索、召回与索引
  • 模型调用与提供方适配
  • 配置治理
  • 图谱与关系

章节正文

核心数据模型与领域实体

核心数据模型与领域实体

相关源文件

本章引用的主要源码文件:

  • api/controllers/console/app/workflow_comment.py
  • api/controllers/console/app/workflow_run.py
  • api/fields/annotation_fields.py
  • api/fields/conversation_fields.py
  • api/fields/conversation_variable_fields.py
  • api/fields/end_user_fields.py
  • api/fields/file_fields.py
  • api/fields/member_fields.py
  • api/fields/message_fields.py
  • api/fields/tag_fields.py
  • api/fields/workflow_app_log_fields.py
  • api/fields/workflow_run_fields.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/web.py
  • api/models/workflow.py
  • api/tests/unit_tests/controllers/console/app/test_workflow_comment_api.py

本文档提供了 Dify 后端系统中核心数据模型与领域实体的全面参考。这些 SQLAlchemy 模型代表了支撑平台功能的持久化数据结构,涵盖多租户、应用、工作流、知识库、对话以及工具集成等方面。

范围:本页面涵盖位于 api/models/ 中的数据库模式与 ORM 模型。如需了解这些模型在业务逻辑中的使用方式,请参阅服务层文档。如需了解工作流执行时的运行时行为,请参阅工作流定义与执行模型

多租户架构基础

Dify 实现了严格的多租户架构,所有资源均按工作空间进行隔离。基础模型确立了租户所有权和基于角色的访问控制。

领域到实体的映射:身份与访问

下图将自然语言概念中的"工作空间"和"用户"桥接到代码层面的 TenantAccount 实体。

Dify · 领域到实体的映射:身份与访问 · 图 1
Dify · 领域到实体的映射:身份与访问 · 图 1

来源:api/models/account.py:19-25, api/models/account.py:87-116, api/models/account.py:242-277, api/models/account.py:279-302

租户模型(租户)

Tenant 模型代表一个工作空间。每个租户拥有完全的数据隔离 api/models/account.py:242-277encrypt_public_key 用于加密静态存储的凭证和 API 密钥 api/models/account.py:255

账户模型(账号)

Account 模型代表单个用户账户 api/models/account.py:87-116。它包含 current_tenant 等属性以及用于检查角色的方法 api/models/account.py:126-173

租户账户关联模型(TenantAccountJoin)

TenantAccountJoin 模型实现了账户与租户之间的多对多关系 api/models/account.py:279-302。它使用 TenantAccountRole 枚举来定义权限 api/models/account.py:19-78

  • OWNER:完全控制 api/models/account.py:20
  • ADMIN:管理访问 api/models/account.py:21
  • EDITOR:应用/数据集的增删改查 api/models/account.py:22
  • NORMAL:仅使用 api/models/account.py:23
  • DATASET_OPERATOR:数据集专属管理 api/models/account.py:24

来源:api/models/account.py:19-302

应用模型

应用是面向用户的主要实体。每个应用都有一个决定其执行行为的模式,以及一个定义其大语言模型(LLM)设置的配置。

应用(App)与应用模型配置(AppModelConfig)

App 模型是所有应用类型的核心实体 api/models/model.py:683-772

  • mode:由 AppMode 枚举定义(例如 chatworkflowagent-chatapi/models/model.py:330-350
  • AppModelConfig:对于非工作流应用,该字段存储序列化的 JSON 配置,涵盖 agent_modedataset_configsmodel 参数等功能 api/models/model.py:421-512
实体关联:应用配置

此图将应用概念映射到管理其运行时配置的代码实体。

Dify · 实体关联:应用配置 · 图 2
Dify · 实体关联:应用配置 · 图 2

来源:api/models/model.py:233-254, api/models/model.py:421-512, api/models/model.py:683-772

来源:api/models/model.py:318-772

工作流模型

工作流支持基于图的编排,节点代表不同的操作。

工作流(工作流)与工作流运行(WorkflowRun)
  • 工作流(Workflow):以 JSON 格式存储图定义(节点和边)api/models/workflow.py:147-206
  • 工作流运行(WorkflowRun):代表一个具体的执行实例,跟踪状态、耗时和 Token 使用量 api/models/workflow.py:555-645
工作流节点执行

每个节点的执行情况由 WorkflowNodeExecution 跟踪,存储 inputsoutputs 和执行元数据 api/models/workflow.py:727-832。大数据块会被卸载到 WorkflowNodeExecutionOffload 以优化数据库性能 api/models/workflow.py:1134-1154

来源:api/models/workflow.py:147-1154

数据集与知识库模型

数据集代表知识库,包含为检索增强生成(RAG)进行索引的文档集合。

数据集(数据集)与文档(文档)
  • 数据集(Dataset):管理元数据、索引技术(high_qualityeconomy)以及检索设置 api/models/dataset.py:167-213
  • 文档(Document):跟踪索引生命周期,包括 indexing_status(例如 parsingcompleted)和 data_source_info api/models/dataset.py:354-468
文档片段(DocumentSegment)

文档会被拆分为 DocumentSegment 记录 api/models/dataset.py:796-857。每个片段对应向量数据库中的一个向量,通过 index_node_id 标识 api/models/dataset.py:814

来源:api/models/dataset.py:167-857

工具提供者模型

Dify 支持多种工具类型(内置、API 和 MCP)。

模型类工具类型描述
BuiltinToolProvider内置硬编码工具,带有租户专属凭证 api/models/tools.py:73-127
ApiToolProvider自定义 API通过 OpenAPI/Swagger 模式定义 api/models/tools.py:128-182
WorkflowToolProvider工作流发布为工具的工作流 api/models/tools.py:216-281

来源:api/models/tools.py:73-281

模型与提供者配置

  • 提供者(Provider):代表大语言模型(LLM)提供者及其凭证 api/models/provider.py:33-80
  • 提供者模型(ProviderModel):管理提供者下可用的特定模型(例如 gpt-4api/models/provider.py:115-143
  • 租户默认模型(TenantDefaultModel):允许工作空间为 chatembeddingrerank 等任务设置默认大语言模型(LLM)api/models/provider.py:163-199

来源:api/models/provider.py:33-199

关键实现模式

序列化与访问器

许多模型采用一种模式,将复杂的 JSON 存储在 LongText 列中,并附带一个对应的 _dict 属性以便访问。例如,AppModelConfig.model 存储字符串,而 AppModelConfig.model_dict 提供解析后的字典 api/models/model.py:431-436

加密

敏感数据(如 BuiltinToolProvider 中的 encrypted_credentials api/models/tools.py:100Provider 中的 encrypted_config api/models/provider.py:93-95)在静态存储时会被加密,以确保安全。

软删除

App 等实体包含一个 is_deleted 标志 api/models/model.py:754,以支持数据恢复并维护日志中的引用完整性。

来源:api/models/model.py:431-754, api/models/tools.py:100, api/models/provider.py:93-95