AI API 限流机制完全解析
调用 AI API 时经常遇到 429 限流错误?本文全面解析各大 AI 平台的限流机制(RPM、TPM、并发数),以及有效的应对策略。
什么是 API 限流?
API 限流(Rate Limiting)是服务端为了保护系统稳定性而设置的请求频率限制。通常包含三个维度:
- RPM(Requests Per Minute)— 每分钟请求次数
- TPM(Tokens Per Minute)— 每分钟 Token 处理量
- 并发数(Concurrent Requests)— 同时处理的请求数
各平台限流标准
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 为例:
- 多账户聚合:将多个账户的限额叠加,总 RPM/TPM 大幅提升
- 智能排队:并发超限时自动排队等待,而非直接返回 429
- 过载规避:检测到 529 过载的账户自动切换到其他账户
- 自动重试:服务端自动处理可重试的错误
注意:即使使用中转站,也不应该无限制地发送请求。合理控制并发数和请求频率,既能保证服务质量,也能控制成本。
监控与预警
关键监控指标
- 429 错误率:超过 5% 说明需要优化
- P95 延迟:延迟突增可能是限流前兆
- Token 消耗趋势:预测是否即将触及限额
- 请求队列长度:积压过多说明需要扩容或优化
最佳实践总结
- 了解你使用的模型和 Tier 对应的限流标准
- 实现指数退避重试,处理偶发限流
- 使用请求队列控制发送速率
- 通过中转站聚合多账户资源,提高整体限额
- 监控限流指标,提前预警和调整
轻舟 AI