故障排查
被限流:如何处理
ToRouter 的 429 有三种来源,识别清楚再针对性修复。
ToRouter 返回 429 Too Many Requests 时,可能来自三个不同的来源。错误体会告诉你是哪一种。
三种来源
客户端:退避重试
Key 级限流最便宜的处理方式是退避重试。OpenAI / Anthropic 官方 SDK 通过 max_retries 自动做;裸 HTTP 请自行实现指数退避:
import time, random
from openai import OpenAI, RateLimitError
client = OpenAI(api_key="sk-***", base_url="https://portal.torouter.ai/v1")
def call_with_retry(**kwargs):
for attempt in range(6):
try:
return client.chat.completions.create(**kwargs)
except RateLimitError:
time.sleep((2 ** attempt) + random.random())
raiseasync function callWithRetry(fn) {
for (let attempt = 0; attempt < 6; attempt++) {
try {
return await fn();
} catch (err) {
if (err.status !== 429) throw err;
await new Promise(r => setTimeout(r, (2 ** attempt) * 1000 + Math.random() * 1000));
}
}
throw new Error('rate-limited after 6 retries');
}API_KEY_QUOTA_EXHAUSTED 和 USAGE_LIMIT_EXCEEDED 不要重试 —— 在配额提高或窗口滚动前会持续返回。重试循环里要识别为终态错误。
永久解法
- 提高 Key 的 RPM/RPH/RPD:在
/keys调整,最快。 - 多 Key 分流:高扇出场景在客户端做负载均衡。
- 充值:碰到
INSUFFICIENT_BALANCE(402)就充值,相关但不是 429。