核心数据模型与领域实体
核心数据模型与领域实体
相关源文件
本章引用的主要源码文件:
api/controllers/console/app/workflow_comment.pyapi/controllers/console/app/workflow_run.pyapi/fields/annotation_fields.pyapi/fields/conversation_fields.pyapi/fields/conversation_variable_fields.pyapi/fields/end_user_fields.pyapi/fields/file_fields.pyapi/fields/member_fields.pyapi/fields/message_fields.pyapi/fields/tag_fields.pyapi/fields/workflow_app_log_fields.pyapi/fields/workflow_run_fields.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/web.pyapi/models/workflow.pyapi/tests/unit_tests/controllers/console/app/test_workflow_comment_api.py
本文档提供了 Dify 后端系统中核心数据模型与领域实体的全面参考。这些 SQLAlchemy 模型代表了支撑平台功能的持久化数据结构,涵盖多租户、应用、工作流、知识库、对话以及工具集成等方面。
范围:本页面涵盖位于 api/models/ 中的数据库模式与 ORM 模型。如需了解这些模型在业务逻辑中的使用方式,请参阅服务层文档。如需了解工作流执行时的运行时行为,请参阅工作流定义与执行模型。
多租户架构基础
Dify 实现了严格的多租户架构,所有资源均按工作空间进行隔离。基础模型确立了租户所有权和基于角色的访问控制。
领域到实体的映射:身份与访问
下图将自然语言概念中的"工作空间"和"用户"桥接到代码层面的 Tenant 和 Account 实体。
来源: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-277。encrypt_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枚举定义(例如chat、workflow、agent-chat)api/models/model.py:330-350。AppModelConfig:对于非工作流应用,该字段存储序列化的 JSON 配置,涵盖agent_mode、dataset_configs和model参数等功能api/models/model.py:421-512。
实体关联:应用配置
此图将应用概念映射到管理其运行时配置的代码实体。
来源: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 跟踪,存储 inputs、outputs 和执行元数据 api/models/workflow.py:727-832。大数据块会被卸载到 WorkflowNodeExecutionOffload 以优化数据库性能 api/models/workflow.py:1134-1154。
来源:api/models/workflow.py:147-1154
数据集与知识库模型
数据集代表知识库,包含为检索增强生成(RAG)进行索引的文档集合。
数据集(数据集)与文档(文档)
- 数据集(Dataset):管理元数据、索引技术(
high_quality或economy)以及检索设置api/models/dataset.py:167-213。 - 文档(Document):跟踪索引生命周期,包括
indexing_status(例如parsing、completed)和data_source_infoapi/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-4)api/models/provider.py:115-143。 - 租户默认模型(TenantDefaultModel):允许工作空间为
chat、embedding或rerank等任务设置默认大语言模型(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:100 或 Provider 中的 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