限流说明

了解 Token Hub API 的速率限制与配额规则

概述

为保障平台稳定性和公平使用,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",
  ...
}