速率限制
处理请求频率、Token 吞吐与并发限制,构建稳定的重试队列。
速率限制可能按账户、API Key、模型、请求数、Token 吞吐或并发数计算。具体额度会随套餐和服务策略变化,以控制台展示与实际响应为准。
触发限制时
API 会返回 429 Too Many Requests。客户端应暂停直接重试,将请求放入队列,并使用带随机抖动的指数退避。
async function withRetry<T>(run: () => Promise<T>, maxAttempts = 4) {
let lastError: unknown;
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
try {
return await run();
} catch (error) {
lastError = error;
const delay = Math.min(500 * 2 ** attempt, 8_000);
await new Promise((resolve) =>
setTimeout(resolve, delay + Math.random() * 250),
);
}
}
throw lastError;
}推荐策略
- 在服务入口限制每个用户的并发。
- 按模型拆分队列,避免一个高负载模型阻塞所有请求。
- 为交互请求和离线任务设置不同优先级。
- 对长上下文请求预估 Token,避免瞬时吞吐过高。
- 设置最大重试次数和总耗时上限。
- 记录
429比例、排队时间和最终失败率。
不建议的做法
- 多个实例在同一时刻无退避重试。
- 遇到
429立即切换到无限并发的备用 Key。 - 为了追求吞吐取消所有超时。
- 对参数错误或认证失败进行自动重试。
申请更高额度
当稳定流量接近当前限制时,先整理峰值请求数、Token 吞吐、目标模型和可接受延迟,再通过控制台支持渠道沟通额度。