失敗のフォールバックは「脱出ハッチ」ではなく、ワークフローの通常のパスです
多くの開発者は、MCP (モデル コンテキスト プロトコル) ワークフローでの障害フォールバックを最後の保険と考えていますが、実際の開発では落とし穴に遭遇することがよくあります。最も一般的な誤解の 1 つは、メイン プロセスが完全にクラッシュした場合にのみフォールバックがトリガーされるということです。実際の状況では、フォールバックはエラー スタックがオーバーフローするのを待って受動的に引き継ぐのではなく、不確実な中間状態を積極的に管理する必要があります。
例: マルチステップのエージェント ワークフロー。最初のステップは天気 API を正常に呼び出すこと、2 番目のステップは気象データに基づいて推奨リストを生成すること、3 番目のステップは MCP ツールを介してデータベースに書き込むことです。 2 番目のステップの LLM 呼び出しがタイムアウトした場合 (たとえば、コンテキスト ウィンドウがいっぱいになった場合)、従来のエラー処理では直接例外がスローされ、ワークフロー全体が再起動されます。しかし、合理的な失敗フォールバックでは、「2 番目のステップは失敗したが、最初のステップの結果はまだ有効である」ことを識別でき、その後、簡略化されたプロンプトワードを使用して 2 番目のステップを再試行するか、ローカルルールエンジンにジャンプして最初のステップの結果に基づいて推奨事項を生成できる必要があります。これは、グローバルな再試行よりも桁違いに高速です。
これは、フォールバックは単一の動作ではなく、状態を認識した意思決定ツリーであるという核心原則につながります。
セットアップ チェックリスト: 7 つの主要なアクション
次のチェックリストは、一般的な MCP エージェントのワークフローに対応しています。それぞれのアクションには、「なぜそれが重要なのか」と「最も間違いが起こりやすいこと」が伴います。
1. MCP ツール呼び出しごとに明確な失敗信号を定義します
- タイムアウト、HTTP エラー、空の戻り、フォーマット例外 - 各信号は異なるフォールバック戦略にマッピングされる必要があります。
- 間違いを犯しやすい: すべての間違いを「3 回やり直して諦めた」にまとめます。たとえば、
nullの戻り値は、「サービスが利用できない」ではなく、「クエリの結果がありません」を意味する場合があります。
2. 「操作履歴」をコンテキストで渡す
- 完了したステップ、中間結果、および現在の再試行回数を、MCP 呼び出しごとに渡される直列化可能な履歴オブジェクトに書き込みます。
- 間違いやすい: メモリ変数を使用して履歴を保存すると、分散コンポーネントが状態を共有できなくなります。 Redis またはデータベース永続性を使用する必要があります。
3. 各ステップに独立したタイムアウトと劣化パスを設定する
- 例: ステップ A (MCP ツールの呼び出し)
- 間違いやすい: ワークフロー全体でタイムアウトを共有します。一歩が遅いと状況全体が引きずられてしまいます。
4.べき等性保証の実装
- フォールバックが成功したステップを再試行する場合、重複が発生することはありません。たとえば、データベースの書き込みでは、挿入ではなく更新/挿入を使用する必要があります。
- 間違いやすい: MCP ツールは本来冪等であると考えてください。実際、多くのサードパーティ API の「作成」操作は冪等ではありません。
5. フォールバック トリガーの優先順位とミューテックス ロックを設定する
- 複数のステップが同時に失敗した場合、最も依存性の高いステップが最初に処理される必要があります。ミューテックス ロックを使用して、2 つのフォールバックが同じリソースを同時に変更するのを防ぎます。
- 間違いやすい: 2 つのフォールバック パスを同時に開始し、どちらもデータベースをロールバックしようとするため、デッドロックが発生します。
6. 事前定義された「安全な終了ステータス」
- すべてのフォールバックが失敗した場合、ワークフローは既知の終了状態 (
abortedやpartial_completed_with_warningなど) に入り、どのステップが成功し、どのステップがスキップされたかを記録する必要があります。 - 間違いを犯しやすい: ワークフローが未定義の状態になると、その後の手動検査でどのデータが信頼できるかを判断することができなくなります。
7. ヘルスチェックエンドポイントを使用してフォールバックの有効性を確認する
- Agent を起動するたびに、単体テストのように模擬障害処理が実行され、フォールバックが正しく起動できるかどうかが確認されます。
- 間違いやすい: フォールバックはオンラインで問題が発生した場合にのみ有効であると考えており、テスト環境で実践されたことがありません。

