レート制限
Shisa サービスは、プラットフォームをすべての人にとって高速かつ公平に保つために、レート制限とクォータを適用します。本ガイドでは、制限に達したときに何が起こるか、そしてそれを適切に処理する方法を説明します。
制限とクォータ
リクエストには 2 種類のスロットリングが適用されます。
- レート制限は、特定の時間枠内で送信できるリクエスト数(およびスループット)に上限を設けます。
- クォータは利用可能な残高です — 新規アカウントは $10 分の無料クレジットから始まり、プレミアムプランでは有料残高とより高い制限が追加されます。
アカウントに適用される正確な制限はプランによって異なります。現在の制限と使用状況は Shisa プラットフォーム で確認してください。より高い制限が必要な場合は、プランをアップグレードするか、プラットフォームから営業にお問い合わせください。
レート制限は、https://api.shisa.ai ホストを共有するすべてのサービスにわたって、アカウントごとに適用されます。LLM、ASR、TTS、翻訳のトラフィックが同時にバースト的に発生すると、同じアカウントレベルの予算を消費します。
制限を超えたとき
レート制限を超えると、API は HTTP ステータス 429(rate limit exceeded)で応答します。429 を処理する正しい方法は、リクエストをすぐに再送信するのではなく、待ってからリトライすることです。すぐに再送信すると負荷を増やすだけです。
指数バックオフを使用してください。短い遅延を待ち、その後リトライのたびに遅延を 2 倍にし、最大試行回数まで繰り返します。少しランダムなジッターを加えることで、多くのクライアントが足並みをそろえてリトライするのを避けられます。
Python
import time
import random
import requests
def post_with_backoff(url, headers, json, max_retries=5):
delay = 1.0 # seconds
for attempt in range(max_retries):
response = requests.post(url, headers=headers, json=json)
if response.status_code != 429:
return response
# Rate limited — back off before retrying
sleep_for = delay + random.uniform(0, 0.5)
time.sleep(sleep_for)
delay *= 2
raise RuntimeError("Rate limit not cleared after retries")
JavaScript
async function postWithBackoff(url, options, maxRetries = 5) {
let delay = 1000; // milliseconds
for (let attempt = 0; attempt < maxRetries; attempt++) {
const response = await fetch(url, { ...options, method: 'POST' });
if (response.status !== 429) {
return response;
}
// Rate limited — back off before retrying
const jitter = Math.random() * 500;
await new Promise((resolve) => setTimeout(resolve, delay + jitter));
delay *= 2;
}
throw new Error('Rate limit not cleared after retries');
}
バックオフをクライアントに一度組み込み、すべての Shisa 呼び出しで再利用してください。Shisa LLM で OpenAI SDK を使用している場合、それらはすでに 429 レスポンスをバックオフ付きで自動的にリトライします。
制限に達する頻度を減らす
- 多数の小さなリクエストをタイトなループで送信する代わりに、可能な限りバッチ処理してください。
- リクエスト間で変化しないレスポンスをキャッシュしてください。
- バックグラウンドジョブをずらして、すべてが同じ瞬間に発火しないようにしてください。
- プラットフォーム で使用状況を監視し、ローンチの最中ではなく、その前により高い制限をリクエストしてください。