中核となるループ
あらゆるAIエージェントは、フレームワークや複雑さにかかわらず、同じ基本パターンで動きます。エージェントは環境を観察し(ツール結果、ユーザーメッセージ、システム状態を読み取って)、次に何をすべきかを思考し(その情報を言語モデルで処理して)、行動します(ツールを呼び出し、出力を生成し、追加情報を要求して)。そして、自分の行動の結果を観察するためにループの先頭に戻ります。
このループは、タスクが完了したと判断するか、進展できないと判断するか、人間の入力が必要だと判断するまで続きます。このパターンの優美さは、その一般性にあります。同じループが、シンプルなファイル検索も複雑な調査プロジェクトも駆動できるのです。シンプルなエージェントと複雑なエージェントで変わるのはループそのものではなく、思考ステップの洗練度です。
観察フェーズ
観察は、エージェントが情報を集める段階です。最初の反復では、観察はたいていユーザーのリクエストです。後続の反復では、観察には過去のツール呼び出しの結果、エラーメッセージ、先行ステップ中に明らかになった新情報などが含まれます。
観察の質は判断の質に直接影響します。ツール結果を丁寧に処理し、それを過去の文脈と統合するエージェントは、最新の結果だけしか考慮しないエージェントよりも良い選択をします。コンテキスト管理がエージェント設計の重要な側面である理由はここにあります。エージェントは、無関係な情報に圧倒されることなく、情報に基づいた判断ができる程度の文脈を必要とします。
MCPサーバーは観察において中心的な役割を果たします。エージェントがデータベースMCPサーバーでデータを問い合わせたり、ファイルシステムサーバーでコードを読んだりするとき、それらのツール結果がエージェントの観察となります。観察が豊かで関連性が高いほど、エージェントは次のステップを良く考えられます。
思考フェーズ
思考は言語モデルが本領を発揮するところです。現在のコンテキスト(元のタスク、すべての過去の観察、指示や制約)を踏まえて、モデルは次に何をするかを判断します。別のツールを呼ぶべきか? どのツールか? どんなパラメータで? それともタスクは完了したか?
この意思決定プロセスこそ、エージェントがチャットボットと最も異なるところです。チャットボットは応答を生成して止まります。エージェントはプラン(たとえそれが次の単一ステップだけのプランであっても)を生成して実行します。思考フェーズでは多段推論が起こり、エージェントは別のアプローチを検討し、突き進むか方向転換するかを決めます。
モデルの推論能力こそ、エージェントの能力のボトルネックです。複雑なタスクを確実にステップへと分解し、起こり得る結果を予期し、ミスから立ち直れるモデルは、効果的なエージェントを生み出します。曖昧さに混乱したり進捗を見失ったりするモデルは、フラストレーションの溜まるエージェントを生みます。
行動フェーズ
行動は、エージェントが世界と関わる段階です。MCPやfunction callingを通じてツールを呼び、応答を生成し、人間の入力を要求します。それぞれの行動はエージェント環境の状態を変え、次の反復のための新しい観察を生み出します。
行動はシンプル(ファイルを読む)にも複雑(多段APIワークフローを実行する)にもなり得ます。エージェントは行動がどう実装されているかを知る必要はありません。何をしたいかを指定すれば、ツールが実行を扱います。この抽象化が、エージェントをツール非依存にしています。同じエージェントループが、ツールがMCPサーバーであれREST APIであれローカル関数であれ、機能するのです。
エラーハンドリングと回復
エージェントループにおいて最も重要な側面の一つは、失敗をどう扱うかです。ツール呼び出しが失敗したり、予期せぬ結果を返したり、タイムアウトしたりしたとき、エージェントは進め方を判断する必要があります。同じ行動を再試行すべきか? 別のアプローチを試すか? ユーザーに助けを求めるか?
よく設計されたエージェントは、思考フェーズを使ってエラーについて推論します。盲目的に再試行する代わりに、なぜエラーが起きたのか、別のアプローチで成功するかもしれないかを考えます。データベースクエリが結果を返さなかったとき、エージェントは検索条件を広げるかもしれません。ファイルが見つからなかったとき、別のファイル名を探すかもしれません。
このエラー回復能力こそ、エージェントパターンの硬直したスクリプトに対する主要な利点の一つです。エラーに遭遇したスクリプトはたいてい失敗するか、あらかじめ定義されたフォールバックを辿るだけです。エージェントは文脈の中でエラーについて推論し、特定の状況に合った回復戦略を選べます。
ループを止めるべきとき
いつ止めるかを知ることは、何をするかを知ることと同じくらい重要です。延々とループするエージェントは資源とお金を浪費します。早すぎる段階で止まるエージェントは不完全な結果を出します。
良い停止条件には、タスクが完了した(エージェントが要求された出力を生み出した)、エージェントが行き詰まった(複数のアプローチを試したが進捗がない)、エージェントが取得できない情報を必要としている(必要な資格情報、人間の判断、アクセス権のないシステム)などがあります。明示的な停止条件は、エージェントが無駄に空回りすることを防ぎ、コスト管理に役立ちます。