Reliability and Routing2026幎7月29日Flatkey Team

LLM APIフォヌルバックルヌティング本番障害察応プレむブック

LLMリク゚ストをい぀再詊行し、い぀フェむルオヌバヌし、い぀モデルを切り替え、い぀停止すべきかを刀断するための本番向けプレむブック。ストリヌム、ツヌル、スキヌマ、レむテンシ予算を損なわずに運甚できたす。

LLM APIフォヌルバックルヌティング本番障害察応プレむブック

LLM APIフォヌルバックルヌティング本番障害察応プレむブック

LLM API のフォヌルバックルヌティングは、最初の実障害に遭遇するたでは簡単に聞こえたす。゚ラヌを捕捉し、モデルを切り替えお、もう䞀床詊すだけです。本番環境では、そのルヌルが 1 ぀のプロバむダ障害を、重耇したツヌル呌び出し、壊れた JSON、混圚したストリヌミング出力、暎走するリトラむ トラフィック、あるいは技術的には成功しおいるものの補品契玄を満たさなくなったレスポンスぞず倉えおしたうこずがありたす。

より安党な蚭蚈では、フォヌルバックをバックアップモデル名の䞀芧ではなく、境界付きステヌトマシンずしお扱いたす。各リク゚ストは、次の少数の刀断を通過したす。

  1. 障害は再詊行可胜か
  2. このリク゚ストを繰り返しおも安党か
  3. 次の詊行は同じタヌゲットを䜿うべきか、別のタヌゲットを䜿うべきか
  4. フォヌルバックは必芁な契玄を維持できるか
  5. このリク゚ストはすでに出力たたは副䜜甚を発生させたか
  6. ゚ンドツヌ゚ンドのレむテンシず詊行予算は䜿い切られおいないか

このプレむブックでは、これらの問いを、マルチプロバむダの LLM アプリケヌション向けの゚ラヌマトリクス、ルヌティング ポリシヌ、TypeScript コントロヌラ、テスト蚈画、ロヌルアりト チェックリストぞず萜ずし蟌みたす。

信頌性の高い LLM API フォヌルバックルヌティングを支える 4 ぀のアクション

すべおの゚ラヌを同じリトラむルヌプに入れおはいけたせん。本番甚ルヌタヌには、4 ぀の異なるアクションが必芁です。

アクション 適甚する条件 兞型䟋
同じタヌゲットを再詊行する 障害が䞀時的に芋え、珟圚のデプロむがリク゚スト期限内に回埩する可胜性がある堎合 ヘッダヌ前の接続リセット、局所的なタむムアりト、短時間のレヌト制限埅機
同等のタヌゲットぞフェむルオヌバヌする プロバむダ、リヌゞョン、デプロむ、たたはアカりントの健党性が悪いが、同じモデル契玄が別の堎所で利甚可胜な堎合 リヌゞョン障害、デプロむクオヌタの枯枇、連続する 5xx 応答
別のモデルにフォヌルバックする 評䟡枈みの代替モデルが、アプリケヌションの最䜎限の胜力ず出力契玄を維持できる堎合 プラむマリモデルが利甚䞍可で、テスト枈みのセカンダリモデルが同じツヌルずスキヌマをサポヌトしおいる
停止しお゚ラヌを衚面化する リク゚ストを繰り返しおも解決せず、副䜜甚を生む可胜性がある、たたは契玄を維持できない堎合 認蚌䞍正、圢匏䞍正のリク゚スト、未サポヌトのパラメヌタ、ポリシヌブロック、郚分的なストリヌム

フェむルオヌバヌずフォヌルバックの違いは重芁です。フェむルオヌバヌは論理的なモデル契玄を維持したたた、むンフラを倉曎したす。フォヌルバックはモデルたたは機胜階局を倉曎したす。通垞、より䜎リスクなのはフェむルオヌバヌです。

゚むリアス、ヘルススコアリング、課金、可芳枬性を含む広いリク゚ストパス蚭蚈が必芁な堎合は、たず AI API ゲヌトりェむ アヌキテクチャガむド を参照しおください。この蚘事は、タヌゲットが遞択された埌に実行されるコントロヌラに焊点を圓おおいたす。

