配额管理与额度池
配额管理与信用池
相关源文件
本章引用的主要源码文件:
api/controllers/console/__init__.pyapi/controllers/console/admin.pyapi/controllers/console/billing/billing.pyapi/controllers/console/billing/compliance.pyapi/controllers/console/error.pyapi/controllers/console/wraps.pyapi/controllers/service_api/wraps.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/entities/model_entities.pyapi/core/entities/provider_configuration.pyapi/core/hosting_configuration.pyapi/core/model_manager.pyapi/core/provider_manager.pyapi/core/schemas/resolver.pyapi/services/billing_service.pyapi/services/enterprise/enterprise_service.pyapi/services/entities/model_provider_entities.pyapi/services/feature_service.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_billing_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/controllers/console/workspace/test_workspace.pyapi/tests/unit_tests/core/entities/test_entities_provider_configuration.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_billing_service.pyapi/tests/unit_tests/services/test_model_load_balancing_service.py
目的与范围
本文档描述了 Dify 中的配额管理系统和信用池架构。它涵盖了平台如何跟踪和执行大语言模型(LLM)API 调用、功能使用以及不同部署层级(云端版 vs. 自托管版)之间的资源分配限制。本文档详细介绍了 LLMQuotaLayer、用于云端集成的 BillingService 以及用于管理试用版和付费版的 FeatureService。
有关模型提供者配置和凭证的信息,请参阅提供者与模型架构(6.1)。有关工作流执行和节点生命周期的信息,请参阅工作流定义与执行模型(5.1)。
系统概述
配额管理系统提供对大语言模型(LLM)调用和平台资源的使用跟踪与执行控制。它通过三种主要机制运行:
| 机制 | 目的 | 范围 |
|---|---|---|
| 大语言模型(LLM)配额配置 | 定义配额类型(试用版、免费版、付费版)和模型限制 | 按提供者、按租户 |
| 功能服务 | 检查基于计划的限制(应用数、成员数、向量空间) | 按租户 |
| 计费服务 | 管理托管试用版/付费版信用余额和预留 | 仅限云端版,按租户 |
关键特性:
- 执行前校验:通过装饰器和服务层检查,在任务或大语言模型(LLM)调用开始前验证配额可用性。
api/controllers/console/wraps.py:94-133 - 预留/提交模式:云端计费使用
reserve和commit流程,确保流式或长时间运行任务期间的准确性。api/services/billing_service.py:209-237 - 租户隔离:所有配额和信用池严格按
tenant_id隔离。api/services/billing_service.py:188-192 - 多层支持:云端版计划范围从
SANDBOX到TEAM,企业特定功能通过许可证启用。api/services/feature_service.py:128-150
核心组件与数据模型
功能与计费模型
系统使用 Pydantic 模型来定义各种平台资源的限制。这些模型由 FeatureService 填充。
标题:配额与功能数据结构
资源限制:
members:工作空间成员的最大数量。api/services/feature_service.py:131apps:允许的最大应用程序数量。api/services/feature_service.py:132vector_space:知识存储的容量。api/services/feature_service.py:133trigger_event:工作流/自动化的执行配额。api/services/feature_service.py:144
来源:api/services/feature_service.py:128-151,api/core/hosting_configuration.py:31-36
配额检查与扣除流程
云端版配额生命周期
在 Dify 云端版中,BillingService 使用预留模式管理分布式配额系统,以防止并发请求期间的超额使用。
标题:计费预留与提交序列
关键函数:
quota_reserve:如果租户对请求的功能信用不足,则阻止执行。api/services/billing_service.py:209-221quota_commit:根据实际使用量(例如实际使用的 Token 与预留的 Token)最终确定扣除。api/services/billing_service.py:224-236quota_release:如果任务失败或中止,则取消预留。api/services/billing_service.py:239-251
来源:api/services/billing_service.py:209-251
托管配置与模型限制
Dify 对"托管"提供者(例如 Dify 云端版提供的 OpenAI 或 Anthropic)的管理方式与自定义 API 密钥不同。
标题:提供者配置与配额映射
配额类型:
ProviderQuotaType.TRIAL:Dify 提供的有限免费使用。api/core/hosting_configuration.py:17-21ProviderQuotaType.PAID:基于 Dify 付费订阅的使用。api/core/hosting_configuration.py:23-25ProviderQuotaType.FREE:无限制或高限制的免费层模型。api/core/hosting_configuration.py:27-29
来源:api/core/hosting_configuration.py:12-36,api/core/provider_manager.py:100-136
速率限制与合规性
除了大语言模型(LLM)Token 之外,系统还使用装饰器对特定平台操作执行速率限制。
知识与 API 速率限制
- 知识速率限制:在
cloud_edition_billing_rate_limit_check中使用基于 Redis 的滑动窗口(zadd/zremrangebyscore)强制执行。api/controllers/console/wraps.py:161-180 - 合规性下载:使用专门的
RateLimiter限制下载合规性报告的频率。api/services/billing_service.py:180
控制器级别执行
Dify 使用 Flask 装饰器包装敏感端点:
cloud_edition_billing_resource_check:通过检查FeatureService.get_features拦截创建应用或添加成员的请求。api/controllers/console/wraps.py:94-133cloud_edition_billing_knowledge_limit_check:将高级知识功能(例如添加片段)限制为付费计划。api/controllers/console/wraps.py:136-158validate_app_token:确保应用程序处于活动状态且租户未被归档,然后才允许 API 访问。api/controllers/service_api/wraps.py:55-78
来源:api/controllers/console/wraps.py:94-180,api/controllers/service_api/wraps.py:55-133
关键类总结
| 类 | 职责 |
|---|---|
BillingService | 处理配额预留、提交和订阅信息的 API 通信。api/services/billing_service.py:176 |
FeatureService | 从环境变量、计费 API 和企业许可证聚合计划限制。api/services/feature_service.py:187 |
ProviderManager | 管理租户范围的提供者配置,包括托管配额。api/core/provider_manager.py:64 |
HostingConfiguration | 定义 Dify 云端版托管的硬编码配额和受限模型。api/core/hosting_configuration.py:43 |
ModelInstance | 检查模型是否已启用,并在调用前获取凭证/负载均衡设置。api/core/model_manager.py:35 |
来源:api/services/billing_service.py:176,api/services/feature_service.py:187,api/core/provider_manager.py:64,api/core/hosting_configuration.py:43,api/core/model_manager.py:35