AI API 限流机制完全解析

调用 AI API 时经常遇到 429 限流错误?本文全面解析各大 AI 平台的限流机制(RPM、TPM、并发数),以及有效的应对策略。

什么是 API 限流?

API 限流(Rate Limiting)是服务端为了保护系统稳定性而设置的请求频率限制。通常包含三个维度:

各平台限流标准

Claude(Anthropic)

Tier      RPM     TPM(输入)      TPM(输出)
────────  ──────  ──────────────  ──────────────
Tier 1    50      40,000          8,000
Tier 2    1,000   80,000          16,000
Tier 3    2,000   160,000         32,000
Tier 4    4,000   400,000         80,000

Claude 特有的 529 过载错误:即使未超出个人限额,当 Anthropic 服务器整体过载时,也会返回 529 状态码。

OpenAI(GPT)

Tier      RPM       TPM
────────  ────────  ──────────
Free      3         40,000
Tier 1    500       200,000
Tier 2    5,000     2,000,000
Tier 3    5,000     10,000,000
Tier 5    10,000    30,000,000

Google(Gemini)

方案          RPM       TPM
────────────  ────────  ──────────
Free          15        1,000,000
Pay-as-you-go 1,000     4,000,000
提示:限流标准经常更新,以上数据仅供参考。具体限额请查阅各平台最新文档。

如何判断被限流?

HTTP 响应头

大多数 API 会在响应头中返回限流信息:

# 常见限流相关响应头
x-ratelimit-limit-requests: 1000        # RPM 上限
x-ratelimit-remaining-requests: 999     # 剩余请求数
x-ratelimit-reset-requests: 60s         # 重置时间
x-ratelimit-limit-tokens: 200000        # TPM 上限
x-ratelimit-remaining-tokens: 199000    # 剩余 Token
retry-after: 5                          # 建议等待秒数

错误响应格式

// 429 错误响应示例
{
  "error": {
    "type": "rate_limit_error",
    "message": "Rate limit reached for model claude-sonnet-4-20250514.
                Please retry after 30 seconds."
  }
}

应对策略

策略一:指数退避重试

async function callWithBackoff(fn, maxRetries = 5) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      return await fn()
    } catch (error) {
      if (error.status !== 429 || attempt === maxRetries - 1) throw error
      // 指数退避 + 随机抖动
      const delay = Math.pow(2, attempt) * 1000 + Math.random() * 1000
      console.log(`限流,${delay}ms 后重试...`)
      await new Promise((r) => setTimeout(r, delay))
    }
  }
}

策略二:请求队列

维护一个请求队列,按照 RPM 限制控制发送速率:

class RateLimiter {
  constructor(rpm) {
    this.interval = 60000 / rpm  // 每个请求的最小间隔
    this.lastRequest = 0
  }

  async wait() {
    const now = Date.now()
    const elapsed = now - this.lastRequest
    if (elapsed < this.interval) {
      await new Promise((r) => setTimeout(r, this.interval - elapsed))
    }
    this.lastRequest = Date.now()
  }
}

const limiter = new RateLimiter(50)  // 50 RPM
async function rateLimitedCall(params) {
  await limiter.wait()
  return client.chat.completions.create(params)
}

策略三:使用中转站

中转站是应对限流最有效的方案。以 claude4u.com 为例:

注意:即使使用中转站,也不应该无限制地发送请求。合理控制并发数和请求频率,既能保证服务质量,也能控制成本。

监控与预警

关键监控指标

最佳实践总结

  1. 了解你使用的模型和 Tier 对应的限流标准
  2. 实现指数退避重试,处理偶发限流
  3. 使用请求队列控制发送速率
  4. 通过中转站聚合多账户资源,提高整体限额
  5. 监控限流指标,提前预警和调整

Start Using 轻舟 AI

Stable, fast AI API relay — supports Claude, OpenAI, Gemini and more

Sign Up Now