LLM 集成与模型管理
大语言模型(LLM)集成与模型管理
相关源文件
本 Wiki 页面的生成参考了以下源文件:
api/controllers/console/app/generator.pyapi/core/agent/output_parser/cot_output_parser.pyapi/core/app/app_config/easy_ui_based_app/model_config/converter.pyapi/core/app/llm/model_access.pyapi/core/datasource/datasource_manager.pyapi/core/entities/model_entities.pyapi/core/entities/provider_configuration.pyapi/core/hosting_configuration.pyapi/core/llm_generator/llm_generator.pyapi/core/llm_generator/output_parser/suggested_questions_after_answer.pyapi/core/llm_generator/prompts.pyapi/core/model_manager.pyapi/core/ops/base_trace_instance.pyapi/core/provider_manager.pyapi/core/schemas/resolver.pyapi/services/enterprise/enterprise_service.pyapi/services/entities/model_provider_entities.pyapi/services/model_load_balancing_service.pyapi/services/model_provider_service.pyapi/tests/integration_tests/model_runtime/__mock/plugin_model.pyapi/tests/test_containers_integration_tests/services/test_api_based_extension_service.pyapi/tests/test_containers_integration_tests/services/test_model_load_balancing_service.pyapi/tests/test_containers_integration_tests/services/test_model_provider_service.pyapi/tests/unit_tests/core/app/task_pipeline/test_easy_ui_based_generate_task_pipeline_core.pyapi/tests/unit_tests/core/datasource/test_datasource_manager.pyapi/tests/unit_tests/core/entities/test_entities_provider_configuration.pyapi/tests/unit_tests/core/helper/test_encrypter.pyapi/tests/unit_tests/core/llm_generator/test_llm_generator.pyapi/tests/unit_tests/core/ops/test_base_trace_instance.pyapi/tests/unit_tests/core/test_model_manager.pyapi/tests/unit_tests/core/test_provider_configuration.pyapi/tests/unit_tests/core/test_provider_manager.pyapi/tests/unit_tests/models/test_provider_models.pyapi/tests/unit_tests/services/test_model_load_balancing_service.py
目的与范围
本文档描述了 Dify 的大语言模型(LLM)集成系统。该系统通过统一的接口,抽象了来自不同提供商(如 OpenAI、Anthropic 等)的语言模型。内容涵盖了提供商/模型架构、凭证管理、模型调用管线以及多租户配置。
如需深入的技术细节,请参考以下子页面:
- 提供商与模型架构:详细说明
ModelManager、ProviderManager、提供商配置和凭证存储。 - 模型调用管线:详细说明
CredentialsProvider、ModelFactory、ModelInstance的创建过程以及执行流程。 - 配额管理与积分池:详细说明
LLMQuotaLayer、用量追踪以及试用版和付费版的积分池管理。
提供商与模型架构
该系统采用多层架构来表示大语言模型(LLM)提供商及其模型,主要由 ProviderManager api/core/provider_manager.py:64-89 进行管理。
核心实体与关系
租户、提供商和凭证之间的关系由几个关键的 SQLAlchemy 模型和领域实体定义。ProviderManager 负责将这些实体组装成运行时所需的连贯配置 api/core/provider_manager.py:100-136。
来源: api/models/provider.py:44-54, api/core/provider_manager.py:141-166
配置组装
ProviderManager 为特定租户组装 ProviderConfigurations api/core/provider_manager.py:100-139。该对象封装了以下内容:
- 系统配置:由 Dify 托管的试用或付费配额,在 Cloud 版本中通过
HostingConfiguration管理api/core/hosting_configuration.py:43-50。 - 自定义配置:用户为特定提供商或单个模型提供的 API 密钥
api/core/entities/provider_configuration.py:75-81。 - 模型设置:每个模型的启用状态和负载均衡状态
api/core/entities/provider_configuration.py:123-129。
更多详情,请参阅 提供商与模型架构。
模型调用管线
该调用管线使用 ModelInstance 抽象,将高级应用请求转换为特定于提供商的 API 调用。
模型实例获取
ModelInstance 是用于调用的运行时对象。它根据 using_provider_type(系统 vs. 自定义)解析正确的凭证 api/core/model_manager.py:137-158,并在启用负载均衡时初始化 LBModelManager api/core/model_manager.py:83-116。
调用流程
该管线确保凭证在传递给底层 ModelRuntime 之前已被解密且有效。
来源: api/core/model_manager.py:151-163, api/core/entities/provider_configuration.py:115-150, api/core/provider_manager.py:100-136
关于提示词构建和流式传输的详细信息,请参阅 模型调用管线。
配额与积分管理
Dify 通过分层配额系统管理用量,特别是在 Cloud 版本中,该系统与 HostingConfiguration 和 ProviderQuotaType 集成 api/core/hosting_configuration.py:12-35。
配额追踪与计费
系统使用 HostingProvider 实体来追踪 TrialHostingQuota(试用托管配额)、PaidHostingQuota(付费托管配额)和 FreeHostingQuota(免费托管配额)api/core/hosting_configuration.py:17-35。配额使用不同的单位进行追踪,例如 TIMES(次数)或 CREDITS(积分)api/core/hosting_configuration.py:70, 133。
负载均衡与冷却
LBModelManager 负责处理凭证轮换,以防止触及提供商的速率限制,并管理特定凭证的冷却状态 api/services/model_load_balancing_service.py:35-43。
| 组件 | 职责 |
|---|---|
ModelLoadBalancingService | 管理负载均衡配置的生命周期和状态 api/services/model_load_balancing_service.py:45。 |
ProviderCredentialsCache | 基于 Redis 的已解密凭证缓存,用于减少数据库/KMS 的负载 api/core/helper/model_provider_cache.py:31。 |
HostingConfiguration | 定义 Cloud 版本的默认试用模型和配额 api/core/hosting_configuration.py:43-66。 |
LLMGenerator | 用于系统级模型调用的工具(例如,生成对话标题)api/core/llm_generator/llm_generator.py:91。 |
关于积分如何扣除和共享的详细信息,请参阅 配额管理与积分池。
模型设置与默认值
租户可以通过 ModelProviderService api/services/model_provider_service.py:24 控制哪些模型可用以及默认使用哪些模型。
- ModelSettings(模型设置):可以为每个租户启用或禁用单个模型
api/core/entities/provider_configuration.py:81。 - TenantDefaultModel(租户默认模型):存储每种
ModelType(大语言模型、文本嵌入、重排序等)的首选模型api/models/provider.py:52。 - Load Balancing(负载均衡):用于在多个自定义凭证之间分配负载的配置
api/models/provider.py:45。
来源: api/core/provider_manager.py:100-136, api/core/entities/provider_configuration.py:115-150, api/services/model_provider_service.py:56-130