トラブルシューティング

AIエージェントが無限ループする時の対処法と予防策

Media Lab

AIエージェントが無限ループする時の対処法と予防策

AIエージェントが同じ行動を繰り返す「無限ループ」は、APIコストを爆発させ、タスクが永遠に完了しない深刻な問題です。本記事では、無限ループの原因と具体的な対処法・予防策を解説します。

無限ループが発生するパターン

パターン1:ツール呼び出しの繰り返し

エージェントが同じツールを同じパラメータで繰り返し呼び出すパターンです。「ウェブ検索を実行→結果を確認→同じ検索を再実行」というサイクルが止まらなくなります。

原因:ツールの実行結果を適切に処理できていない、または「タスクが完了した」という判定条件が不明確。

パターン2:目標未達成の繰り返し試行

エージェントがタスクを達成できないまま、別のアプローチを試み続けるパターンです。どこで諦めるべきかの判断ができないために無限に試みます。

パターン3:エラー処理のループ

エラーが発生すると→エラーをリトライする→同じエラーが発生→リトライの無限ループです。

即効対処法1:最大ステップ数の設定

最も確実な予防策は「最大ステップ数(Max iterations)」の設定です。

LangChainでの実装:

from langchain.agents import AgentExecutor

agent_executor = AgentExecutor(
    agent=agent,
    tools=tools,
    max_iterations=20,  # 最大20ステップで強制終了
    max_execution_time=120,  # 120秒でタイムアウト
    handle_parsing_errors=True
)

OpenAI Agents SDKでの実装:

result = await Runner.run(
    agent,
    max_turns=25  # 最大ターン数を設定
)

即効対処法2:タイムアウトの設定

処理時間によるタイムアウトも有効な保護策です。

import asyncio

async def run_with_timeout(agent, task, timeout=60):
    try:
        result = await asyncio.wait_for(
            agent.run(task),
            timeout=timeout
        )
        return result
    except asyncio.TimeoutError:
        return {"error": "タイムアウト: 処理が制限時間内に完了しませんでした"}

AIエージェントのコスト超過防止方法でも解説していますが、タイムアウト設定はコスト保護の観点でも重要です。

即効対処法3:ループ検出アルゴリズム

同じツール呼び出しの繰り返しを検出して強制停止する仕組みを実装します。

class LoopDetector:
    def __init__(self, max_repeat=3):
        self.history = []
        self.max_repeat = max_repeat
    
    def check(self, tool_name, params):
        entry = f"{tool_name}:{str(params)}"
        self.history.append(entry)
        
        # 最近max_repeat回の呼び出しが同じなら警告
        recent = self.history[-self.max_repeat:]
        if len(set(recent)) == 1 and len(recent) == self.max_repeat:
            raise RuntimeError(f"ループ検出: {tool_name}{self.max_repeat}回連続で同じパラメータで呼ばれています")

プロンプトによる予防策

ループを防ぐためのプロンプト設計も重要です。

「重要なルール:

  1. 同じツールを同じパラメータで2回以上呼び出さないでください
  2. ツールが期待する結果を返さない場合は、違うアプローチを試みてください
  3. 5回の試行でタスクが完了しない場合は、「完了不可能」として理由を報告してください
  4. 作業完了の明確な基準を持ち、その基準を満たしたら作業を終了してください」

AIエージェントのデバッグのコツと組み合わせて、ループの発生パターンをログから学習することも有効です。

ループ発生時の緊急対処

本番環境でループが発生した場合の対処手順:

  1. 実行中のエージェントプロセスを即座に停止(Ctrl+C or SIGTERM)
  2. 直近のログを確認してどのステップでループが始まったか特定
  3. ループを引き起こしたタスク・プロンプトを分析
  4. 最大ステップ数・タイムアウトが設定されていない場合は即座に設定
  5. プロンプトを修正してから再実行

コスト被害の最小化

APIの多額請求を防ぐために、プロバイダーコンソールでの月次使用量上限設定が最後の防衛線です。OpenAIはソフトリミット(通知)とハードリミット(API停止)の両方を設定できます。

まとめ

無限ループ対策の基本は「最大ステップ数・タイムアウト・ループ検出」の3つを必ず実装することです。AIエージェントのエラートラブルシューティングと合わせて、本番環境へのデプロイ前にこれらの安全機構が正しく動作することを必ず確認してください。