速率限制

处理请求频率、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;
}

推荐策略

  1. 在服务入口限制每个用户的并发。
  2. 按模型拆分队列,避免一个高负载模型阻塞所有请求。
  3. 为交互请求和离线任务设置不同优先级。
  4. 对长上下文请求预估 Token,避免瞬时吞吐过高。
  5. 设置最大重试次数和总耗时上限。
  6. 记录 429 比例、排队时间和最终失败率。

不建议的做法

  • 多个实例在同一时刻无退避重试。
  • 遇到 429 立即切换到无限并发的备用 Key。
  • 为了追求吞吐取消所有超时。
  • 对参数错误或认证失败进行自动重试。

申请更高额度

当稳定流量接近当前限制时,先整理峰值请求数、Token 吞吐、目标模型和可接受延迟,再通过控制台支持渠道沟通额度。

本页目录