<p><style_prompt>
<meta/>
<title>ReActとCoTの戦略的統合:自律エージェントMASAIのためのプロンプト設計</title>
<author>Prompt Engineering Expert</author>
<date>2024-08-15</date>
<tags>LLM, PromptEngineering, ReAct, CoT, Agent, Gemini</tags>
</style_prompt></p>
<p>本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">自律エージェントMASAIにおけるReActとCoTの戦略的使い分け:複雑なマルチステップタスクを完遂させる最適プロンプト設計</h1>
<h2 class="wp-block-heading">【ユースケース定義と課題】</h2>
<p><strong>タスク概要:</strong> 複雑なリサーチとデータ分析を含むマルチステップタスクにおいて、LLMが外部ツール(Web検索、コード実行API等)を正確かつ効率的に利用し、最終的なレポートを作成すること。</p>
<p><strong>課題:</strong></p>
<ol class="wp-block-list">
<li><p>純粋なCoTでは、ツールの呼び出しタイミングや引数の選択が曖昧になり、幻覚(存在しないAPIの呼び出し)や実行不能な計画が生まれる。</p></li>
<li><p>純粋なReActでは、高度な論理的推論や初期計画が疎かになり、ステップが場当たり的になる。</p></li>
</ol>
<p><strong>入出力の型定義:</strong></p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">要素</th>
<th style="text-align:left;">型</th>
<th style="text-align:left;">定義</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>入力 (User)</strong></td>
<td style="text-align:left;">Plain Text</td>
<td style="text-align:left;">達成すべき目標と提供可能なツールのリスト。</td>
</tr>
<tr>
<td style="text-align:left;"><strong>中間出力 (LLM)</strong></td>
<td style="text-align:left;">Markdown (ReActログ)</td>
<td style="text-align:left;"><code>Thought</code>, <code>Action</code>, <code>Observation</code> の構造化されたログ。</td>
</tr>
<tr>
<td style="text-align:left;"><strong>最終出力 (LLM)</strong></td>
<td style="text-align:left;">Markdown (レポート)</td>
<td style="text-align:left;">最終的な分析結果と結論。</td>
</tr>
</tbody>
</table></figure>
<h2 class="wp-block-heading">【プロンプト設計のループ】</h2>
<p>LLMエージェントの挙動を最適化するには、継続的な評価と改善が不可欠です。</p>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["設計: CoTとReActの統合構造定義"] --> B["実行: マルチステップタスクへの適用"]
B --> C["評価: ツール選択精度と計画完遂率の測定"]
C -->|改善: 失敗パターンに基づき制約を追加| A
</pre></div>
<p><strong>A: 設計(Design)</strong>: 今回は、初期計画(CoT)の精度を確保しつつ、実行フェーズで厳密な制御(ReAct)を行う構造を定義します。
<strong>B: 実行(Execute)</strong>: 複雑なタスクを入力し、ログ(Thought/Action/Observation)を取得します。
<strong>C: 評価(Evaluate)</strong>: ツール利用が適切だったか、計画の途中で破綻しなかったかを評価します。</p>
<h2 class="wp-block-heading">【プロンプトの実装案】</h2>
<p>複雑なタスク処理において、CoT(推論)をReAct(行動)のトリガーとして機能させるプロンプト構造を導入します。これは、ReActの構造(Thought)にCoTの深みを持たせる手法です。</p>
<h3 class="wp-block-heading">初期設計プロンプト(CoT-Informed ReAct)</h3>
<p>このプロンプトでは、タスクを処理する前に「全体計画」をCoTで構築することを強制し、その後、各ステップでReAct構造を厳密に適用させます。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># 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
(全てのステップ完了後、最終的な回答をここに記述)
</pre>
</div>
<h2 class="wp-block-heading">【評価指標と誤り分析】</h2>
<p>最新のLLM(Gemini 1.5 Pro/Flash, GPT-4o)は、長い文脈と複雑な制約の維持に優れていますが、ReAct構造の維持には依然として明確な指示が必要です。</p>
<h3 class="wp-block-heading">失敗パターン(誤り分析)</h3>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">失敗パターン</th>
<th style="text-align:left;">原因</th>
<th style="text-align:left;">CoT/ReActの適用ミス</th>
<th style="text-align:left;">対策プロンプトの方向性</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>様式崩れ</strong></td>
<td style="text-align:left;"><code>Thought</code> や <code>Action</code> タグを無視し、途中で通常のテキストを挿入してしまう。</td>
<td style="text-align:left;">ReActの構造維持の失敗</td>
<td style="text-align:left;">XML/JSON形式での出力強制(Structure出力の活用)</td>
</tr>
<tr>
<td style="text-align:left;"><strong>誤ったツール選択</strong></td>
<td style="text-align:left;">CoTフェーズで立てた計画と、ReActフェーズで選択するActionが乖離する。</td>
<td style="text-align:left;">CoTとActionの結合度の低さ</td>
<td style="text-align:left;"><code>Thought</code> 内で「現在の計画ステップ」を参照することを強制する。</td>
</tr>
<tr>
<td style="text-align:left;"><strong>無限ループ/思考停止</strong></td>
<td style="text-align:left;"><code>Observation</code> が期待通りでない場合に、次の <code>Thought</code> で計画を修正できず、同じActionを繰り返すか、思考が停止する。</td>
<td style="text-align:left;">CoTによる内省(Reflection)の欠如</td>
<td style="text-align:left;"><code>Observation</code> が否定的だった場合、「計画の見直し」を強制する。</td>
</tr>
</tbody>
</table></figure>
<h3 class="wp-block-heading">LLM-as-a-Judge 評価基準</h3>
<p>以下の基準で、エージェントの出力(ログ)を自動評価します。</p>
<figure class="wp-block-table"><table>
<thead>
<tr>
<th style="text-align:left;">評価項目</th>
<th style="text-align:left;">基準(5点満点)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left;"><strong>計画の論理性 (CoT)</strong></td>
<td style="text-align:left;">5点:初期計画が具体的かつタスク達成に必須の要素を全て含んでいる。</td>
</tr>
<tr>
<td style="text-align:left;"><strong>ツール選択の正確性 (Action)</strong></td>
<td style="text-align:left;">5点:計画の各ステップにおいて、選択されたツールが最適かつ引数が正確である。</td>
</tr>
<tr>
<td style="text-align:left;"><strong>ReAct構造の遵守</strong></td>
<td style="text-align:left;">5点:<code>Thought</code>, <code>Action</code>, <code>Observation</code> の順序とタグが途中で一切崩れていない。</td>
</tr>
<tr>
<td style="text-align:left;"><strong>タスク完遂率</strong></td>
<td style="text-align:left;">5点:最終回答がユーザーの要求を完全に満たしている。</td>
</tr>
</tbody>
</table></figure>
<h2 class="wp-block-heading">【改良後の最適プロンプト】</h2>
<p>上記分析に基づき、CoTの計画機能とReActの厳密な実行制御をさらに強固に統合します。特に、内部の推論(Thought)を詳細なCoTとして機能させ、Reflection機能を組み込みます。</p>
<p><strong>Key Improvements:</strong></p>
<ol class="wp-block-list">
<li><p><strong>システムメッセージの強化:</strong> 役割と目標を明確にし、ログ形式の厳守を強調。</p></li>
<li><p><strong>Reflectionの組み込み:</strong> 実行ログの最後に、計画が成功したか否かの内省を強制する。</p></li>
</ol>
<div class="codehilite">
<pre data-enlighter-language="generic"># 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": "このステップがなぜ必要かの論理的根拠"
}
// ... 続くステップ ...
]
}
</pre>
</div>
<h3 class="wp-block-heading">STEP 1: EXECUTION LOG (ReAct)</h3>
<p>初期計画に基づき、以下の厳格な構造に従って実行してください。</p>
<p><execution_log>
Thought: [現在のステップ目標(Initial Planの<code>step_id</code>を参照)を再確認し、目標達成のための具体的な戦略(CoT)を詳細に記述する。なぜこのActionが必要なのか、Actionの引数は何かを具体的に推論すること。]
Action: [ツール名(引数)] または NONE
Observation: [Actionの結果、または次のThoughtに移行するための内部観察]</execution_log></p>
<p>Thought: [Observationの結果を評価(Reflection)し、次のAction(またはNONE)が計画通りか、計画修正が必要かを論理的に判断する。]
Action: [ツール名(引数)] または NONE
Observation: [Actionの結果]
…
</p>
<hr/>
<h2 class="wp-block-heading">ユーザーからのタスク: [ユーザーの具体的なタスクが挿入されます]</h2>
<p>FINAL ANSWER:
[全ての実行が完了し、タスクが達成されたことを確認した後、結論となるレポートを出力してください。]
“`</p>
<h2 class="wp-block-heading">【まとめ】</h2>
<p>自律エージェントにおけるReActとCoTの戦略的統合は、プロンプトエンジニアリングの最重要課題の一つです。実務で高い成果を出すために、以下の3つの鉄則を遵守してください。</p>
<ol class="wp-block-list">
<li><p><strong>CoTは初期計画と内省(Reflection)に特化させる:</strong> CoTを単なる「思考」ではなく、タスク全体のロードマップ策定と、実行結果のフィードバック評価に使うことで、計画の堅牢性を高めます。</p></li>
<li><p><strong>ReAct構造をタグで厳密に制御する:</strong> <code>Thought</code>/<code>Action</code>/<code>Observation</code> のタグ構造を絶対的な制約として課し、LLMが形式を崩さないように監視します。最新のLLMでは、XML/JSONタグを明確にすることで、構造化出力の精度が飛躍的に向上します。</p></li>
<li><p><strong>ツール利用はActionに限定する:</strong> ツール(外部API)の呼び出しは必ず <code>Action:</code> タグ内に閉じ込め、<code>Thought:</code> 内でツール利用について言及することは、あくまで「推論」に留めることで、幻覚による誤ったツール呼び出しを防ぎます。</p></li>
</ol>
ReActとCoTの戦略的統合:自律エージェントMASAIのためのプロンプト設計
Prompt Engineering Expert
2024-08-15
LLM, PromptEngineering, ReAct, CoT, Agent, Gemini
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
自律エージェントMASAIにおけるReActとCoTの戦略的使い分け:複雑なマルチステップタスクを完遂させる最適プロンプト設計
【ユースケース定義と課題】
タスク概要: 複雑なリサーチとデータ分析を含むマルチステップタスクにおいて、LLMが外部ツール(Web検索、コード実行API等)を正確かつ効率的に利用し、最終的なレポートを作成すること。
課題:
純粋なCoTでは、ツールの呼び出しタイミングや引数の選択が曖昧になり、幻覚(存在しないAPIの呼び出し)や実行不能な計画が生まれる。
純粋な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の適用ミス |
対策プロンプトの方向性 |
| 様式崩れ |
Thought や Action タグを無視し、途中で通常のテキストを挿入してしまう。 |
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:
システムメッセージの強化: 役割と目標を明確にし、ログ形式の厳守を強調。
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つの鉄則を遵守してください。
CoTは初期計画と内省(Reflection)に特化させる: CoTを単なる「思考」ではなく、タスク全体のロードマップ策定と、実行結果のフィードバック評価に使うことで、計画の堅牢性を高めます。
ReAct構造をタグで厳密に制御する: Thought/Action/Observation のタグ構造を絶対的な制約として課し、LLMが形式を崩さないように監視します。最新のLLMでは、XML/JSONタグを明確にすることで、構造化出力の精度が飛躍的に向上します。
ツール利用はActionに限定する: ツール(外部API)の呼び出しは必ず Action: タグ内に閉じ込め、Thought: 内でツール利用について言及することは、あくまで「推論」に留めることで、幻覚による誤ったツール呼び出しを防ぎます。
コメント