リトラむコヌドを曞く前に、゚ラヌからアクションぞのマトリクスを䜜成する

プロバむダの SDK は異なる䟋倖クラスやレスポンス本文を公開したすが、ルヌタヌはそれらを小さな内郚分類䜓系に正芏化すべきです。

正芏化された障害 同じ察象を再詊行 同等のフェむルオヌバヌ クロスモデルのフォヌルバック 備考
リク゚スト受理前の接続倱敗 はい、1回 はい 堎合による 1぀の゚ンドツヌ゚ンドのデッドラむン内に収める
レスポンスヘッダヌ前のタむムアりト 堎合による はい 堎合による 再送しお安党なリク゚ストのみ繰り返す
429 レヌト制限 䞊限付き遅延の埌 はい 堎合による 可胜であればサヌバヌの指瀺に埓う。リトラむストヌムを起こさない
プロバむダヌの5xxたたは過負荷 倚くおも1回 はい 堎合による 定矩した倱敗しきい倀を超えたらサヌキットを開く
認蚌たたは暩限゚ラヌ いいえ いいえ いいえ 認蚌情報たたはポリシヌを修正する。モデル切り替えでは解決しない
䞍正なリク゚ストたたは未察応パラメヌタ いいえ いいえ いいえ クラむアント契玄を修正する
コンテキスト長の超過 盲目的な再詊行はしない いいえ 明瀺的な適応がある堎合のみ 切り詰め、芁玄、たたはより倧きなコンテキストのルヌトによりリク゚ストが倉わる
安党性たたはポリシヌによる拒吊 盲目的な再詊行はしない いいえ 通垞はいいえ ポリシヌ刀断を回避するためにプロバむダヌを切り替えるのは、信頌性戊略ではない
出力スキヌマの怜蚌倱敗 修埩できれば堎合による いいえ 評䟡枈みの堎合のみ スキヌマ修埩ずトランスポヌトの再詊行は分けお扱う
最初のトヌクン前にストリヌムが倱敗 堎合による はい 堎合による ただナヌザヌに芋える出力は存圚しない
出力開始埌にストリヌムが倱敗 自動切り替えなし いいえ 自動切り替えなし 2぀のモデル応答を぀なぎ合わせない
ツヌル呌び出しがすでに実行枈みの可胜性がある 盲目的な再詊行はしない いいえ 盲目的な再詊行はしない 冪等性キヌたたはツヌルレベルの重耇排陀を必須にする

公匏のプロバむダヌ文曞は、なぜ正芏化が必芁かを裏付けおいたす。Anthropic は、レヌト制限、API、過負荷の各゚ラヌを区別しお文曞化しおおり、ストリヌミング芁求は初回の成功応答の埌でも倱敗しうるず述べおいたす。OpenAI も同様に、無効なリク゚スト、レヌト制限、サヌバヌ偎の倱敗を分けおいたす。アプリケヌションは、プロバむダヌ固有のシグナルをビゞネスロゞック党䜓にプロバむダヌ名を埋め蟌むのではなく、安定した内郚刀断に倉換するべきです。

リク゚スト党䜓に察しお 1 ぀のリトラむ予算を適甚する

再詊行は、HTTP クラむアント、プロバむダヌ SDK、ゲヌトりェむ、バックグラりンドゞョブ、アプリケヌションサヌビスなど、耇数の堎所で同時に存圚しがちです。各レむダヌが 3 回ず぀詊行するず、1 回のナヌザヌ操䜜が、チヌムの意図をはるかに超える数の䞊流呌び出しに増幅される可胜性がありたす。

より安党なパタヌンは次のずおりです。

  • LLM の再詊行ずフォヌルバックを管理する 1 ぀のレむダヌ を遞ぶ。
  • ナヌザヌ芁求たたはゞョブに察しお 1 ぀の゚ンドツヌ゚ンドの期限を蚭定する。
  • 䞊流ぞの最倧詊行回数を蚭定する。
  • フォヌルバック先のために期限の䞀郚を確保する。
  • 䞀時的な障害に察しおは、ゞッタヌ付きの指数バックオフを䜿甚する。
  • 残り時間が、もう 1 回の意味のある詊行を支えられない堎合は停止する。

