AIエージェントのエラーハンドリングとリトライ設計のベストプラクティス完全版
本番環境のAIエージェントで発生するエラーの種類と対処法を体系的に解説。APIレートリミット・タイムアウト・LLM出力エラーへの対応設計と、安全なリトライ戦略を紹介します。
AIエージェントのエラーを分類する
AIエージェントが本番環境で直面するエラーは大きく4種類に分類できます。第1はインフラエラー(ネットワーク障害・APIダウン・タイムアウト)、第2はLLMエラー(レートリミット・コンテキスト長超過・安全フィルターによる拒否)、第3は出力エラー(期待するフォーマットと異なる出力・不完全な応答)、第4はロジックエラー(ツール呼び出しの失敗・依存関係のエラー)です。
各エラータイプに応じた適切な対処戦略が異なります。インフラエラーはリトライが有効ですが、LLMの安全フィルターによる拒否をリトライしても同じ結果になります。まずエラーの性質を正しく判断してから対処法を選ぶ設計が重要です。
指数バックオフとジッターを使ったリトライ
APIのレートリミットやタイムアウトに対するリトライは「指数バックオフ」が基本です。最初の失敗後は1秒待って再試行、次は2秒、4秒、8秒と倍増させ、最大リトライ回数(例:5回)に達したら諦めてフォールバック処理に移ります。さらにジッター(ランダムな遅延)を加えることで、複数のエージェントが同時にリトライして再度レートリミットを引き起こす「thundering herd問題」を回避できます。
Pythonのtenacityライブラリを使えば、デコレーターで簡潔にリトライロジックを実装できます。@retry(wait=wait_exponential(multiplier=1, min=1, max=60), stop=stop_after_attempt(5))のような記述で指数バックオフが設定できます。
LLM出力エラーへの対応
LLMが期待するJSONフォーマットと異なる出力を返した場合のハンドリングも重要です。まずは出力テキストから正規表現でJSONブロックを抽出する試みをします。それでも失敗する場合は「前回の出力がJSONとして解析できませんでした。以下のスキーマに厳密に従って再出力してください」というエラーメッセージとスキーマをセットにして再送信します。このパターンで大半の出力エラーは解決できます。
3回リトライしても正しい出力が得られない場合は人間確認キューに入れます。この閾値の設計がコストと品質のバランスを決めます。
グレースフルデグラデーションの設計
エラーが発生してもシステム全体を止めない「グレースフルデグラデーション」の設計が本番運用では不可欠です。部分的な失敗が発生した場合に「完全な結果ではなく部分的な結果」を返す設計・キャッシュされた前回の結果を返す設計・デフォルト値で処理を続行する設計など、ユースケースに応じた判断が必要です。全てのエラーを「致命的エラー」として扱わず、重大度に応じた対処を設計しましょう。