自律エージェントMASAIにおけるReActとCoTの戦略的使い分け:複雑なマルチステップタスクを完遂させる最適プロンプト設計

Tech

ReActとCoTの戦略的統合:自律エージェントMASAIのためのプロンプト設計 Prompt Engineering Expert 2024-08-15 LLM, PromptEngineering, ReAct, CoT, Agent, Gemini

本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。

自律エージェントMASAIにおけるReActとCoTの戦略的使い分け:複雑なマルチステップタスクを完遂させる最適プロンプト設計

【ユースケース定義と課題】

タスク概要: 複雑なリサーチとデータ分析を含むマルチステップタスクにおいて、LLMが外部ツール(Web検索、コード実行API等)を正確かつ効率的に利用し、最終的なレポートを作成すること。

課題:

  1. 純粋なCoTでは、ツールの呼び出しタイミングや引数の選択が曖昧になり、幻覚(存在しないAPIの呼び出し)や実行不能な計画が生まれる。

  2. 純粋なReActでは、高度な論理的推論や初期計画が疎かになり、ステップが場当たり的になる。

入出力の型定義:

要素 定義
入力 (User) Plain Text 達成すべき目標と提供可能なツールのリスト。
中間出力 (LLM) Markdown (ReActログ) Thought, Action, Observation の構造化されたログ。
最終出力 (LLM) Markdown (レポート) 最終的な分析結果と結論。

【プロンプト設計のループ】

LLMエージェントの挙動を最適化するには、継続的な評価と改善が不可欠です。

graph TD
A["設計: CoTとReActの統合構造定義"] --> B["実行: マルチステップタスクへの適用"]
B --> C["評価: ツール選択精度と計画完遂率の測定"]
C -->|改善: 失敗パターンに基づき制約を追加| A

A: 設計(Design): 今回は、初期計画(CoT)の精度を確保しつつ、実行フェーズで厳密な制御(ReAct)を行う構造を定義します。 B: 実行(Execute): 複雑なタスクを入力し、ログ(Thought/Action/Observation)を取得します。 C: 評価(Evaluate): ツール利用が適切だったか、計画の途中で破綻しなかったかを評価します。

【プロンプトの実装案】

複雑なタスク処理において、CoT(推論)をReAct(行動)のトリガーとして機能させるプロンプト構造を導入します。これは、ReActの構造(Thought)にCoTの深みを持たせる手法です。

初期設計プロンプト(CoT-Informed ReAct)

このプロンプトでは、タスクを処理する前に「全体計画」をCoTで構築することを強制し、その後、各ステップでReAct構造を厳密に適用させます。

# ROLE

あなたは、利用可能なツールを駆使してユーザーの複雑な質問に回答する、最高水準の自律型エージェントMASAIです。

# TOOLS

あなたは以下のツールを利用可能です。利用しない場合は、Actionは実行しないでください。

1. web_search(query: str): 最新の情報を検索します。

2. code_interpreter(code: str): Pythonコードを実行し、データ分析や計算を行います。

# CONSTRAINTS


1. 最終回答の前に、必ず全体の実行計画を立ててください。

2. 計画の実行フェーズでは、必ず以下のReActログ形式に従い、論理的思考と行動を分離してください。

3. 計画が完了するまで、最終的な回答を出力してはいけません。

---
## STEP 0: 全体計画 (CoTフェーズ)

ユーザーの要求を達成するために必要な全てのステップを、論理的な根拠とともに箇条書きで記述せよ。
<PLANNING_OUTPUT>

1. 最初にWeb検索で最新の市場データを収集する。

2. 収集したデータを基に、重要なトレンドを抽出し分析の方向性を決定する。

3. 必要であれば、code_interpreterで統計処理を行う。

4. 結論を統合し、最終レポートを作成する。
</PLANNING_OUTPUT>
---
## STEP 1: 実行 (ReActフェーズ)

現在のタスクを実行せよ。Actionが必要な場合のみ、Actionタグを出力せよ。

<EXECUTION_LOG>
Thought: 現在の計画ステップは「市場データの収集」である。これにはweb_searchツールの利用が最適である。検索クエリを具体的に定義する。
Action: web_search("2024年 AIスタートアップ投資市場の最新動向")
Observation: [検索結果のJSONが挿入される]

Thought: 検索結果を確認したところ、投資額の急増と特定分野(生成AI)への集中が判明した。次の計画ステップ「トレンドの抽出」に移る。
Action: NONE
Observation: データを精査し、次のステップへの準備が整った。

Thought: ... (次のステップの思考)
...
</EXECUTION_LOG>

## FINAL ANSWER

(全てのステップ完了後、最終的な回答をここに記述)

【評価指標と誤り分析】

最新のLLM(Gemini 1.5 Pro/Flash, GPT-4o)は、長い文脈と複雑な制約の維持に優れていますが、ReAct構造の維持には依然として明確な指示が必要です。

