Plan-and-Executeとは

Plan-and-Executeとは何か

Plan-and-Execute は、その名の通り「最初に計画(Plan)を立ててから、計画の各ステップを順に実行(Execute)し、必要に応じて計画を見直す」というエージェントパターンです。LangGraph の公式チュートリアルでは、この方式は Plan-and-Solve 論文や Baby-AGI から強く着想を得たと明記されており、まずマルチステップのプランを作り、その後ステップを一つずつ進め、達成度に応じてプランを更新する流れが核になります。LangChain AI

チュートリアルでは、計算グラフ(computational graph)の観点で 「計画ノード → 実行ノード →(必要なら)再計画」 を循環させる構造として提示されています。これにより、タスク全体をいきなり解こうとするのではなく、細分化→実行→検証→調整の反復で進められるため、長いタスクや依存関係があるタスクでも破綻しにくい設計になります。LangChain AI

LangGraph はこの “計画→実行” のループをグラフとして明示化できる点が特徴で、ワークフロー(固定の経路)とエージェント(実行時に経路を自律選択)の設計思想を行き来しながら組み立てられます。すなわち、計画の生成と見直しはエージェント的に、実行はワークフロー的に扱う、といったハイブリッド運用がしやすい作りです。LangChain AI

また、LangChain/LangGraph の解説記事でも、Plan-and-Execute は既存のエージェント設計(例:逐次的にツールを呼ぶだけの方式)に比べ、速さ・コスト・品質の面で有利になり得ると整理されています。計画が先にあることで、無駄なツール呼び出しを減らし、並列化や再計画を取り入れやすいためです。LangChain Blog

まとめると:Plan-and-Execute は「まず計画、その後に順次実行、必要なら再計画」というシンプルな骨格を、LangGraphのグラフ表現で落とし込むパターンです。長めの指示や複数手順が絡む社内タスクでも、見通しの良い設計・段階的な検証・柔軟なやり直しを両立できます。

2. Plan-and-Executeの基本アイデア

Plan-and-Execute の核心は、タスクを 「まず計画(Plan)に落とし込み、その計画に従って実行(Execute)する」 という明確な役割分担にあります。これにより、従来の逐次的エージェント(例:ReAct)の弱点だった「その場しのぎの推論」や「冗長なツール呼び出し」を回避できます。


2.1 Planner(計画フェーズ)

  • 役割:タスクを受け取り、必要なサブタスクに分解し、全体の計画を立てる。
  • 出力:自然言語または構造化された「To-Doリスト」。
  • :「“東京の今日の天気を調べて、要約してレポートを書け”」というタスクなら…
    • 「1. 天気APIから東京の天気を取得」
    • 「2. 情報を要約する」
    • 「3. レポート文にまとめる」
  • 特徴:最初に全体像を持つため、長いタスクでも見通しを失わない。

2.2 Executor(実行フェーズ)

  • 役割:Plannerが作成したサブタスクを順番に処理する。
  • 行動:ツール呼び出し、外部API、計算関数などを使ってサブタスクを完了させる。
  • 特徴:1ステップずつ進めるため、実行中に結果を確認・評価できる。

2.3 再計画(Replanning)

  • 実行中に「情報が足りない」「間違った方向に進んでいる」ことが判明したら、ExecutorはPlannerに戻って計画を修正できる。
  • この「Plan ↔ Execute」のサイクルにより、柔軟性と堅牢性が両立される。

2.4 LangGraphにおける実装イメージ

LangGraphでは、この流れを**状態遷移グラフ(StateGraph)**として定義します:

  • ノード:Planner / Executor
  • エッジ:Planner → ExecutorExecutor → Planner(再計画時)Executor → END(タスク完了)
  • グラフを描くことで「計画生成 → 実行 → 必要に応じて再計画」というループが明示化され、コードで再利用しやすくなる。

