LEAPERone 文档

速率限制

了解 LEAPERone 用量等级、速率限制、请求配额、计费记录和账户时长如何影响生产环境中的 API 吞吐量。

LEAPERone 使用类似 OpenAI 的分级速率限制系统。你的等级决定了每个端点每分钟允许的最大请求数(RPM)。

用量等级

等级由累计消费金额和账户使用时长决定。随着 API 使用量增加,你会自动获得更高等级。

等级达标条件对话 RPM图像 RPM音频 RPM视频 RPM
0(免费)默认等级5223
1(入门)累计消费 $5205510
2(标准)累计消费 $50 且满 7 天40101020
3(专业)累计消费 $100 且满 7 天60201030
4(商业)累计消费 $250 且满 14 天100302050
5(企业)累计消费 $1000 且满 30 天2006030100

“天数”从首次付款开始计算,不是从账户创建日期开始计算。等级会自动升级,且不会降级。

你可以在 Dashboard 中查看当前等级和限制。

自定义 API 密钥限制

你可以为单个 API 密钥设置低于账户等级上限的自定义 RPM。这适合控制不同应用的用量。

前往 API 密钥设置,点击任意密钥的 RPM 标记即可设置。

速率限制响应头

请求触发速率限制时,429 响应会包含以下请求头:

请求头说明
X-RateLimit-Limit当前时间窗口允许的最大请求数。
X-RateLimit-Remaining当前时间窗口内剩余的请求数。
X-RateLimit-Reset当前时间窗口重置时的 Unix 时间戳(秒)。
Retry-After距离可以重试的秒数,仅在 429 响应中出现。

处理 429 响应

超过速率限制时,API 会返回 429 状态码:

429 响应
{
  "error": {
    "message": "Rate limit exceeded. Please slow down.",
    "type": "rate_limit_error",
    "code": "rate_limit_exceeded"
  }
}

请根据 Retry-After 请求头判断发送下一次请求前需要等待多久。

指数退避

处理速率限制时,推荐使用带随机抖动的指数退避:

感知速率限制的 fetch
async function fetchWithBackoff(url, options, maxRetries = 5) {
  for (let attempt = 0; attempt <= maxRetries; attempt++) {
    const response = await fetch(url, options);

    if (response.ok) return response;

    if (response.status === 429) {
      const retryAfter = response.headers.get("Retry-After");
      const waitMs = retryAfter
        ? parseInt(retryAfter, 10) * 1000
        : Math.min(1000 * 2 ** attempt, 30000);
      const jitter = Math.random() * 1000;

      console.warn(
        `Rate limited. Retrying in ${Math.round((waitMs + jitter) / 1000)}s...`
      );
      await new Promise((r) => setTimeout(r, waitMs + jitter));
      continue;
    }

    // Non-retryable error
    throw new Error(`Request failed with status ${response.status}`);
  }

  throw new Error("Max retries exceeded");
}

最佳实践

  • 监控响应头。 主动检查 X-RateLimit-Remaining,在剩余次数降为零之前降低请求速度。
  • 请求排队。 批量发送大量请求时,使用队列将请求均匀分散到整个时间窗口。
  • 加入随机抖动。 退避等待时间始终加入随机抖动,避免多个客户端同步重试。
  • 缓存响应。 使用相同参数重复调用同一端点时,缓存结果以减少不必要的请求。