日期:2026-08-08 | 状态:已确认 ✅ 确认项:三维度 ✓ | 429 quota_exceeded ✓ | 新用户默认不限 ✓ | 站内+邮件预留 ✓ 范围:用户控制台 + 平台管理后台 + 后端网关
| 层级 | 对象 | 说明 |
|---|---|---|
| 账号级 | User | 该用户全部 Key 的合计用量 |
| Key 级 | ApiKey | 单个 Key 的用量 |
生效逻辑:请求同时满足账号级与Key 级限额才放行;任一超限即拒绝。
| 维度 | 单位 | 每日窗口 | 总量窗口 |
|---|---|---|---|
| 请求次数 | req | 每日请求数上限 | 生命周期累计请求数 |
| Token 量 | tokens | 每日 prompt+completion 合计 | 累计合计 |
| 费用 | USD cents | 每日按售价累计 | 累计 |
每日窗口按自然日(UTC)滚动;总量窗口不清零。
| 级别 | 触发 | 行为 |
|---|---|---|
| 预警(软) | 任一维度达阈值(默认 80%,可配 50/80/90%) | ① 控制台用量进度条变黄 + 顶部横幅提醒 ② 邮件提醒(预留 SMTP,每日最多 1 封) |
| 硬限 | 任一维度达 100% | 网关拒绝请求,返回 429 quota_exceeded(OpenAI 兼容错误格式),控制台进度条变红 |
ApiKey 新增:
daily_req_limit Int? daily_token_limit BigInt?
daily_cost_cents_limit Int?
total_req_limit Int? total_token_limit BigInt?
total_cost_cents_limit Int?
alert_pct Int @default(80)
User 新增:同上字段(账号级;未设则用平台默认)
新表 QuotaEvent:id, userId, apiKeyId?, dimension(req/token/cost),
windowType(daily/total), threshold, current, action(alert/block), createdAt
/v1/chat/completions 鉴权后、计费前 checkQuota();流式请求在预扣前检查| 方法 | 路径 | 说明 |
|---|---|---|
| PUT | /v1/keys/:id/limits | 用户设置自己 Key 的限额 |
| PUT | /v1/account/limits | 用户设置账号级限额 |
| GET | /v1/usage/quota | 当前用量 vs 限额(进度条数据源) |
| GET | /v1/admin/quotas | 全局限额视图(用户/Key/配置/状态) |
| PUT | /v1/admin/quotas/defaults | 平台默认限额 |
| PUT | /v1/admin/users/:id/limits | 管理员覆盖用户限额 |
| GET | /v1/admin/quota-events | 预警/超限事件列表 |
顶部横幅:达预警/硬限时提示
限额管理 tab:全局列表(搜索/筛选超限用户)、默认限额设置、单用户覆盖、QuotaEvent 审计
用户详情:限额配置 + 实时用量
{error:{code:'quota_exceeded'}}