ホーム / ドキュメント / レート制限

レート制限

スロットリングの仕組み、このサービスで429が意味すること、それを発生させないクライアントの実装方法。

制限は、共有の上流処理能力を公平に利用するためのものです。キー単位ではなくアカウント単位で適用されるため、キーを追加しても上限は増えません。

制限の対象

比較項目動作
同時リクエスト数アカウントごとの処理中のリクエスト数。429の一般的な原因です。
毎分のリクエスト数継続的な呼び出しレート。
毎分のトークン数入力と出力を合わせたスループット。

無制限プランでは、クレジット残高の代わりにフェアユース制限が適用されます。トークン単位の課金はなくなりますが、同時実行数の上限はなくなりません。

429への適切な対処

  1. ジッターを加えた指数バックオフを使用してください。待機時間を1秒、2秒、4秒、8秒と増やし、それぞれにランダムな割合の増減を加えます。
  2. すべてのリクエストを一斉に送信して拒否されたものを再試行するのではなく、セマフォでクライアント側の同時実行数を制限してください。
  3. バッチ処理は並列度を最大にするのではなく、キューに入れてください。スループットを制限するのは、開くソケットの数ではなく、毎分のトークン数です。
  4. 次のものを 529 とは異なる方法で対処してください: 429 。これはユーザー側ではなく上流の処理能力の問題であり、通常は数秒以内に解消します。
import asyncio

sem = asyncio.Semaphore(8)      class=class="s">"c"># ceiling on concurrency, tune to your plan

async def ask(client, body):
    async with sem:
        return await client.post(class="s">"/v1/messages", json=body)
Claude Codeなどのエージェント型ツールは、設計上、多数の処理を積極的に並列実行します。エージェントを集中的に使用しているときに429が発生する場合は、プランをアップグレードする前に、ツールの並列度を下げてください。

再試行ではなく負荷を軽減