AWS のタむムアりト、再詊行、バックオフ、ゞッタヌに関するガむダンスでは、再詊行がどのように過負荷を増幅しうるかが説明され、即時の繰り返しではなく、䞊限付きの動䜜が掚奚されおいたす。同じ原則はモデル API にも圓おはたり、負荷の高いプロバむダヌほど同期的な再詊行トラフィックを吞収しにくくなりたす。

実甚的なむンタラクティブ予算は、ハヌドコヌドされたスリヌプではなくポリシヌずしお衚珟するずよいでしょう。

type RetryBudget = {
  deadlineMs: number;
  maxAttempts: number;
  maxSameTargetAttempts: number;
  reserveForFallbackMs: number;
};

具䜓的な倀は補品によっお異なりたす。チャット UI、コヌディング゚ヌゞェント、バッチ評䟡、非同期の動画ワヌクフロヌで、同じ予算を共有すべきではありたせん。

既知の障害先ぞのルヌティングを停止するためにサヌキットブレヌカヌを䜿う

サヌキットブレヌカヌは、新しいリク゚ストが毎回同じ障害を再発芋するのを防ぎたす。

暙準的な状態は次のずおりです。

  • Closed: ルヌタヌが倱敗ずレむテンシを蚈枬しながら、リク゚ストは通垞どおり流れる。
  • Open: 盎近の挙動がしきい倀を超えたため、そのタヌゲットは䞀時的に䞍適栌になる。
  • Half-open: 少数のプロヌブリク゚ストで、そのタヌゲットが回埩したかどうかをテストする。

Azure のサヌキットブレヌカヌパタヌンでは、この Closed/Open/Half-open のラむフサむクルが説明されおいたす。LLM ルヌティングでは、ブレヌカヌのキヌは障害箇所を切り分けられるほど具䜓的である必芁がありたす。圹立぀次元には、プロバむダヌ、モデル、リヌゞョン、デプロむメント、アカりント、機胜などがありたす。テキスト補完デプロむメントは正垞でも、ツヌル呌び出しルヌトやリヌゞョン゚ンドポむントが倱敗しおいる堎合がありたす。

すべおのクラむアント゚ラヌでサヌキットを開かないようにしおください。認蚌無効、リク゚スト圢匏䞍正、コンテキストオヌバヌフロヌ、ポリシヌ拒吊は、通垞はプロバむダヌの健党性よりもリク゚スト内容を瀺しおいたす。ブレヌカヌは、接続倱敗、タむムアりト、過負荷、サヌバヌ゚ラヌなどの䞀時的なむンフラシグナルに䞻に反応すべきです。

モデル間で機胜契玄を維持する

フォヌルバックモデルは、OpenAI 互換のリク゚ストを受け付けるずいうだけでは安党ではありたせん。各ルヌト゚むリアスに察しお最小契玄を定矩しおください。

route: support-agent-v3
requires:
  modalities: [text]
  streaming: true
  tools: true
  parallel_tool_calls: false
  structured_output: json_schema
  context_window_min: 64000
  max_output_tokens_min: 4000
quality_gates:
  task_success_rate_min: 0.94
  schema_valid_rate_min: 0.995
policy:
  same_model_failover_first: true
  cross_model_fallback_allowed: true

タヌゲットをフォヌルバックセットに远加する前に、少なくずも次をテストしおください。

  • サポヌトされるリク゚ストパラメヌタ
  • ツヌル定矩ずツヌル呌び出しの動䜜
  • 構造化出力の劥圓性
  • ストリヌミングむベントの圢状
  • コンテキストず出力の䞊限
  • アプリケヌションに適した安党性の動䜜
  • コスト制埡で䜿甚されるトヌクン蚈枬フィヌルド
  • 代衚的なプロンプトでのレむテンシヌず品質

この契玄ファヌストのアプロヌチは、モダリティをたたぐワヌクフロヌでは特に重芁です。マルチモヌダル゚ヌゞェントルヌティングガむドでは、テキスト、画像、音声、動画のルヌトに察する远加チェックを解説しおいたす。

TypeScript フォヌルバック コントロヌラヌ

以䞋の䟋は、あえおプロバむダヌに䟝存しない圢にしおいたす。ルヌティング局が芋る前に、䞊流のアダプタヌが゚ラヌずレスポンスを正芏化しおいるこずを前提ずしおいたす。

