首页/AI/AI 应用速查/多租户配额与告警

多租户配额与告警

给每个用户/租户设 token 与费用配额:周期重置、软硬双阈值(80% 告警、100% 拦截),防止单个租户或异常脚本把全站预算烧穿。

AI 应用速查AI更新于 2026-10-13

多租户配额是什么

按用户、租户或应用把用量切分开,给每一份设置上限与告警:软阈值提示、硬阈值拦截。它的价值不只是控成本,也在防事故——一个写错的循环调用或被盗用的密钥,能在几小时内烧掉整月预算,而只看总量账单根本定位不到是谁在烧。落地时最容易做错的三处是计量维度是否覆盖多模态、周期重置是否与计费一致、预扣额度失败后是否归还。

基本信息

计量维度按用户、租户、应用或 API 密钥切分,可组合使用
计量项输入输出 token、请求次数、图像张数、语音分钟,多模态需分开计
重置周期日或月滚动窗口,用带过期时间的计数器实现
双阈值软阈值约 80% 触发告警,硬阈值 100% 拦截并返回明确提示
例外通道白名单与临时提额走审批,并留下操作记录
额度归还调用失败或中途取消时,预扣的额度必须退回,否则重试会重复扣减

典型使用场景

  • SaaS 套餐额度:基础版与专业版给不同的 token 上限,按套餐校验
  • 多个团队共用一套模型账号:按团队分摊用量,月底能出成本明细
  • 防密钥滥用:单个密钥在异常时段高频调用,配额能自动限速止损
  • 大客户临时提额:走审批流程提额,到期自动回落而非永久放开
  • 成本归因与对账:把供应商账单与租户用量对齐,定位漏账与跑冒滴漏

预扣、校验与归还

预扣、校验与归还
def reserve(tenant, est_tokens):
    key = f"quota:{tenant}:{today()}"          # 按租户与当天生成计数键
    used = redis.incrby(key, est_tokens)       # 调用前先预扣,避免并发超额
    redis.expire(key, 86400 * 2)               # 计数器过两天自动清理,防止键堆积
    limit = plans[tenant.plan].daily_tokens
    if used > limit:                           # 硬阈值:直接拦截,不要等模型返回
        redis.decrby(key, est_tokens)          # 拦截时必须把预扣的量退回去
        raise QuotaExceeded(tenant, used, limit)
    if used > 0.8 * limit:
        alert(f"租户 {tenant} 用量已达 80%")    # 软阈值提醒,人工介入更早

def release(tenant, est_tokens, actual_tokens):
    redis.incrby(f"quota:{tenant}:{today()}", est_tokens - actual_tokens)  # 按实际用量校正

维度与计量注意点

维度计量单位注意点
文本对话输入与输出 token 分开输出单价通常更高,单列一列
图像生成按张数与尺寸档位重生成要计入额度,否则成预算黑洞
语音转写按音频分钟与文本 token 不可混算
向量与重排按存储量或处理对数独立配额,避免检索侧挤占生成预算
请求次数按调用次数防止高并发短请求绕过 token 限制
配额拦截必须发生在调用模型之前:先扣后调,失败归还。如果先调后扣,并发场景下多个请求会同时通过校验,超限照样发生。
只有总量告警没有租户维度,等于没有配额:账单超标时无法定位是哪个租户或哪把密钥造成的,只能被动补款。

易错点

  • 预扣额度不归还:调用失败的请求也占用额度,正常用户被误伤并投诉
  • 配额判断放在模型返回之后:并发请求同时通过校验,超限拦截形同虚设
  • 只统计 token 不统计图像与语音:多模态产品里图片重生成直接绕开全部限制
  • 没有租户维度只有全局告警:超标时无法定位责任方,排查只能靠猜
  • 临时提额不设到期时间:某次事故性提额变成永久额度,成本基线被抬高

数据来源与参考

  • 多租户配额与限流工程实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