速率限制
了解 LEAPERone 用量等级、速率限制、请求配额、计费记录和账户时长如何影响生产环境中的 API 吞吐量。
LEAPERone 使用类似 OpenAI 的分级速率限制系统。你的等级决定了每个端点每分钟允许的最大请求数(RPM)。
用量等级
等级由累计消费金额和账户使用时长决定。随着 API 使用量增加,你会自动获得更高等级。
| 等级 | 达标条件 | 对话 RPM | 图像 RPM | 音频 RPM | 视频 RPM |
|---|---|---|---|---|---|
| 0(免费) | 默认等级 | 5 | 2 | 2 | 3 |
| 1(入门) | 累计消费 $5 | 20 | 5 | 5 | 10 |
| 2(标准) | 累计消费 $50 且满 7 天 | 40 | 10 | 10 | 20 |
| 3(专业) | 累计消费 $100 且满 7 天 | 60 | 20 | 10 | 30 |
| 4(商业) | 累计消费 $250 且满 14 天 | 100 | 30 | 20 | 50 |
| 5(企业) | 累计消费 $1000 且满 30 天 | 200 | 60 | 30 | 100 |
“天数”从首次付款开始计算,不是从账户创建日期开始计算。等级会自动升级,且不会降级。
你可以在 Dashboard 中查看当前等级和限制。
自定义 API 密钥限制
你可以为单个 API 密钥设置低于账户等级上限的自定义 RPM。这适合控制不同应用的用量。
前往 API 密钥设置,点击任意密钥的 RPM 标记即可设置。
速率限制响应头
请求触发速率限制时,429 响应会包含以下请求头:
| 请求头 | 说明 |
|---|---|
X-RateLimit-Limit | 当前时间窗口允许的最大请求数。 |
X-RateLimit-Remaining | 当前时间窗口内剩余的请求数。 |
X-RateLimit-Reset | 当前时间窗口重置时的 Unix 时间戳(秒)。 |
Retry-After | 距离可以重试的秒数,仅在 429 响应中出现。 |
处理 429 响应
超过速率限制时,API 会返回 429 状态码:
{
"error": {
"message": "Rate limit exceeded. Please slow down.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}请根据 Retry-After 请求头判断发送下一次请求前需要等待多久。
指数退避
处理速率限制时,推荐使用带随机抖动的指数退避:
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,在剩余次数降为零之前降低请求速度。 - 请求排队。 批量发送大量请求时,使用队列将请求均匀分散到整个时间窗口。
- 加入随机抖动。 退避等待时间始终加入随机抖动,避免多个客户端同步重试。
- 缓存响应。 使用相同参数重复调用同一端点时,缓存结果以减少不必要的请求。