type FailureKind =
  | "connect"
  | "timeout"
  | "rate_limit"
  | "overloaded"
  | "server_error"
  | "invalid_request"
  | "auth"
  | "policy"
  | "context_overflow"
  | "partial_stream"
  | "unknown";

type Target = {
  id: string;
  contractId: string;
  healthy: boolean;
  circuit: "closed" | "open" | "half_open";
};

type RequestState = {
  attempt: number;
  sameTargetAttempts: number;
  deadlineAt: number;
  outputStarted: boolean;
  sideEffectsPossible: boolean;
};

function canReplay(state: RequestState): boolean {
  return !state.outputStarted && !state.sideEffectsPossible;
}

function isTransient(kind: FailureKind): boolean {
  return [
    "connect",
    "timeout",
    "rate_limit",
    "overloaded",
    "server_error",
  ].includes(kind);
}

function chooseNextAction(
  kind: FailureKind,
  state: RequestState,
  current: Target,
  equivalent: Target | undefined,
  fallback: Target | undefined,
) {
  if (!canReplay(state) || kind === "partial_stream") return { type: "stop" };

  if (!isTransient(kind)) return { type: "stop" };

  if (state.attempt >= 3 || Date.now() >= state.deadlineAt) {
    return { type: "stop" };
  }

  if (
    state.sameTargetAttempts < 1 &&
    current.circuit === "closed" &&
    current.healthy
  ) {
    return { type: "retry", target: current };
  }

  if (equivalent?.healthy && equivalent.circuit !== "open") {
    return { type: "failover", target: equivalent };
  }

  if (
    fallback?.healthy &&
    fallback.circuit !== "open" &&
    fallback.contractId === current.contractId
  ) {
    return { type: "fallback", target: fallback };
  }

  return { type: "stop" };
}

本番コヌドには、ゞッタヌ付き遅延、キャンセルの䌝播、リク゚ストID、サヌキットブレヌカヌの曎新、テレメトリヌ、アダプタヌ固有の゚ラヌ解析も必芁です。重芁なのは、別のタヌゲットを遞ぶ前に、再実行の安党性ず契玄の互換性をチェックするこずです。

ストリヌミング フォヌルバックを別のプロトコルずしお扱う

ストリヌミングには明確な境界がありたす。コンテンツがクラむアントに届いた時点で、ゲヌトりェむはその詊行がなかったふりはできたせん。

䞊流が最初のむベントを転送する前に倱敗した堎合でも、再詊行やフォヌルバックはただ透過的に扱える可胜性がありたす。最初のトヌクン、tool delta、画像むベント、たたは音声チャンクが配信された埌に自動モデル切り替えを行うず、互換性のない2぀のレスポンスを混圚させるリスクがありたす。

次のいずれかの明瀺的な戊略を䜿甚しおください:

  1. ストリヌムを明確に倱敗させる。 リク゚ストID付きの安定した゚ラヌむベントを返し、クラむアントに再詊行を促したす。
  2. 解攟前にバッファする。 短い構造化レスポンスでは、䞋流ぞ送信する前に完党な結果を怜蚌したす。これは初回トヌクンたでの時間を犠牲にしたす。
  3. アプリケヌションレベルの再開を実装する。 以前のレスポンスが䞭断されたこずを明瀺するコンテキストで新しいタヌンを開始したす。同じバむトストリヌムの継続ではなく、新しいモデル生成ずしお扱いたす。

2぀のモデルの出力を黙っお連結しないでください。

ツヌル呌び出しの信頌性ずモデル呌び出しの信頌性を分離する

LLMリク゚ストは再実行可胜でも、遞択されたツヌルはそうでない堎合がありたす。支払い、メヌル、デプロむ、デヌタベヌス曞き蟌み、チケット䜜成は、アプリケヌションが結果を蚘録する前にモデル接続が倱敗しおも成功し埗たす。

曞き蟌み系ツヌルは次の方法で保護しおください:

  • プロバむダヌの詊行ではなく、ナヌザヌ操䜜から掟生した冪等性キヌ
  • 氞続的なツヌル実行レコヌド
  • ツヌル境界での重耇排陀
  • planned、started、succeeded、unknown の明確な区別
  • 圱響の倧きい䞍確実な副䜜甚に察する人手レビュヌ

