トラブルシューティング
レートリミット超過 — 対処法
ToRouter から 429 が返る原因は 3 種類あります。それぞれの見分け方と対処方法。
ToRouter が返す 429 Too Many Requests は 3 つの異なる原因で発生します。エラーボディを見ればどれかが分かります。
3 つの発生源
クライアント側:バックオフ付きリトライ
キー単位のレートリミットに対しては、バックオフしてリトライするのが最も低コストです。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 を リトライしてはいけません — 上限を引き上げるかウィンドウがリセットされるまで状態は固着します。リトライループでは終端エラーとして扱ってください。
恒久的な対処
- キーの RPM/RPH/RPD を引き上げる —
/keysで。アカウント所有者なら最速です。 - 複数キーを使う — ファンアウトの大きいワークロードでクライアント側でロードバランシング。
- チャージする —
INSUFFICIENT_BALANCE(402)の場合。これは 429 ではありませんが関連します。