暴走の典型パターン
- 終了条件を満たさず無限ループ
- ツール呼び出しが ping-pong(A → B → A → B …)
- リトライポリシーの誤設定で 1 リクエストが数百回再試行
- subagent が再帰的に subagent を起動
防御層の設計
- モデル単位: max_tokens、stop sequence、temperature を厳密に設定
- エージェント単位: ターン数上限、ツール呼び出し回数上限
- ジョブ単位: 1 ジョブの累計トークン上限、累計コスト上限
- テナント単位: 1 日 / 1 月の累計コスト上限(hard limit)
- 組織単位: 月予算の 80% 到達でアラート、100% でブロック
ループ検出
```ts function detectLoop(history: ToolCall[]): boolean { const last5 = history.slice(-5).map(c => c.signature); const unique = new Set(last5); return last5.length === 5 && unique.size <= 2; } ```
直近 5 ツール呼び出しのうちユニーク数が 2 以下なら ping-pong 警報。検知後は強制終了 + 人介入。
LiteLLM Proxy での予算制御
```yaml general_settings: master_key: sk-... max_budget: 1000 # USD / month for the whole proxy budget_duration: 30d
team_budgets: - team_id: marketing max_budget: 100 - team_id: research max_budget: 500 ```
ルート段で予算超過リクエストを拒否できるため、誤った社内アプリの暴走でも全体の月予算は守れる。
ヒト介入トリガ
- 1 ジョブで 100k トークン超 → Slack 通知
- センシティブツール呼び出し → Slack approve
- 月予算 70% 到達 → 経理にレポート
観測ダッシュボード
- 1 日のトークン消費(モデル別、テナント別)
- ジョブあたり平均トークン
- ループ検出発火数
- ガードレール発火数
まとめ
エージェントのコスト統制は「層を重ねる」ことが鉄則。社内 R&D で過去に 1 日 30 万円の事故を起こしてから、上記 5 層を必ず実装するようにしている。事前予防は事後対応より圧倒的に安い。