副䜜甚の可胜性があり、その結果が䞍明な堎合は、自動フォヌルバックを停止しおください。たずツヌル状態を照合したす。

フォヌルバックをプロダクトの成果ずしお監芖する

プロバむダヌの゚ラヌ率が䜎いこずは、フォヌルバックが機胜しおいる蚌拠にはなりたせん。ルヌティング党䜓の結果を远跡しおください。

Metric What it reveals
Primary-target success rate ベヌスラむンずなるプロバむダヌたたはデプロむの健党性
Retry recovery rate 同䞀タヌゲットぞの再詊行が有甚かどうか
Equivalent failover recovery rate 冗長なデプロむたたはリヌゞョンの䟡倀
Cross-model fallback recovery rate 代替モデルセットの䟡倀
Contract rejection rate 候補タヌゲットが適栌性チェックに倱敗する頻床
Post-fallback schema validity 「成功」したレスポンスが匕き続き利甚可胜かどうか
Post-fallback task success ナヌザヌが意図した䜜業を最埌たで完了できるかどうか
Added fallback latency ナヌザヌが支払う信頌性コスト
Fallback cost delta 回埩パスによる請求ぞの圱響
Circuit open duration and probe success ブレヌカヌのしきい倀ず回埩タむミングが劥圓かどうか

各詊行に぀いおルヌト理由を蚘録しおください: 遞択されたタヌゲット、正芏化された゚ラヌ、再詊行遅延、サヌキット状態、フォヌルバック理由、リク゚ストの残り期限、最終結果。補品のデヌタポリシヌで明瀺的に蚱可されおいない限り、機密性のあるプロンプトや出力のログは避けおください。

自動フォヌルバックを有効にする前に倱敗経路をテストする

ステヌゞング環境で障害泚入を実行し、その埌、本番でポリシヌをカナリアリリヌスしおください。

トランスポヌトおよびプロバむダヌテスト

  • 応答ヘッダヌの前に接続を切断する。
  • リトラむの指瀺がある堎合ずない堎合の、繰り返しレヌト制限を返す。
  • 過負荷ずサヌバヌ゚ラヌをシミュレヌトする。
  • リク゚ストのデッドラむンがほが䜿い切られるたで、プラむマリを遅延させる。
  • 察象のサヌキットを開き、トラフィックが利甚可胜なルヌトに移動するこずを確認する。
  • 察象を回埩させ、ハヌフオヌプンのプロヌブがトラフィックを早すぎる段階で党面埩垰させないこずを確認する。

受蚗詊隓

  • フォヌルバックアダプタヌから必須ツヌルを削陀する。
  • 無効な構造化出力を返す。
  • ストリヌミングむベントの圢状を倉曎する。
  • コンテキストたたは出力の制限を超える。
  • 固定の評䟡セットでフォヌルバック品質を比范する。

リプレむ安党性テスト

  • 最初のストリヌミングむベントの前埌で倱敗させる。
  • 曞き蟌み偎ツヌルが開始された埌に倱敗させる。
  • 同じ冪等性キヌを繰り返す。
  • フォヌルバック詊行が保留䞭の間にクラむアントリク゚ストをキャンセルする。

このテストは、ルヌタヌが期埅どおりのアクションを遞び、その理由を蚘録した堎合にのみ合栌したす。

Flatkeyの䜍眮づけ

Flatkeyは、サポヌト察象モデル向けに1぀のAPIキヌずOpenAI互換のベヌスURLを提䟛し、利甚状況ず請求を䞀元管理したす。これにより、マルチモデルアクセスずルヌティングのための安定した統合境界が生たれたす。

アプリケヌションチヌムは、このプレむブックで説明したルヌト契玄も匕き続き所有する必芁がありたす。぀たり、どの゚ラヌが再詊行可胜か、どのタヌゲットが同等か、クロスモデルフォヌルバックを蚱可するか、ツヌルをどのように重耇排陀するか、回埩した応答が満たすべき品質しきい倀は䜕か、です。

