レート制限は、単にリトライすべきエラーではありません。本番のAIシステムでは、429は短いバーストがトークンバケットを超えたこと、プロジェクトが1分あたりのリクエスト数の上限に達したこと、支出上限に達したこと、またはプロバイダーが容量回復までクライアントに速度を落とすよう求めていることを意味する場合があります。優れたAI APIのレート制限対応は、さらにトークンを消費する前にこれらのケースを区別します。
間違ったパターンは単純です。すべてのワーカーが429を受け取り、同じ固定遅延でスリープし、同時にリトライし、リトライが失敗すると別のモデルにフォールバックします。これは、容量のシグナルを重複した負荷、より高いコスト、一貫性のない出力、そして不十分なインシデントの証拠に変えてしまいます。
AI APIのレート制限対応の目標は、作業を抑制することです。一部のリクエストはバックオフすべきです。一部はキューに入れるべきです。一部は承認されたルートにフォールバックできます。モデル、ツールサポート、データ境界、またはコストを変更することが制御された失敗を返すよりもリスクが高いため、一部はフェイルクローズすべきです。Flatkeyはこの運用モデルに適合します。なぜなら、チームは現在のカタログとリクエストの証拠を検証しながら、モデルアクセス、ルーティング、請求、使用状況分析、および運用管理を1つのゲートウェイサーフェスで維持できるからです。
AI APIのレート制限対応を1つの表で
この表を、本番ポリシー設計の第一歩として使用してください。
| シグナル | 考えられる意味 | バックオフ | キュー | フォールバック | フェイルクローズ |
|---|---|---|---|---|---|
HTTP 429とRetry-After | プロバイダーまたはゲートウェイが待機ヒントを提供 | ヘッダーを尊重し、ワークフローの予算が許せばリトライ | リトライ時間まで非対話型の作業をキューに入れる | 承認されたルートが出力契約を維持できる場合にのみ | リトライ時間がユーザーまたはジョブの期限を超えた場合は停止 |
HTTP 429(Retry-Afterなし) | レートバケット、トークンバケット、プロジェクト階層、または支出ガードに達した | ジッター付きのキャップ付き指数バックオフを使用 | バッチ作業をキューに入れ、同時実行性を減らす | 制限の原因が判明するまで、即時の広範なフォールバックを避ける | 制限が支出、クォータ、またはポリシー関連の場合は停止 |
プロバイダー固有のrate_limit_error | プロバイダーがリクエストが定義された制限を超えたと通知 | プロバイダーのガイダンスの範囲内でのみリトライ | リクエストレート、トークン量、または同時実行性を下げる | 同等の機能と承認を持つモデルにのみフォールバック | フォールバックがコンプライアンス、コスト、または品質クラスを変更する場合は停止 |
プロバイダー固有のRESOURCE_EXHAUSTED | リクエスト、トークン、日次、または支出の制限が枯渇した可能性 | ドキュメントが待機とリトライを指示している場合に短時間リトライ | 再開可能なジョブをキューに移動 | 階層と支出への影響を確認した後にのみ別のルートを使用 | プロジェクトの予算または日次制限が枯渇した場合は停止 |
| 複数のプロバイダーにわたる繰り返しの429 | アプリが作業を過剰に生成している可能性 | まずリトライの嵐を止める | ルート変更の前にキューに入れ、負荷を軽減する | フォールバックは最初のステップではなく、最後のステップ | 所有者がレビューするまで、高リスクのワークフローはフェイルクローズ |
これがAI APIのレート制限対応の核心です。リトライの決定は、シグナルが分類された後に行われるべきで、その前ではありません。
リトライする前にプロバイダーのシグナルを読む
OpenAIの公式エラードキュメントでは、送信が速すぎるリクエストに対してHTTP 429を使用し、枯渇したクォータや請求制限をリクエストのペーシングと区別しています。OpenAIのレート制限ガイダンスでは、ランダムな指数バックオフを推奨しており、失敗したリクエストも1分あたりの制限にカウントされると記されています。攻撃的なリトライ ループは制限を悪化させる可能性があるため、これは重要です。
Anthropicのレート制限ドキュメントでは、1分あたりのリクエスト数、1分あたりの入力トークン数、1分あたりの出力トークン数にわたる制限について説明しています。同じドキュメントには、制限を超えると、待機時間を示すretry-afterヘッダー付きの429が返されると記載されています。Anthropicのエラードキュメントでは、HTTP 429に対するrate_limit_errorとHTTP 529に対するoverloaded_errorも文書化されており、これらはインシデントレポートで異なる扱いをすべきです。
GoogleのGemini APIドキュメントでは、1分あたりのリクエスト数、1分あたりのトークン数、1日あたりのリクエスト数、支出などの次元にわたるレート制限について説明しています。Geminiのトラブルシューティングでは、HTTP 429をRESOURCE_EXHAUSTEDにマッピングし、チームにレート制限の確認、待機とリトライ、リクエストレートまたはサイズの削減、またはレート制限の引き上げをリクエストするよう指示しています。
実用的な結論として、AI APIのレート制限対応には、プロバイダー間で正規化されたエラー形式が必要です。
| 正規化されたフィールド | 値の例 | 重要である理由 |
|---|---|---|
http_status | 429, 503, 529 | クライアントのペーシングとプロバイダーの過負荷を分離する |
provider_error_type | rate_limit_error, RESOURCE_EXHAUSTED, insufficient_quota | リトライが有効である可能性が高いかどうかを示す |
retry_after_ms | ヘッダーから派生した遅延またはnull | プロバイダーが待機時間を示している場合に推測を防ぐ |
limit_dimension | リクエスト、入力トークン、出力トークン、日次リクエスト、支出 | チームに何を削減すべきかを伝える |
workflow_deadline_ms | 残りのユーザーまたはジョブの予算 | バックオフ、キューイング、または停止のいずれを行うかを決定する |
retry_scope | 同じリクエスト、同じルート、承認されたフォールバックルート | 意図しないモデルやプロバイダーの変更を防ぐ |
これらのフィールドを一般的な「プロバイダーエラー」メッセージの背後に隠さないでください。保存されている事実がAIリクエストの失敗のみである場合、チームは同時実行性、予算、フォールバックルール、または支出制御を調整できません。
バックオフ:待機時間が限定的な場合にのみリトライする
バックオフは、リクエストがワークフローの予算内で完了でき、リトライによって表示される出力が重複しない場合に最も安全な対応です。バックオフ層は、次の3つのルールに従う必要があります。
Retry-Afterが存在する場合はそれを尊重する。- すべてのワーカーが同時に起動しないようにジッターを使用する。
- 遅延と合計試行回数の両方に上限を設ける。
HTTPのRetry-Afterフィールドは、HTTP日付または秒単位の遅延のいずれかです。Google Cloudのリトライガイダンスでは、リトライ可能な失敗に対して、ジッター付きの打ち切り指数バックオフを推奨しています。AI APIのレート制限処理では、これらのアイデアをワークフローのデッドラインと組み合わせます。
function retryDelayMs(response: Response, attempt: number, remainingBudgetMs: number) {
const header = response.headers.get("retry-after");
let providerDelayMs: number | null = null;
if (header) {
const seconds = Number(header);
providerDelayMs = Number.isFinite(seconds)
? seconds * 1000
: Math.max(0, Date.parse(header) - Date.now());
}
const exponentialCapMs = Math.min(60_000, 500 * 2 ** attempt);
const jitteredDelayMs = Math.floor(Math.random() * exponentialCapMs);
const delayMs = providerDelayMs ?? jitteredDelayMs;
if (delayMs <= 0 || delayMs > remainingBudgetMs) {
return null;
}
return delayMs;
}このヘルパーは、リトライがワークフローの期間を超えてしまう場合に意図的にnullを返します。ユーザー向けのリクエストでは、これはグレースフルな失敗メッセージを意味する場合があります。バッチワークフローでは、ジョブをキューに入れることを意味する場合があります。財務やコンプライアンスのワークフローでは、所有者のレビューのために停止することを意味する場合があります。
バックオフは、隠れたリトライ層も考慮に入れる必要があります。SDKリトライ、ゲートウェイリトライ、キューリトライ、およびアプリケーションリトライはすべて乗算的に作用します。SDKがすでに429および500レベルのエラーをリトライする場合、アプリケーションはさらにリトライ ループを重ねるのではなく、自身の試行回数を減らすべきです。リトライ専用のコンパニオンチェックリストが必要な場合は、AI APIリトライ戦略に関するFlatkeyのガイドを使用してください。
キュー:作業が待機できる場合に需要を吸収する
リクエストは有効であるものの、現時点では適切でない場合、リトライよりもキューイングの方が優れています。これは、バッチ要約、夜間抽出、評価ジョブ、長いドキュメントのレビュー、および緊急性のない自動化で一般的です。
キューポリシーは「永久に後で試す」であってはなりません。予算が必要です。
| キューフィールド | 本番ルール |
|---|---|
max_queue_age_ms | 作業が古くなったら破棄または再分類する |
retry_after_ready_at | プロバイダーの待機時間が経過する前にジョブを解放しない |
concurrency_key | プロバイダー、モデル、エンドポイントファミリー、顧客、または所有者キーでグループ化する |
token_budget | 大規模なジョブをリトライする前にプロンプトサイズまたはバッチサイズを削減する |
idempotency_key | ワーカーの再起動後に高コストなジョブが重複するのを防ぐ |
owner | コストとインシデントの責任を割り当てる |
キューイングは、サージを制御する場所でもあります。10個のワーカーがすべて同じ429エラーに遭遇した場合、キューは10個の個別のジョブだけでなく、同時実行キー全体を遅くする必要があります。そうしないと、各ワーカーが独立してバックオフし、次の波が同じ間違いを繰り返します。
Flatkeyユーザーにとって、ここはワンキールーティングと使用状況の証拠が運用上役立つ場所です。キューの決定を所有者キー、エンドポイントファミリー、リクエストされたモデル、提供されたモデル、およびコストシグナルに結び付けてください。そうすれば、チームはレート制限が1つの顧客、1つの自動化、1つのモデルクラス、または広範な製品のスパイクに起因するものかどうかを確認できます。
フォールバック:契約が依然として有効な場合にのみルートを変更する
フォールバックは、より強力なリトライではありません。それは何かを変更します:プロバイダー、モデル、ルート、コスト、レイテンシープロファイル、ツールの動作、データ境界、承認ステータス、または出力品質などです。したがって、AI APIのレート制限処理では、明示的なフォールバック契約が必要です。
自動フォールバックを有効にする前に、このチェックリストを使用してください。
| チェック | 必要な質問 |
|---|---|
| 機能 | フォールバックルートは、同じエンドポイントの形状、ツール、ストリーミングモード、構造化出力、およびコンテキスト要件をサポートしていますか? |
| 品質 | このユーザー向けまたは内部ワークフローに対して、フォールバックモデルは承認されていますか? |
| コスト | フォールバックによって、インシデントを引き起こした予算を超えてしまう可能性はありますか? |
| データ境界 | ルートは、必要なプロバイダー、リージョン、ベンダー、および調達承認の制約を維持していますか? |
| 部分的な出力 | ユーザーはすでにトークンやツールの結果を見ていますか? |
| 可観測性 | ログには、リクエストされたモデル、提供されたモデル、フォールバックの理由、および使用単位が表示されますか? |
フォールバックは通常、目に見える出力がコミットされる前は安全ですが、部分的な出力が開始された後はリスクが伴います。サポートチャットでは、ストリーミングされた応答の途中にフォールバックの回答を差し込むよりも、短時間で制御された失敗をクリーンに示すことができる場合が多くあります。ストリーミングが主な障害モードである場合は、このポリシーをストリーミングAI APIの信頼性と組み合わせてください。構造化された抽出ジョブは、多くの場合リトライやキューイングが可能です。一方、調達ワークフローでは、承認されたモデル/ベンダーのリストが利便性よりも重要であるため、フェイルクローズが必要になる場合があります。
より詳細なルート承認マトリックスが必要な場合は、このポリシーをFlatkeyのモデルフォールバック評価に関するガイドと組み合わせてください。
フェイルクローズ:リトライがリスクを生む場合に停止する
フェイルクローズは保守的に聞こえますが、多くの場合、最も安価で信頼性の高いレート制限の結果です。次のような場合は、リトライやフォールバックを行わずに停止します。
- エラーが、クレジットの枯渇、月間予算、1日のリクエストクォータ、または支出ベースの制限を示している場合。
Retry-Afterがユーザーリクエストまたはジョブの締め切りよりも長い場合。- ワークフローがすでに部分的な出力をコミットしている場合。
- フォールバックルートがスキーマ、ツールの可用性、モダリティ、データ境界、または調達承認を変更する場合。
- リクエストが高リスクである場合:財務レビュー、法務レビュー、顧客向け自動化、規制対象データ、または元に戻せないアクション。
- リトライによって、大規模なプロンプト、ツールワークフロー、画像/動画生成、または外部の副作用が重複する場合。
フェイルクローズの処理には、依然としてユーザーとオペレーターのエクスペリエンスが必要です。有用なエラー状態を表示し、制限のソースを記録し、リクエストIDを保持し、どの予算がリクエストを停止させたかを所有者に伝えます。目標は失敗を隠すことではありません。原因を修正するのに十分な証拠を保持しながら、制御不能な作業を停止することです。
実践的なAI APIレート制限処理ポリシー
リトライコードを書く前に、小さなポリシーファイルから始めましょう。正確な数値は本番トラフィックから得るべきですが、構造は最初のインシデントが発生する前に存在している必要があります。
workflow: customer_support_chat
rate_limit:
classify:
fields:
- http_status
- provider_error_type
- retry_after_ms
- limit_dimension
- requested_model
- served_model
- endpoint_family
backoff:
max_attempts_total: 2
respect_retry_after: true
jitter: full
max_delay_ms: 30000
retry_only_before_partial_output: true
queue:
enabled_for:
- batch_summary
- offline_extraction
- evaluation_job
max_queue_age_ms: 900000
concurrency_key:
- owner_key
- endpoint_family
- requested_model
fallback:
allowed_before_first_token: true
require_equivalent_tools: true
require_cost_cap: true
require_data_boundary_match: true
fail_closed_when:
- quota_or_spend_exhausted
- retry_after_exceeds_deadline
- partial_output_committed
- fallback_contract_mismatch
- high_risk_workflowこのテンプレートは、停止条件を可視化します。また、レビュー担当者は、AI APIのレート制限処理が単なるSDKの設定ではなく、製品、信頼性、およびコスト管理のポリシーであることを理解するのに役立ちます。
レート制限インシデントのための可観測性フィールド
レート制限インシデントは、ログが「何が制限されたか」と「アプリケーションが次に何をしたか」に答えられる場合にのみデバッグ可能です。
| フィールド | ログに記録する理由 |
|---|---|
workflow | 制限を製品のサーフェスに接続します |
owner_key、team、またはcustomer_id | コストとキャパシティの所有権を割り当てます |
endpoint_family | チャット、レスポンス、メッセージ、Gemini、画像、動画、その他の形状を分離します |
requested_modelとserved_model | ルーティングまたはフォールバックが動作を変更したかどうかを示します |
http_statusとprovider_error_type | 429のペーシング、クォータ、過負荷、サーバー障害を区別します |
retry_after_ms | クライアントがプロバイダーのガイダンスを尊重したかどうかを証明します |
attempt_numberとtotal_attempts | リトライの増幅を検出します |
queue_age_ms | キューイングがワークフローを保護したか、遅延させたかを示します |
fallback_reason | ルートが変更された理由を説明します |
partial_output_committed | 安全でない重複したユーザー可視の出力を防ぎます |
usage_unitsとestimated_cost | 重複した作業を財務および運用担当者に可視化します |
Flatkeyの現在の公開サイトでは、この製品をモデルアクセス、ルーティング、請求、使用状況分析、運用制御のための単一ゲートウェイとして位置づけています。2026年7月3日の価格設定APIスナップショットでは、success: true、価格設定バージョンa42d372ccf0b5dd13ecf71203521f9d2、45のモデル行、48のベンダー行が返され、openai、anthropic、gemini、image-generation、openai-video、videoなどのエンドポイントファミリーがサポートされていました。これらの事実は、永続的な可用性を主張するものではなく、過去の証拠として扱ってください。本番環境への展開前には、必ず現在のカタログを検証し、ルートテストを実行してください。
ロールアウトチェックリスト
AI APIのレート制限対応を追加または修正する際は、このロールアウトパスを使用してください:
- ワークフローを1つ選び、所有者を指名します。
- プロバイダーのエラーを単一の内部レート制限形式に正規化します。
Retry-Afterを遅延秒数またはHTTP日付として解析します。- 合計試行回数の予算を設定し、上限付きのジッター付きバックオフを設定します。
- 非対話型の作業を、最大経過時間とべき等キーを持つキューに移動します。
- エンドポイントの形状、モデルの能力、コスト、データ境界によってフォールバック契約を定義します。
- フォールバックを有効にする前に、フェイルクローズの条件を定義します。
- 制限の次元、リトライ遅延、キューの経過時間、フォールバックの理由、コストに関するログを追加します。
Retry-Afterの有無、クォータの枯渇、バーストトラフィック、部分的なストリーミング出力、プロバイダーの過負荷など、429エラーをテストします。- 次のワークフローにポリシーを拡大する前に、Flatkeyで使用状況とルーティングの証拠を確認します。
最良のAI APIレート制限対応は、キャパシティの圧力を退屈なものにします。アプリは、待機が安全な場合は待機し、待機できる場合は作業をキューに入れ、契約が有効な場合にのみルートを変更し、継続することで隠れたコストやリスクが生じる場合は停止します。
よくある質問
AI APIのレート制限対応とは何ですか?
AI APIのレート制限対応とは、レート制限のシグナルを分類し、プロバイダーの待機ヒントを尊重し、有界バックオフを適用し、適切な場合に作業をキューに入れ、フォールバックを制御し、リトライがコストやリスクを生む場合に安全に停止するためのポリシーとコードです。
すべての429エラーをリトライすべきですか?
いいえ。リクエストがワークフローの予算内で完了可能で、エラーが一時的なものである可能性が高い場合にのみリトライしてください。クォータ、支出、1日あたりの制限、部分的な出力、契約の不一致などのケースは、通常、キューに入れるかフェイルクローズすべきです。
AIワークロードには指数関数的バックオフで十分ですか?
いいえ。ジッター付きの指数関数的バックオフは有用ですが、AIワークロードには、トークンと支出の認識、キューの予算、フォールバック契約、部分的な出力の保護、リクエストレベルの可観測性も必要です。
レート制限されたAIリクエストは、いつ別のモデルにフォールバックすべきですか?
フォールバック先のルートが、要求されるエンドポイントの形状、品質クラス、ツール動作、データ境界、コスト上限を維持する場合にのみフォールバックすべきです。通常、フォールバックは目に見える出力が始まる前に行われるべきです。
FlatkeyはAI APIのレート制限対応にどのように役立ちますか?
Flatkeyは、接続されたモデルへのアクセス、ルーティング、請求、使用状況分析、運用制御のための単一のゲートウェイサーフェスをチームに提供します。これを使用して、レート制限の決定をモデル、エンドポイントファミリー、所有者キー、ルートの証拠、コストレビューに結びつけます。
まずFlatkeyの価格を確認し、ワークフローを1つ選択し、次にキーを取得して、本番トラフィックを流す前にAI APIのレート制限対応ポリシーをテストしてください。