実際の失敗シナリオ
ECエージェントは、①商品を検索→②ユーザーの嗜好を取得→③おすすめコピーを生成→④プッシュ通知を行う必要があります。ステップ②はリアルタイムのユーザー ポートレート API に依存しており、場合によっては 503 を返します。当初、ステップ 2 が失敗すると、開発者はステップ 4 を直接スキップし、コンテキストなしで通知をプッシュしました。ユーザーは製品の推奨なしで「あなたが好きかもしれません」というメッセージを受け取り、コンバージョン率は即座に 40% 低下します。
根本原因: フォールバック パスは、「API が利用できない」と「ユーザー プロファイル データが見つからない」を区別しません。修正後、ステップ ② が失敗した場合、フォールバックはキャッシュされた履歴データを (最新でなくても) 使用し、ステップ ③ はパーソナライズされたコピーを生成できます。違いは次のとおりです。キャッシュされたデータは十分に正確ではない可能性がありますが、ランダムなプッシュよりは優れています。

陥りやすい 3 つの落とし穴
-
フォールバック パスが複雑すぎる。 5 ステップのワークフロー。各ステップには 3 つのフォールバックが装備されており、最終フォールバックは 15 の組み合わせでネストされます。保守コストが大幅に上昇し、パスの競合が発生しやすくなります。推奨事項: 各ステップには最大 2 つのフォールバック (1 回の再試行、1 回のダウングレード) を含めることができ、制限を超えるフォールバックは直接終了されます。
-
ログ記録と可観測性を無視します。フォールバックが発生した後は、ログが不完全であるため、開発者はトリガー条件を再現できません。各フォールバック トリガーのコンテキスト、履歴状態、および最終決定を文書化する必要があります。
-
フォールバックは単なるコードの問題であると考えてください。多くのチームはフォールバック ロジックのみを作成し、ドキュメントやアラートを更新しません。オンライン フォールバックは頻繁にトリガーされますが、そのしきい値が妥当かどうかは誰にもわかりません。フォールバック率は、パフォーマンス監視と同様に定期的に追跡する必要があります。
フォールバック: チェックリスト自体が失敗した場合
上記のリストに従って設定した後でも、フォールバックでワークフローを通常の状態に復元できない場合 (たとえば、メインの MCP ツールが完全に麻痺しているサービス)、より高いレベルのアーキテクチャ レベルのバックアップ ソリューションが必要です。
- MCP プロバイダーの切り替え: 別の API プロバイダーを使用するために、MCP ツール エンドポイントの 2 番目のセットをプロビジョニングします (例: OpenAI から Anthropic に切り替えます)。 2 つのツール セットの戻りスキーマが一貫していることを確認する必要があります。
- 手動承認キュー: すべての自動フォールバックが使い果たされると、失敗したタスクがキューに書き込まれ、運用および保守担当者は Webhook を通じて手動で処理するように通知されます。
- ワークフロー バージョンのフォールバック: ワークフローの現在のバージョンのフォールバック率がしきい値 (20% など) を超えた場合、以前の安定したバージョンのワークフロー定義に自動的に切り替えます。
これらのオプションは毎日のチェックリストには含まれていませんが、最初の導入時に計画する必要があります。
次のステップ
MCP 障害フォールバック ワークフローの実装原則とよくある誤解を理解したので、エージェント ワークフローの全体的な設計を体系的に学ぶことができます。以下で推奨されるリソースとコースは、「作業」から「信頼性の高い生産」への進化に役立ちます。

コメントはまだありません