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

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

应用编排与外部知识接入 · 本章是 Dify DeepWiki 中文译文的独立章节页,保留原始链接、源码锚点、模块标签和章节层级。

项目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
模块标签
  • 文档对象与元数据
  • 检索、召回与索引
  • 模型调用与提供方适配
  • 配置治理
  • 图谱与关系

中文译文

核心数据模型与领域实体(中文译文)

原始 DeepWiki 页面:https://deepwiki.com/langgenius/dify/2.2-core-data-models-and-domain-entities
翻译时间:2026-05-27T08:44:20.224Z
翻译模型:deepseek-chat
原文字符数:9284
项目:Dify (dify)

---

核心数据模型与领域实体

相关源文件

以下文件用于生成此维基页面:

  • 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 实体。

graph TD
    subgraph "自然语言空间"
        User["用户/成员"]
        Workspace["工作空间/组织"]
        Role["权限/角色"]
    end

    subgraph "代码实体空间 (api/models/account.py)"
        Account["class Account(UserMixin, TypeBase)"]
        Tenant["class Tenant(TypeBase)"]
        Join["class TenantAccountJoin(TypeBase)"]
        RoleEnum["class TenantAccountRole(enum.StrEnum)"]
    end

    User -.-> Account
    Workspace -.-> Tenant
    Role -.-> RoleEnum

    Account -- "拥有多个" --> Join
    Tenant -- "拥有多个" --> Join
    Join -- "定义" --> RoleEnum

来源: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
实体关联:应用配置

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

graph LR
    subgraph "应用配置空间"
        App["应用实体"]
        Config["模型配置"]
        Invoke["调用上下文"]
    end

    subgraph "代码实体空间 (api/models/model.py)"
        AppClass["class App(Base)"]
        ConfigClass["class AppModelConfig(Base)"]
        ModelDict["AppModelConfigDict (TypedDict)"]
    end

    App --> AppClass
    Config --> ConfigClass
    ConfigClass -.-> ModelDict

来源: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