エージェントループ:AIエージェントが知覚し、思考し、行動する仕組み
エージェントループは、AIエージェントをタスクの開始から最終的な回答まで駆動する、繰り返しの知覚・思考・行動サイクルです。各イテレーションで、エージェントはコンテキスト(観察、ツール結果、メモリ)を読み込み、LLMを呼び出して次のステップを推論し、ツールを実行するか応答を返し、それから繰り返します。イテーション制限、終了条件、エラー処理が本番エージェントが信頼性があるかリスクかを決定します。OpenLegionはメッシュ層でハードキャップを強制し、暴走ループを決定論的な失敗に変換します。
エージェントループとは?
エージェントループは、AIエージェントが環境を交互に観察し、言語モデルを使って次のアクションを推論し、そのアクションを実行する反復実行モデルであり、終了条件(タスク完了、最大イテレーション数、またはバジェット枯渇)が満たされるまで繰り返します。
すべてのAIエージェントは、フレームワークに関係なく、このループの何らかのバリアントを実行します。ループはエージェント実行の単位です:知覚→思考→行動の1回の通過。シンプルなタスク(単一のウェブ検索からの質問に回答する)は2〜3イテレーションで完了します。複雑なタスク(競合他社を調査し、発見を統合し、レポートを作成する)は15〜30イテレーション実行する可能性があります。
ループには各イテレーションで3つの入力と1つの出力があります:
| 入力/出力 | 内容 | イテレーション間で蓄積? |
|---|---|---|
| システムプロンプト | エージェントの役割、指示、ツール定義 | いいえ — 実行ごとに固定 |
| 会話履歴 | すべての以前のターン:ユーザーメッセージ、アシスタントの思考、ツール呼び出し、ツール結果 | はい — 各イテレーションで増加 |
| 現在の観察 | 前のアクションからのツール結果(最初のイテレーション:最初のユーザーメッセージ) | はい — 各イテレーションで追加 |
| 出力 | 次のアクション:ツール呼び出し、明確化要求、または最終応答 | いいえ — イテレーションごとに1つの出力 |
コンテキスト蓄積はループの主要なコストドライバーです。20イテレーションタスクで各イテレーションペアに2,000トークンを使用すると、最後のイテレーションは40,000トークンを入力コンテキストとして送信します。モデルの価格はタスクではなくトークンごとです。エージェントごとの支出キャップでエージェントループコストをコントロールする方法を参照してください。
3つのフェーズの詳細
知覚 — コンテキストを読む
知覚フェーズは、エージェントの現在の世界観を組み立てます:LLMが次に何をすべきかを決定する前に読むすべてのもの。これには、システムプロンプト、会話履歴、および前のイテレーションで取られたアクションの結果(新しい観察)が含まれます。
知覚フェーズはエージェントループの主要なプロンプトインジェクション攻撃面です。外部ソースから引き出されたすべての観察は、LLMが次の思考ステップで処理するテキストとしてコンテキストに入ります。
CVE-2024-5184(Synopsys CyRC、2024年6月)はこれを正確に示しています:ツール応答コンテンツを介して提供されるプロンプトインジェクション攻撃がエージェントの次のループイテレーションを乗っ取り、アクションを攻撃者が制御するエンドポイントにリダイレクトします。インジェクションベクトルと防御の完全な処理については、エージェントループでツール応答をターゲットにするプロンプトインジェクション攻撃を参照してください。
思考 — LLM推論ステップ
思考フェーズはLLM呼び出しです:知覚フェーズから組み立てられたコンテキストがモデルに送信され、次のアクションを生成します。出力は次のいずれかです:
- ツール呼び出し(構造化:ツール名+パラメータ)
- 最終応答(自由テキスト)— エージェントはタスクが完了したと考えます
- 明確化要求(ユーザー宛の自由テキスト)
思考フェーズのカノニカルモデルはReActパターン(Yao et al.、2022、arXiv:2210.03629)です:同じLLM出力内でReasoning+Actingが交互に現れます。ReActペーパーは、明示的な推論とアクションを交互に組み合わせることで、HotpotQA、FEVER、ALFWorldを含むベンチマークでエージェントタスクの精度が大幅に向上することを示しました。
思考ステップのコスト: GPT-4oで$2.50/M入力トークンの場合、1イテレーションあたり2,000トークンが追加される20イテレーションの実行は、最後のイテレーションのコンテキストウィンドウだけで入力トークンで約$1.05かかります。イテレーション数を削減する戦略については、ループが始まる前にエージェントが目標を分解する方法 — AIエージェント計画を参照してください。
行動 — ツール実行または最終応答
行動フェーズは思考フェーズで選択されたアクションを実行します。ツール呼び出しの場合、ツールエグゼキュータは構造化されたツール呼び出しを受信し、適切なツール実装にルーティングし、結果を収集します。ツール実行のセキュリティモデルについては、各ループイテレーション内でエージェントがツールを実行する方法を参照してください。
ループ終了 — エージェントが停止する時
自然終了
自然終了は、LLMの思考ステップがツール呼び出しではなく最終応答を出力したときに発生します。
max_turns強制
max_turns(OpenAI Agents SDK用語)またはrecursion_limit(LangGraph用語)は、ループが実行するイテレーション数の厳格な上限です。
デフォルト値:
- OpenAI Agents SDK:
max_turns = 10(2026年4月) - LangGraph:
recursion_limit = 25 - LangChain AgentExecutor:
max_iterations = 15、デフォルトでは時間制限なし - AutoGen: 会話内のエージェントごとに
max_consecutive_auto_reply = 10
本番のmax_turnsの設定: 100の代表的なタスクでの第95パーセンタイルのイテレーション数を測定し、max_turnsをP95+20%バッファに設定します。すべての打ち切りをログに記録します。
バジェットベースの終了
バジェットベースの終了は、エージェントが設定されたドル金額を消費したときにループを停止します。
OpenLegionの強制モデル:
daily_budget(デフォルト$50/日)とmonthly_budget(デフォルト$200/月)はエージェントごとにINSTRUCTIONS.mdに設定されます- メッシュルーターはエージェントIDごとの累積支出をリアルタイムで追跡します
- ループイテレーションが残りの日次バジェットを超える場合、リクエストはLLMプロバイダーに到達する前にメッシュ層で拒否されます
エラーベースの終了
3つの戦略:エラー時に中止、バックオフで再試行、またはフォールバックして継続。
無限ループのアンチパターン
LangChainの2025年エージェント現状レポートは、エージェント障害の23%が無限ツール呼び出しループによって引き起こされたことを発見しました — 単一最大の障害カテゴリ。
ツール呼び出しストーム
ツール呼び出しストームは、エージェントの思考ステップがタスク完了に向けて進展せずに同じツールを繰り返し呼び出すときに発生します。一般的なトリガー:あいまいなタスク仕様、ツール結果の検証の欠如、円形推論。
コンテキスト中毒
コンテキスト中毒は、ツール結果が後続のイテレーションでLLMの推論を歪めるコンテンツを会話履歴に導入するときに発生します。防止策:ツール結果の前処理 — HTMLの削除、大きなドキュメントを関連セクションに切り詰め、生のコンテンツではなく構造化サマリーを返す。
ツール応答を介したプロンプトインジェクション
最もセキュリティクリティカルな無限ループトリガー:CVE-2024-5184(Synopsys CyRC、2024年6月)。ツール応答にはエージェントの次のイテレーションを新しいサブタスクにリダイレクトする注入された指示が含まれています。防御:すべてのツール結果を信頼できない入力として扱います。
OpenLegionの見解:ループ制御のための多層防御
ループ制御はセキュリティプロパティであり、単なる運用上のものではありません。問題を定義する3つの具体的な数字:
エージェント障害の23%が無限ツール呼び出しループに起因(LangChain 2025)。解決策は高いmax_turn制限ではありません。測定可能な終了条件、明示的な進捗チェック、サーキットブレーカーロジックです。
OpenAI Agents SDKデフォルトmax_turns = 10;LangGraph recursion_limit = 25。 これらは出発点のデフォルト値であり、本番の値ではありません。
CVE-2024-5184はループ制御の脆弱性であり、単なるセキュリティ脆弱性ではありません。 攻撃面はすべての外部ツール呼び出しです。
| ループ制御メカニズム | OpenLegion | LangChain AgentExecutor | LangGraph | OpenAI Agents SDK |
|---|---|---|---|---|
| イテレーション制限 | INSTRUCTIONS.mdのmax_turns、メッシュで強制 | max_iterations=15(デフォルト) | recursion_limit=25 | max_turns=10(デフォルト) |
| バジェットベースの終了 | エージェントごとのdaily_budget+monthly_budget、メッシュ層で強制 | 組み込みなし | 組み込みなし | 組み込みなし |
| エラー終了 | オーケストレーターに返される構造化エラー | AgentExecutorErrorを発生 | GraphRecursionErrorを発生 | MaxTurnsExceededを発生 |
| インジェクション防御 | ボールトプロキシされたツール呼び出し;システムプロンプトの権限 | handle_parsing_errors設定可能 | 組み込みなし | 組み込みなし |
| ループ監査証跡 | agent_id、モデル、ツール呼び出し、コストを含む各イテレーションのログ | LangSmith(オプション) | LangSmith(オプション) | OpenAIダッシュボード |
複数のエージェントループを本番システムに組み合わせるパターンについては、エージェントワークフローが複数のループを本番パイプラインに組み合わせる方法およびループオーケストレーションとエージェント調整のためのエージェントAI設計パターンを参照してください。
よくある質問
エージェントループとは何ですか?
エージェントループは、すべてのAIエージェントがタスクを実行するために実行する繰り返しの知覚・思考・行動サイクルです。各イテレーションで、エージェントは現在のコンテキストを読み込み、言語モデルを呼び出して次のアクションを決定し、そのアクションを実行し、終了条件が満たされるまで繰り返します。
エージェントループは何回のイテレーションを実行しますか?
シンプルなタスクは通常2〜5イテレーションで完了します。複雑なタスクは10〜30イテレーション以上実行します。特定のタスク分布での特定のエージェントの実証的P95イテレーション数に基づいてmax_turnsを設定し、20%のバッファを追加します。
無限エージェントループの原因は何ですか?
無限ループの3つの主要な原因:ツール呼び出しストーム、コンテキスト中毒、ツール応答コンテンツを介したプロンプトインジェクション(CVE-2024-5184)。LangChainの2025年レポートは、エージェント障害の23%が無限ツール呼び出しループによって引き起こされたことを発見しました。
エージェントループにおけるReActパターンとは何ですか?
ReAct(Reasoning + Acting)は、Yao et al.が2022年に導入したカノニカルなエージェントループモデルです(arXiv:2210.03629)。パターンは各ループイテレーションを3部構成のLLM出力として構造化します:思考、アクション、観察。ReActペーパーは、明示的な推論とアクションを交互に組み合わせることがエージェントタスクの精度を向上させることを示しました — HotpotQA、FEVER、ALFWorldで評価。
プロンプトインジェクションはエージェントループにどのように影響しますか?
ツール応答コンテンツを介したプロンプトインジェクション — CVE-2024-5184(Synopsys CyRC、2024年6月)によって示される — はエージェントループの知覚フェーズを悪用します。ツールが外部コンテンツを取得すると、そのコンテンツはツール結果として会話履歴に入ります。コンテンツに注入された指示が含まれている場合、LLMは次の思考ステップでそれらの指示を処理する可能性があります。防御には、ツール結果コンテンツに対するシステムプロンプトの権限を強制する明示的な指示階層が必要です。
OpenLegionはどのように暴走エージェントループを防ぎますか?
OpenLegionは2つの強制層による多層防御を適用します。INSTRUCTIONS.mdに設定されたエージェントごとのイテレーション制限はアプリケーション層で強制されます。エージェントごとのdaily_budgetとmonthly_budgetは各LLM呼び出しの前にメッシュルーター層で強制されます。ループイテレーションが残りのバジェットを超えると、リクエストはネットワーク層で拒否されます。
エージェントループとワークフローの違いは何ですか?
エージェントループはエージェントごとのイテレーションサイクルです。ワークフロー(またはエージェントワークフロー)は、それぞれ独自のループを実行する複数のエージェントが、明示的なハンドオフロジック、オーケストレーション、エージェント間のデータフローを持つより大きなシステムに構成されるマルチエージェントパイプラインです。
OpenLegionを始める
エージェントループはエージェントの信頼性が勝ち負けを決める場所です。フレームワークのデフォルト — max_turns=10、recursion_limit=25 — は出発点であり、本番設定ではありません。
OpenLegionはメッシュ層でバジェットキャップとイテレーション制限を強制します — エージェントのLLM推論とは帯域外で、プロンプトインジェクションでは上書きできません。
OpenLegionで構築を開始する — 厳格なループ制限とエージェントごとのバジェット強制が組み込まれています。
複数のエージェントループを本番システムに組み合わせるパターンについては、エージェントワークフローが複数のループを本番パイプラインに組み合わせる方法を参照してください。