agentic_huge_data_base / wiki
页面 Dify · 6.1 提供方与模型架构·DeepWiki 中文全文译文

6.1 · 提供方与模型架构(Provider and Model Architecture)

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

项目Dify 章节6.1 状态全文译文 模块系统架构、模型调用与提供方适配、测试、发布与运维、接口与服务契约
源码线索
  • api/core/agent/output_parser/cot_output_parser.py
  • api/core/app/app_config/easy_ui_based_app/model_config/converter.py
  • api/core/app/llm/model_access.py
  • api/core/entities/model_entities.py
  • api/core/entities/provider_configuration.py
  • api/core/hosting_configuration.py
  • api/core/model_manager.py
  • api/core/provider_manager.py
  • api/core/schemas/resolver.py
  • api/services/enterprise/enterprise_service.py
模块标签
  • 系统架构
  • 模型调用与提供方适配
  • 测试、发布与运维
  • 接口与服务契约
  • 界面与交互

章节正文

提供方与模型架构

提供商与模型架构

相关源文件

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

  • api/core/agent/output_parser/cot_output_parser.py
  • api/core/app/app_config/easy_ui_based_app/model_config/converter.py
  • api/core/app/llm/model_access.py
  • api/core/entities/model_entities.py
  • api/core/entities/provider_configuration.py
  • api/core/hosting_configuration.py
  • api/core/model_manager.py
  • api/core/provider_manager.py
  • api/core/schemas/resolver.py
  • api/services/enterprise/enterprise_service.py
  • api/services/entities/model_provider_entities.py
  • api/services/model_load_balancing_service.py
  • api/services/model_provider_service.py
  • api/tests/integration_tests/model_runtime/__mock/plugin_model.py
  • api/tests/test_containers_integration_tests/services/test_api_based_extension_service.py
  • api/tests/test_containers_integration_tests/services/test_model_load_balancing_service.py
  • api/tests/test_containers_integration_tests/services/test_model_provider_service.py
  • api/tests/unit_tests/core/entities/test_entities_provider_configuration.py
  • api/tests/unit_tests/core/test_model_manager.py
  • api/tests/unit_tests/core/test_provider_configuration.py
  • api/tests/unit_tests/core/test_provider_manager.py
  • api/tests/unit_tests/models/test_provider_models.py
  • api/tests/unit_tests/services/test_model_load_balancing_service.py

目的与范围