失敗パターン(誤り分析)

失敗パターン 原因 CoT/ReActの適用ミス 対策プロンプトの方向性
様式崩れ ThoughtAction タグを無視し、途中で通常のテキストを挿入してしまう。 ReActの構造維持の失敗 XML/JSON形式での出力強制(Structure出力の活用)
誤ったツール選択 CoTフェーズで立てた計画と、ReActフェーズで選択するActionが乖離する。 CoTとActionの結合度の低さ Thought 内で「現在の計画ステップ」を参照することを強制する。
無限ループ/思考停止 Observation が期待通りでない場合に、次の Thought で計画を修正できず、同じActionを繰り返すか、思考が停止する。 CoTによる内省(Reflection)の欠如 Observation が否定的だった場合、「計画の見直し」を強制する。

LLM-as-a-Judge 評価基準

以下の基準で、エージェントの出力(ログ)を自動評価します。

評価項目 基準(5点満点)
計画の論理性 (CoT) 5点:初期計画が具体的かつタスク達成に必須の要素を全て含んでいる。
ツール選択の正確性 (Action) 5点:計画の各ステップにおいて、選択されたツールが最適かつ引数が正確である。
ReAct構造の遵守 5点:Thought, Action, Observation の順序とタグが途中で一切崩れていない。
タスク完遂率 5点:最終回答がユーザーの要求を完全に満たしている。

【改良後の最適プロンプト】

上記分析に基づき、CoTの計画機能とReActの厳密な実行制御をさらに強固に統合します。特に、内部の推論(Thought)を詳細なCoTとして機能させ、Reflection機能を組み込みます。

Key Improvements:

  1. システムメッセージの強化: 役割と目標を明確にし、ログ形式の厳守を強調。

  2. Reflectionの組み込み: 実行ログの最後に、計画が成功したか否かの内省を強制する。

# SYSTEM PROMPT: HIGH-LEVEL AGENT CONFIGURATION

あなたは、複雑なタスクを分解し、外部ツール(TOOLSセクションを参照)を用いて実行する専門家エージェントです。あなたの唯一のゴールは、タスクを最小のステップで正確に完了させることです。
すべての思考プロセスは、ユーザーにタスクの進捗と論理的な根拠を明確に伝えるために、厳格にReAct形式に従う必要があります。

# TOOLS

[利用可能なツールリストを記述]

# INSTRUCTION: REASONING AND EXECUTION

タスクを開始する前に、以下のJSONスキーマに従い、タスクの実行計画を作成してください。

### STEP 0: INITIAL PLAN (CoT)

```json
{
  "task_name": "[タスク名]",
  "plan_description": "この計画の目的概要",
  "steps": [
    {
      "step_id": 1,
      "objective": "達成目標",
      "required_tools": ["ツール名", "または", "NONE"],
      "justification": "このステップがなぜ必要かの論理的根拠"
    }
    // ... 続くステップ ...
  ]
}

STEP 1: EXECUTION LOG (ReAct)

初期計画に基づき、以下の厳格な構造に従って実行してください。

Thought: [現在のステップ目標(Initial Planのstep_idを参照)を再確認し、目標達成のための具体的な戦略(CoT)を詳細に記述する。なぜこのActionが必要なのか、Actionの引数は何かを具体的に推論すること。] Action: [ツール名(引数)] または NONE Observation: [Actionの結果、または次のThoughtに移行するための内部観察]

Thought: [Observationの結果を評価(Reflection)し、次のAction(またはNONE)が計画通りか、計画修正が必要かを論理的に判断する。] Action: [ツール名(引数)] または NONE Observation: [Actionの結果] …


ユーザーからのタスク: [ユーザーの具体的なタスクが挿入されます]

FINAL ANSWER: [全ての実行が完了し、タスクが達成されたことを確認した後、結論となるレポートを出力してください。] “`

【まとめ】

自律エージェントにおけるReActとCoTの戦略的統合は、プロンプトエンジニアリングの最重要課題の一つです。実務で高い成果を出すために、以下の3つの鉄則を遵守してください。

  1. CoTは初期計画と内省(Reflection)に特化させる: CoTを単なる「思考」ではなく、タスク全体のロードマップ策定と、実行結果のフィードバック評価に使うことで、計画の堅牢性を高めます。

  2. ReAct構造をタグで厳密に制御する: Thought/Action/Observation のタグ構造を絶対的な制約として課し、LLMが形式を崩さないように監視します。最新のLLMでは、XML/JSONタグを明確にすることで、構造化出力の精度が飛躍的に向上します。

  3. ツール利用はActionに限定する: ツール(外部API)の呼び出しは必ず Action: タグ内に閉じ込め、Thought: 内でツール利用について言及することは、あくまで「推論」に留めることで、幻覚による誤ったツール呼び出しを防ぎます。

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

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