2.5 ポイント

  • 分業:Plannerは「考える」、Executorは「動く」
  • 効率:計画が先にあるので無駄なアクションを減らせる
  • 柔軟性:途中で誤りに気づいても再計画できる
  • 実装性:LangGraphのグラフ構造にマッピングしやすく、企業内ワークフローに組み込みやすい

3. アルゴリズムの流れ

Plan-and-Execute の処理は、Planner → Executor → (必要なら再計画) のサイクルで進みます。
ここではサンプルタスク 「東京の天気を調べて、それを要約してレポートを作成せよ」 を例に説明します。


ステップ1:Planner(計画立案)

  1. ユーザー入力を受け取る
    • 「東京の天気を調べて、それを要約してレポートを作成せよ」
  2. Plannerがタスクを分解し、サブタスク(Plan)を生成
    • Plan:
      1. 天気APIから東京の天気を取得
      2. 結果を自然言語で要約
      3. 簡潔なレポート文を作成

Plannerはあくまで「計画書」を出すだけで、この時点ではツールを呼びません。


ステップ2:Executor(計画の実行)

ExecutorはPlannerの出したサブタスクを順に処理します。

  • サブタスク1の実行
    • Action: get_weather("Tokyo")
    • Observation: {"temp": 22, "condition": "Sunny"}
  • サブタスク2の実行
    • Action: LLMで要約生成
    • Observation: 「東京は晴れ、気温は22℃」
  • サブタスク3の実行
    • Action: LLMでレポート文を作成
    • Output: 「本日の東京は晴れで、気温は22℃です。快適な気候が続いています。」

ステップ3:再計画(必要な場合)

もしExecutorが実行中にエラーや不足を検出した場合、Plannerに戻ります。

例:

  • APIが失敗 → Plannerに戻って「代替APIを試す」タスクを追加
  • 情報が不足 → Plannerに戻って「追加の検索タスク」を計画

ポイント

  • Planner:全体の地図を作る
  • Executor:一歩ずつ地図に従って進む
  • 再計画:問題があれば戻って修正する
  • 最終出力:計画を消化し終えたら答えを返す

4. 実装例

coming soon..

5. 利点と課題

5.1 利点

  1. 長期タスクに強い
    • まず全体の計画を立てるため、ゴールに至るまでの道筋が明確になる。
    • ReAct のように「その場で思いついたアクション」を繰り返すよりも、迷走しにくい。
  2. 無駄なツール呼び出しを削減
    • 必要なサブタスクを整理してから実行するので、不要なAPIコールや検索が減り、効率が良い。
    • 特に社内環境でコストやレイテンシが気になる場合に有効。
  3. 再計画による柔軟性
    • 実行中に問題が発生しても Planner に戻れるため、堅牢性が高い。
    • 失敗時に計画を更新できる点は、単純な「ワークフロー」よりも優れている。
  4. 透明性と解釈可能性
    • Plannerが出す計画は人間にも理解可能なTo-Doリスト形式になりやすく、レビューや監査がしやすい。
    • 社内で「AIがどう判断したか」を説明する場面で有利。

5.2 課題

  1. Plannerの品質に依存
    • 最初の計画が不完全だと、その後の実行も誤った方向に進む。
    • 特に複雑なタスクでは「粒度の荒い計画」や「過剰に細かい計画」が精度低下の原因になる。
  2. 実行速度のトレードオフ
    • 計画フェーズがある分、単純な一発タスク(例:計算や翻訳)ではオーバーヘッドになる。
    • 短時間で済む処理には不向き。
  3. 再計画の制御が難しい
    • どのタイミングで再計画すべきかを決める基準はまだ研究途上。
    • 再計画が多すぎると、結局ReActのように冗長化するリスクがある。
  4. 評価の難しさ
    • 「良い計画」と「悪い計画」を定量的にどう評価するかは未解決。
    • ベンチマーク化が難しく、導入時にはタスクごとにチューニングが必要。

コメント

タイトルとURLをコピーしました