本文档描述了 Dify 中的提供商与模型管理系统,该系统负责处理与 100 多个大语言模型(LLM)提供商(如 OpenAI、Anthropic 等)及其模型的集成。内容涵盖:

  • 提供商、模型和凭证的数据库模型
  • 运行时架构(ModelManagerProviderManagerProviderConfiguration
  • 凭证管理与解析
  • 负载均衡配置
  • 模型实例的创建与校验

关于这些提供商在执行过程中如何被调用的信息,请参阅模型调用管线。关于配额扣除和信用额度追踪,请参阅配额管理与信用池

架构总览:

该系统由三个主要层级组成:

  1. 数据库层api/models/provider.py 中的 SQLAlchemy 模型 api/models/provider.py:1-372
  2. 管理层:用于配置组装的 ProviderManagerModelManagerapi/core/provider_manager.py:64-79, api/core/model_manager.py:35-56
  3. 运行时层ModelInstance 的创建和凭证解析 api/core/model_manager.py:35-56

核心数据库模式

提供商与模型架构由多个相互关联的数据库表组成,用于管理提供商配置、模型设置、凭证和租户偏好。

实体关系图
Dify · 实体关系图 · 图 1
Dify · 实体关系图 · 图 1

来源: api/models/provider.py:49-372

提供商类型与配额系统

提供商类型

系统支持两种在 ProviderType 枚举中定义的提供商类型:

类型描述使用场景
SYSTEM具有系统级配置的预定义提供商由 Dify 管理的内置提供商
CUSTOM用户配置的提供商自定义 API 端点、自托管模型

来源: api/models/provider.py:19-28

配额类型

对于托管(云)环境,系统通过 ProviderQuotaType 追踪三种配额类型 api/core/entities/provider_entities.py:18-34

配额类型描述追踪方式
PAID为托管提供商购买的配额quota_used 中扣除,受 quota_limit 限制
FREE第三方提供商提供的免费额度不在 Dify 配额系统中追踪
TRIAL托管提供商的试用配额有时间或使用量限制的试用信用额度

托管配置: 在云模式下,HostingConfiguration 会使用环境变量为 Azure OpenAI 和 Anthropic 等提供商初始化这些配额 api/core/hosting_configuration.py:52-66

提供方与 ProviderModel 层级

提供方模型

Provider 表代表一个已配置的提供商实例。关键字段如下:

# api/models/provider.py:49-127
class Provider(TypeBase):
    __tablename__ = "providers"

    id: Mapped[str]                    # UUID 主键
    tenant_id: Mapped[str]              # 工作空间隔离
    provider_name: Mapped[str]          # 例如 "openai"
    provider_type: Mapped[str]          # "custom" 或 "system"
    is_valid: Mapped[bool]              # 凭证校验状态
    credential_id: Mapped[str | None]   # 外键,关联 ProviderCredential

    # 配额字段
    quota_type: Mapped[str | None]      # "paid"、"free" 或 "trial"
    quota_limit: Mapped[int | None]     # 最大配额
    quota_used: Mapped[int | None]      # 当前使用量

来源: api/models/provider.py:49-127

ProviderModel 模型

ProviderModel 表代表提供商内的单个模型:

# api/models/provider.py:129-177
class ProviderModel(TypeBase):
    __tablename__ = "provider_models"

    id: Mapped[str]                  # UUID 主键
    tenant_id: Mapped[str]            # 工作空间隔离
    provider_name: Mapped[str]        # 父级提供商
    model_name: Mapped[str]           # 例如 "gpt-4"
    model_type: Mapped[str]           # "llm"、"text-embedding" 等
    credential_id: Mapped[str | None] # 外键,关联 ProviderModelCredential

来源: api/models/provider.py:129-177

凭证管理架构

系统实现了一个两级凭证层级:提供商级凭证和模型级凭证,两者均以加密方式存储。

凭证层级
Dify · 凭证层级 · 图 2
Dify · 凭证层级 · 图 2
ProviderCredential 和 ProviderModelCredential

ProviderCredential 为每个提供商存储多个命名的凭证 api/models/provider.py:315-338ProviderModelCredential 存储特定于模型的凭证,允许每个模型使用不同的 API 密钥 api/models/provider.py:341-372。两者都使用 encrypted_config 来存储敏感数据。

负载均衡架构

负载均衡系统为每个模型启用多个凭证配置,以实现高可用性和速率限制分发。

负载均衡组件
Dify · 负载均衡组件 · 图 3
Dify · 负载均衡组件 · 图 3

LBModelManager: 当启用负载均衡时,ModelInstance 会初始化一个 LBModelManager api/core/model_manager.py:105-114。该管理器负责在调用期间从 load_balancing_configs 列表中选择凭证 api/core/model_manager.py:51-56

来源: api/models/provider.py:284-312, api/core/model_manager.py:83-116, api/services/model_load_balancing_service.py:45-167

运行时架构

ModelManager 和 ProviderManager

运行时层使用两个关键的管理器类来访问配置:

位置用途
ProviderManagerapi/core/provider_manager.py管理租户范围内的提供商配置组装和缓存 api/core/provider_manager.py:64-79
ProviderConfigurationapi/core/entities/provider_configuration.py用于管理凭证的增删改查(CRUD)、负载均衡和模型启用的实体 api/core/entities/provider_configuration.py:57-72
ModelInstanceapi/core/model_manager.py在运行时代表一个特定模型,持有其解析后的凭证和负载均衡管理器 api/core/model_manager.py:35-56
凭证解析

ProviderConfiguration 类根据提供商类型解析凭证:

# api/core/entities/provider_configuration.py:115-150
def get_current_credentials(self, model_type: ModelType, model: str) -> dict[str, Any] | None:
    if self.using_provider_type == ProviderType.SYSTEM:
        # 从系统范围的托管配置中解析
        return self.system_configuration.credentials.copy()
    else:
        # 从自定义的模型级或提供商级配置中解析
        # ...

来源: api/core/entities/provider_configuration.py:115-170

桥梁:自然语言到代码实体空间的映射
Dify · 桥梁:自然语言到代码实体空间的映射 · 图 4
Dify · 桥梁:自然语言到代码实体空间的映射 · 图 4

来源: api/core/provider_manager.py:64-100, api/core/entities/provider_configuration.py:57-72, api/core/model_manager.py:35-56, api/services/model_load_balancing_service.py:45-58

模型参数与提供商服务

系统提供专用服务来处理高级提供商操作和模型模式解析。

ModelProviderService

ModelProviderService 作为控制台 API 的主要接口,用于获取提供商列表和模型配置 api/services/model_provider_service.py:24-32。它通过清理 CustomModelConfiguration 对象,确保敏感凭证不会在列表视图中暴露 api/services/model_provider_service.py:78-95

ModelLoadBalancingService

该服务管理负载均衡配置的生命周期,包括为特定模型启用/禁用负载均衡,以及管理代表默认提供商/模型凭证的 __inherit__ 配置 api/services/model_load_balancing_service.py:50-91, api/services/model_load_balancing_service.py:147-168

桥梁:请求流到代码实体的映射
Dify · 桥梁:请求流到代码实体的映射 · 图 5
Dify · 桥梁:请求流到代码实体的映射 · 图 5

来源: api/services/model_provider_service.py:56-68, api/services/model_load_balancing_service.py:50-70, api/models/provider.py:257-282, api/models/provider.py:284-312