Re Reference AI

エージェント

エグゼキューターとは

Executor / 実行系

プランナーが立てた計画に基づき、実際のツール呼び出しや行動を担うエージェントの構成要素

エージェント実行

ひとことで言うと

計画に沿って、実際にツールを使ったり行動したりする係を担うAIの部品。

概要

エグゼキューター(Executor)とは、AIエージェントの構成要素の1つで、プランナーが立てた計画やサブタスクを受け取り、実際のツール呼び出しやAPI実行、コード実行といった具体的な行動を担う部分を指す。 Plan-and-Execute方式のエージェント設計では、プランナーが「何を、どの順番で行うか」を決め、エグゼキューターが「実際にそれをどう実行するか」を担当するという役割分担が取られる。 エグゼキューターはツール呼び出しの結果得られた情報(検索結果やAPIレスポンス等)をプランナーへ返し、次のステップの計画や最終的な応答生成に反映させる橋渡し役も担う。 ツール呼び出しの結果に対するエラーハンドリング(失敗時の再試行や代替手段の選択等)もエグゼキューターの役割になることが多く、エージェント全体の頑健性に直結する部分。

背景

計画の立案と実際の行動実行を1つの処理に混在させると、計画自体の質と個々のツール呼び出しの精度の両方を同時に最適化するのが難しくなる。 エグゼキューターという役割を分離することで各ステップの実行に集中させ、計画全体の一貫性を保ちやすくするために、この構成が採用されるようになった。

アーキテクチャ

エグゼキューターは、プランナーから渡された1つのサブタスクを入力として受け取り、Tool Callingで必要なツールを呼び出し、その実行結果を出力する。 実行結果はプランナーへフィードバックされ、状況に変化があれば残りの計画が更新される。

ワークフロー

プランナーから1つのサブタスクを受け取る → 必要なツールをTool Callingで呼び出す → 実行結果を取得しエラー時は再試行や代替手段を試みる → 結果をプランナーへフィードバックする。

コード例

サブタスクをツール呼び出しで実行するエグゼキューターの骨格

def execute(step: str, tools: dict) -> str:
    """1つのサブタスクをツール呼び出しにより実行する"""
    tool_name, args = parse_tool_call(step)
    try:
        result = tools[tool_name](**args)
    except Exception as e:
        result = retry_or_fallback(tool_name, args, e)
    return result

利点

  • 個々のサブタスクの実行に特化させることで、ツール呼び出しの精度を高めやすい
  • プランナーと役割を分離することで、計画全体と個別の実行それぞれを独立して改善しやすくなる
  • ツール呼び出しに特化させることで、実行結果の検証やリトライ処理を一箇所にまとめて実装できる

欠点

  • プランナーとの連携(サブタスクの受け渡しや結果のフィードバック)の設計が不十分だと、全体の一貫性が崩れやすい
  • 役割を分離する分、単一のLLM呼び出しで完結させる設計より実装が複雑になる
  • ツールの実行に失敗した際のリトライ回数やタイムアウトの設計を誤ると、全体の処理が長時間停滞しうる

比較

  • プランナーエグゼキューターは、プランナーが立てた計画を実際に実行する役割
  • ツールコーリングエグゼキューターは、Tool Callingを通じて実際にツールを呼び出す

関連用語

プランナーツールコーリングAIエージェントオーケストレーター

よくある質問

エグゼキューターは複数存在してもいい?

マルチエージェント構成では、サブタスクの種類ごとに専門化した複数のエグゼキューター役のエージェントを用意し、プランナーがタスクの内容に応じてエグゼキューターへ振り分ける設計も一般的。

エグゼキューターのエラーはどう扱う?

リトライ、代替ツールへの切り替え、あるいはプランナーへエラー内容を返し計画自体を修正させるといった対応が一般的。

参考文献

関連Zenn記事