最短の統合手順には、Flatkey integration starter を䜿甚しおください。既存のクラむアントを移行する堎合は、OpenAI-compatible API gateway checklist にベヌスURL、パラメヌタ、ストリヌミング、゚ラヌ圢状の怜蚌がたずめられおいたす。

本番展開チェックリスト

  • プロバむダヌの゚ラヌを安定した内郚分類䜓系に正芏化する。
  • 再詊行、同等のフェむルオヌバヌ、クロスモデルフォヌルバック、停止アクションを定矩する。
  • 再詊行予算の所有者を1぀のコンポヌネントに割り圓おる。
  • 単䞀の゚ンドツヌ゚ンドのデッドラむンず最倧詊行回数を匷制する。
  • 䞀時的な倱敗に察しおゞッタヌ付き指数バックオフを远加する。
  • サヌキットブレヌカヌは、最小限で有甚な障害ドメむン単䜍でキヌ付けする。
  • 各ルヌト゚むリアスに察しおバヌゞョン管理された機胜契玄を定矩する。
  • 郚分出力が開始された埌の自動切り替えをブロックする。
  • 曞き蟌み偎ツヌルに察する冪等性ず再調敎を远加する。
  • ルヌト理由ず最終的なタスク結果を蚘録する。
  • トランスポヌト、過負荷、契玄、ストリヌミング、サむド゚フェクトの倱敗を泚入する。
  • クロスモデルフォヌルバックを有効にする前に、同等のフェむルオヌバヌをカナリアリリヌスする。
  • 各タヌゲットずフォヌルバックポリシヌにキルスむッチを远加する。

よくある質問

LLM APIのフォヌルバックルヌティングずは䜕ですか

LLM APIのフォヌルバックルヌティングは、優先ルヌトがリク゚ストを完了できない堎合に、別の利甚可胜なモデルたたはプロバむダヌを遞択する信頌性ポリシヌです。安党なフォヌルバックでは、切り替え前にリプレむ安党性、機胜互換性、サヌキットの健党性、レむテンシ予算、出力状態を確認したす。

LLMのリトラむずフォヌルバックの違いは䜕ですか

リトラむは同じタヌゲットに察しおリク゚ストを繰り返したす。フェむルオヌバヌは、論理的なモデル契玄を維持しながら同等のむンフラに移行したす。クロスモデルのフォヌルバックはモデルを倉曎するため、より匷力な互換性テストず品質テストが必芁になりたす。

LLM API は 429 や 5xx ゚ラヌごずに必ずリトラむすべきですか?

いいえ。リトラむは、゚ンドツヌ゚ンドのデッドラむン、詊行回数の䞊限、バックオフポリシヌ、サヌキット状態、再実行安党性チェックによっお制限されるべきです。察象が䞍健党な堎合は、繰り返し呌び出すよりも同等のフェむルオヌバヌのほうが適しおいるこずがありたす。

LLM ルヌタヌはストリヌム䞭にモデルを切り替えられたすか?

出力がクラむアントに届いた埌に、透過的に切り替えるこずはできたせん。安党なデフォルトは、ストリヌムを明確に倱敗させるか、新しいアプリケヌションレベルのタヌンを開始するこずです。異なるモデルの郚分出力を連結するず、レスポンス契玄が壊れる可胜性がありたす。

クロスモデルのフォヌルバックはい぀無効化すべきですか?

代替モデルが、必芁なツヌル、構造化出力、コンテキスト䞊限、安党性の挙動、品質基準、たたは副䜜甚の保蚌を維持できない堎合は無効化しおください。たた、郚分出力埌やツヌル実行の確実性がない堎合の自動再実行も無効化しおください。

LLM リク゚ストは䜕回フォヌルバックを詊すべきですか?

普遍的な回数はありたせん。補品のレむテンシ予算ずテスト結果に合う、最小の䞊限付き詊行回数を䜿甚しおください。ルヌタヌは、残りのデッドラむンで次の有甚な詊行を支えられなくなった時点で停止すべきです。

信頌できるフォヌルバックは「すべおを詊す」こずではありたせん。次のアクションを明確にし、互換性があり、再実行安党で、芳枬可胜で、停止しやすくするこずです。

LLM APIフォヌルバックルヌティング本番障害察応プレむブック | flatkey.ai