概述
为保障平台稳定性和公平使用,Token Hub 对 API 调用施加多层限流策略。不同套餐享有不同的限额,超出限制将返回 429 错误。
提示
限流按 API Key 维度计算,多 Key 可分散流量。如需更高配额,请升级套餐或联系商务团队。
限制类型
RPM — 每分钟请求数 (Requests Per Minute)
每个 API Key 每分钟允许发送的最大请求数。RPM 在每分钟开始时重置,而非滑动窗口。
- 请求到达后立即计入 RPM 配额
- 无论请求成功或失败,均占用 RPM 额度
- 响应头
X-RateLimit-Limit显示当前 RPM 上限,X-RateLimit-Remaining显示剩余额度
TPM — 每分钟 Token 数 (Tokens Per Minute)
每个 API Key 每分钟允许消耗的最大 Token 数(含输入和输出 Token)。
- TPM 按 LLM 模型的输入 + 输出 Token 总和计算
- 图像/视频模型不适用 TPM 限制,而是按次计费
- 当 TPM 超限时,已进行的请求不会被中断,但新的请求将被拒绝
每日调用限制
每个 API Key 每日允许的 API 调用总次数,每日 0 点(UTC+8)重置。
- 所有类型的 API 调用均计入每日限额(含 Chat、Completions、Embeddings 等)
- 可通过控制台查看当日已用额度
并发限制
同一 API Key 同时进行的最大请求数。超出并发限制的请求将收到 429 错误。
- 并发数按正在处理中的请求计算(已返回响应的请求不占用并发)
- 长时间流式输出会持续占用并发槽位
- 建议合理控制并发,避免一次性发起大量请求
API Key 数量限制
每个账户可创建的 API Key 数量上限。多 Key 可以分散 RPM 和每日调用配额。
各套餐限制对比
| 限制项 | 免费版 | 开发者版 | 专业版 | 企业版 |
|---|---|---|---|---|
| API Key 数 | 3 | 10 | 50 | 无限 |
| RPM(每分钟请求数) | 20 | 60 | 200 | 1000+ |
| 每日调用次数 | 1,000 | 10,000 | 100,000 | 自定义 |
| 并发请求数 | 2 | 5 | 20 | 自定义 |
注意
以上限制按每个 API Key 独立计算。例如,开发者版拥有 10 个 Key,每个 Key 均有独立的 60 RPM 和 10,000 次每日调用配额。
超限错误格式
当请求超出限制时,API 返回 429 Too Many Requests 状态码,响应体包含具体的超限信息:
RPM 超限
rate_limit_exceeded 响应
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1718000060
Retry-After: 12
{
"error": {
"message": "Rate limit exceeded. Please retry after 12 seconds.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}
每日调用超限
daily_limit_exceeded 响应
{
"error": {
"message": "Daily usage limit of 10000 calls reached. Your limit will reset at midnight (UTC+8).",
"type": "rate_limit_error",
"code": "daily_limit_exceeded"
}
}
并发超限
concurrent_limit_exceeded 响应
{
"error": {
"message": "Concurrent request limit of 5 reached. Please wait for ongoing requests to complete.",
"type": "rate_limit_error",
"code": "concurrent_limit_exceeded"
}
}
超限后的建议操作
1. 实现重试机制
使用指数退避(Exponential Backoff)策略自动重试:
指数退避重试(Python)
import time, random
import openai
client = openai.OpenAI(
api_key="sk-your-api-key",
base_url="https://api.dandyai.com/v1"
)
def call_with_retry(messages, max_retries=5):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model="gpt-4o",
messages=messages
)
except openai.RateLimitError as e:
if attempt == max_retries - 1:
raise
# 指数退避 + 随机抖动
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Rate limited, retrying in {wait:.1f}s...")
time.sleep(wait)
2. 读取响应头
利用响应头中的限流信息主动控制请求节奏:
| 响应头 | 说明 |
|---|---|
X-RateLimit-Limit |
当前 Key 的 RPM 上限 |
X-RateLimit-Remaining |
当前窗口剩余请求数 |
X-RateLimit-Reset |
限流窗口重置时间(Unix 时间戳) |
Retry-After |
建议等待秒数(仅 429 响应时返回) |
3. 分散流量
- 多 Key 分流:创建多个 API Key,将请求均匀分配到不同 Key
- 请求队列:在客户端实现请求队列,控制发送速率
- 批量接口:使用 Batch API 处理非实时任务,减少实时请求量
4. 升级套餐
如果业务持续触及限流上限,建议升级至更高套餐以获取更大的 RPM、每日调用和并发配额。企业版支持自定义限额,可联系商务团队定制。
限流响应头示例
每个成功的 API 请求都会返回限流相关的响应头,帮助您实时监控配额使用情况:
正常响应头
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1718000060
Content-Type: application/json
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
...
}