バイブコーディング実践編 — Claude Code を中心に AIで安全に作る力 / セキュリティとコスト管理
Runaway 対策 — circuit breaker / max iter
読了目安 6 分
学習のねらい
AIエージェントは非常に強力ですが、時に意図しない「暴走 (runaway)」をしてしまうことがあります。これは、エージェントが無限ループに陥ったり、不必要に多くのAPI呼び出しを行ったりすることで、高額な利用料やシステムリソースの枯渇につながるリスクです。
本レッスンでは、このようなエージェントの暴走を防ぐための「Circuit Breaker (サーキットブレーカー)」パターンと、最大反復回数 (max iteration) や最大コストなどの制限を設ける方法について学びましょう。
エージェント暴走の典型例
AIエージェントの暴走は、主に次のような状況で発生しやすくなります。
- 無限ループ: エージェントが特定の条件を満たせず、同じような思考やアクションを繰り返し実行してしまう。
- 例: 「このタスクを完了するまでツールを使い続けろ」という指示に対し、ツールが常にエラーを返し、エージェントが無限にリトライし続ける。
- 不必要なリソース消費: 目標達成のために過剰なツール呼び出しや思考プロセスを繰り返す。
- 例: データベースからデータを取得する際、一度に全件取得すれば良いのに、1件ずつ何度もクエリを発行してしまう。
- 予測不能な外部ツール利用: 外部APIやサービスへの呼び出しが、開発者の想定を超えて繰り返される。
- 例: 外部の画像生成APIを無限に呼び出し、1日で数千ドルの費用が発生してしまう (実際に $1k/day の事例も報告されています)。
これらの暴走は、特に複雑なタスクや曖昧な指示を与えられた場合に発生しやすいため、予防策が不可欠です。
Circuit Breaker (サーキットブレーカー) パターン
Circuit Breaker は、システムが過負荷になったり、エラーが連続したりするのを防ぐための設計パターンです。AIエージェントの文脈では、エージェントの実行が特定のしきい値を超えた場合に、その実行を強制的に停止させる仕組みを指します。
3軸のブレーカー
エージェントの暴走対策として、主に以下の3つの軸でブレーカーを実装することが有効です。
max_iter(最大反復回数): エージェントが実行できる思考・アクションの最大回数を設定します。- 例: 「最大10回までしかツールを呼び出さない」
- これを超えたら、エージェントの実行を強制終了させます。
max_cost(最大コスト): エージェントの実行によって発生する最大コスト (推定トークンコスト) を設定します。- 例: 「このタスクに0.5ドル以上使わない」
- コストトラッカー (前レッスンで実装) と連携し、このしきい値を超えたら停止させます。
timeout(最大実行時間): エージェントが実行できる最大時間を設定します。- 例: 「1つのタスクは最大60秒で完了させる」
- 長時間応答がない場合や、無限ループに陥っている場合に有効です。
これらのブレーカーは、エージェントの実行ロジックの「外側」で監視し、しきい値を超えた場合に例外を発生させることで、エージェントを安全に停止させることができます。
Kill Switch (強制停止スイッチ)
Circuit Breaker は自動的な停止メカニズムですが、それに加えて「Kill Switch (強制停止スイッチ)」を用意することも重要です。これは、運用者が手動でエージェントの実行を停止できる仕組みです。
- 実装方法:
- データベースのフラグ: 「停止フラグ」のようなカラムを用意し、これが
Trueになったらエージェントが次のステップに進むのをやめる。 - 環境変数: 特定の環境変数が設定されたらエージェントを停止する。
- 管理画面: 専用の管理画面からエージェントの実行を停止するボタンを用意する。
- データベースのフラグ: 「停止フラグ」のようなカラムを用意し、これが
緊急時にAIエージェントの動作を即座に止められるようにすることで、予期せぬ被害の拡大を防ぐことができます。
実装のヒント
Circuit Breaker は、エージェントの実行ロジックをラップするデコレータやコンテキストマネージャとして実装すると、再利用しやすくなります。
例えば、@circuit_breaker(max_iter=10, max_cost=0.5, timeout=60) のように、エージェントの実行関数に適用することで、簡単に制限を設けることができます。
まとめ
AIエージェントの暴走は、高額な請求やシステム障害につながる深刻なリスクです。max_iter、max_cost、timeout の3つの軸で Circuit Breaker を実装し、エージェントの実行を安全に制限しましょう。
また、緊急時には運用者が手動で停止できる Kill Switch も用意しておくことで、より堅牢なAIアプリケーションを構築できます。これらの対策は、AIエージェントを実務で安心して利用するための重要な要素です。