<p><!-- METADATA: {"style": "prompt_engineering_expert", "version": "1.0"} -->
本記事は<strong>Geminiの出力をプロンプト工学で整理した業務ドラフト(未検証)</strong>です。</p>
<h1 class="wp-block-heading">複雑な論理推論を制御する:Tree of ThoughtsとSelf-Refineを融合したLLM出力最適化プロンプト</h1>
<h2 class="wp-block-heading">【ユースケース定義と課題】</h2>
<p>多角的な仮説検証と自己修正を要する複雑な意思決定において、LLMの論理崩壊を防ぎ一貫した推論出力を得ること。</p>
<ul class="wp-block-list">
<li><p><strong>入力の型</strong>:解決したい課題(テキスト)、制約条件(Markdownリスト)</p></li>
<li><p><strong>出力の型</strong>:思考プロセス(Markdownによる木構造表現)、自己修正ログ(JSON形式)、最終結論(Markdown)</p></li>
</ul>
<hr/>
<h2 class="wp-block-heading">【プロンプト設計のループ】</h2>
<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">
graph TD
A["設計: 思考ツリーと自己修正のルール定義"] --> B["実行: LLMによる複数ルートの思考展開"]
B --> C["評価: 評価基準に照らした妥当性検証"]
C -->|改善: 自己修正指示(Self-Refine)の実行| A
</pre></div>
<h3 class="wp-block-heading">1. 設計(Design)</h3>
<p>LLMに単一の思考ルートをたどらせるのではなく、複数の分岐(Tree of Thoughts)を生成させ、それぞれの妥当性を判定するシステムプロンプトを設計します。また、エラーや矛盾を検知した際に自ら軌道修正を行うSelf-Refineのフィードバックループを定義します。</p>
<h3 class="wp-block-heading">2. 実行(Execution)</h3>
<p>最新のLLM(Gemini 1.5 ProやGPT-4oなど)が持つ広大なコンテキストウィンドウを活かし、思考の分岐点(ノード)ごとに「仮説の創出」「評価」「採択/棄却」を実行させます。</p>
<h3 class="wp-block-heading">3. 評価(Evaluation)</h3>
<p>出力された結論および思考プロセスが、あらかじめ設定した品質基準に合致しているかを判定します。矛盾が発生している場合は、どの推論フェーズでエラーが起きたかをトレースし、プロンプトの記述(メタ指示やFew-shot)にフィードバックします。</p>
<hr/>
<h2 class="wp-block-heading">【プロンプトの実装案】</h2>
<p>ToT(Tree of Thoughts)とSelf-Refineのエッセンスを1つのプロンプトに統合し、Few-shotとChain-of-Thought(CoT)を組み込んだ実装案です。</p>
<div class="codehilite">
<pre data-enlighter-language="generic"># 役割
あなたは極めて優秀な論理分析官であり、複雑な問題に対して「思考の木(Tree of Thoughts)」を展開し、自己検証(Self-Refine)を繰り返しながら最適な解決策を導き出すエキスパートです。
# ミッション
ユーザーから与えられた【課題】に対し、以下の【推論プロセス】に厳密に従って思考し、最終結論を出力してください。
# 推論プロセス
1. **仮説創出(思考の木)**:
課題に対して、異なるアプローチによる3つのアプローチ(ルートA、B、C)を考えてください。
2. **自己検証(Self-Refine)**:
各ルートについて、以下の観点から批判的に検証し、欠陥やハルシネーション(矛盾)がないかスコア(10点満点)をつけてください。
- 論理の飛躍がないか
- 現実的な実行可能性はあるか
3. **収束と結合**:
最もスコアの高いルート、あるいは各ルートの優れた要素を統合し、最終結論を導出してください。
# 出力フォーマット
## 1. 思考の木(仮説創出)
- **ルートA**: [ルートAの推論プロセス]
- **ルートB**: [ルートBの推論プロセス]
- **ルートC**: [ルートCの推論プロセス]
## 2. 自己検証ログ
```json
{
"route_a": {
"score": 0,
"critique": "検証内容を記述"
},
"route_b": {
"score": 0,
"critique": "検証内容を記述"
},
"route_c": {
"score": 0,
"critique": "検証内容を記述"
}
}
</pre>
</div>
<h2 class="wp-block-heading">3. 最終結論</h2>
<p>[最も優れた論理に基づく最終的な回答]</p>
<hr/>
<h1 class="wp-block-heading">入力</h1>
<p>【課題】:
地方都市における「プラスチックゴミの削減」と「観光地としての景観維持」を両立しつつ、地元飲食店の売上を落とさない具体的な施策を提案してください。</p>
<pre data-enlighter-language="generic">
---
## 【評価指標と誤り分析】
### 発生しやすい失敗パターン
1. **批判の形骸化(Self-Refineの形骸化)**:
LLMが自身で作成したルートに対し、すべて「問題なし(10点)」と判定してしまい、実質的な検証が行われない。
2. **フォーマット崩れ**:
JSONブロックの途中でMarkdownの記述が混ざり、後続のシステムでのパースエラーが発生する。
3. **浅い思考展開**:
ルートA、B、Cがほぼ同じ内容になり、多様な視点(Tree)としての機能が果たされない。
### LLM-as-a-Judge 評価基準
| 評価項目 | 評価基準(1-5点) | 5点(優良)の定義 | 1点(不可)の定義 |
| :--- | :--- | :--- | :--- |
| **思考の多様性** | 提示されたアプローチが異なる切り口を持っているか | 3つのルートが全く異なるアプローチ(技術、制度、行動変容など)で展開されている | すべて類似したアプローチであり、単なる言い換えに留まっている |
| **検証の批判性** | 自己検証において、論理の弱点を厳しく指摘できているか | 各ルートの具体的なリスクやデメリットを明確に特定し、スコアリングに反映している | すべて「完璧である」とし、具体的な欠点の指摘がない |
| **フォーマット遵守** | 指定されたJSON構造およびMarkdown見出しを維持しているか | JSONが完全な構文で記述され、仕様通りのキー(route_a等)が存在する | JSONの構文エラーがある、または指定されたセクションが欠落している |
---
## 【改良後の最適プロンプト】
失敗パターン(自己批判の甘さ、フォーマット崩れ)を対策するため、**「悪魔の代弁者(Devil's Advocate)」のロールプレイを導入**し、出力フォーマットを厳格化した改良版プロンプトです。
```text
# 役割
あなたは極めて優秀な論理分析官です。本タスクでは、あえて「自身のアイデアを容赦なく批判する悪魔の代弁者」の視点を強制的に取り入れ、思考の木(Tree of Thoughts)と自己検証(Self-Refine)を実行します。
# ミッション
ユーザーから提示された【課題】に対し、以下の【推論プロセス】を厳密に実行してください。
# 推論プロセス
1. **ステップ1:3つの異なる仮説(思考の木)の提示**
- 課題解決に向けて、全く異なる角度(例:技術的アプローチ、制度的アプローチ、心理/インセンティブ設計など)から3つのルート(A, B, C)を構築してください。
2. **ステップ2:悪魔の代弁者による自己検証(Self-Refine)**
- あなた自身が提示したルートA, B, Cに対し、あえて最も厳しい批判者となり、各ルートの「論理的飛躍」「隠れたコスト」「現実的な障壁」を最低2つずつ指摘してください。
- 批判に基づき、各ルートを10点満点で厳格に減点方式で採点してください(問題がある場合は容赦なく5点以下にしてください)。
3. **ステップ3:最終結論の出力**
- 批判を克服するために最も修正・統合が容易なアイデア、あるいは複数ルートのハイブリッド案を「最終結論」として提示してください。
# 出力フォーマット制約
出力は必ず以下のMarkdownおよびJSONフォーマットを維持してください。他のテキストは一切含めないでください。
## 1. 思考の木
- **ルートA(技術/インフラ主導)**: [プロセス]
- **ルートB(制度/インセンティブ主導)**: [プロセス]
- **ルートC(コミュニティ/行動デザイン主導)**: [プロセス]
## 2. 悪魔の代弁者による自己検証ログ
```json
{
"route_a": {
"weaknesses": [
"弱点1:...",
"弱点2:..."
],
"strict_score": 0
},
"route_b": {
"weaknesses": [
"弱点1:...",
"弱点2:..."
],
"strict_score": 0
},
"route_c": {
"weaknesses": [
"弱点1:...",
"弱点2:..."
],
"strict_score": 0
}
}
</pre>
<h2 class="wp-block-heading">3. 最終結論と修正プラン</h2>
<ul class="wp-block-list">
<li><p><strong>採択されたアプローチ</strong>: [記述]</p></li>
<li><p><strong>自己批判を反映した修正点</strong>: [記述]</p></li>
<li><p><strong>具体的なロードマップ</strong>: [記述]</p></li>
</ul>
<hr/>
<h1 class="wp-block-heading">入力</h1>
<p>【課題】:
地方都市における「プラスチックゴミの削減」と「観光地としての景観維持」を両立しつつ、地元飲食店の売上を落とさない具体的な施策を提案してください。
“`</p>
<hr/>
<h2 class="wp-block-heading">【まとめ】</h2>
<p>実務で高度な推論プロンプト(ToT / Self-Refine)を運用するための3つの鉄則:</p>
<ol class="wp-block-list">
<li><p><strong>批判フェーズの「役割分離」を明示する</strong>
LLMはデフォルトで「自分の出力した文章を肯定的に評価しやすい」というバイアス(自己肯定バイアス)を持ちます。プロンプト内で「悪魔の代弁者」「最も厳しい審査官」といった特定のキャラクターや役割(ペルソナ)を与えることで、自己批判の質を劇的に向上させます。</p></li>
<li><p><strong>多角的アプローチの「切り口」をあらかじめ規定する</strong>
単に「3つの異なるアプローチ」と指示するだけでは類似した回答になりがちです。「技術」「法制度」「行動経済学(インセンティブ)」のように、思考の次元をプロンプト側から指定(制約)することで、思考の木の「幅」を強制的に広げることができます。</p></li>
<li><p><strong>構造化データ(JSON等)は専用ブロックで分離する</strong>
自由記述の思考プロセスと、構造化された検証結果(スコアリングなど)を混在させると、パーサーエラーが発生しやすくなります。上記のように、思考(Markdown)と評価ログ(JSON)を明確な見出しで切り分け、LLMにそれぞれのブロックの境界を強く意識させることが重要です。</p></li>
</ol>
本記事はGeminiの出力をプロンプト工学で整理した業務ドラフト(未検証)です。
複雑な論理推論を制御する:Tree of ThoughtsとSelf-Refineを融合したLLM出力最適化プロンプト
【ユースケース定義と課題】
多角的な仮説検証と自己修正を要する複雑な意思決定において、LLMの論理崩壊を防ぎ一貫した推論出力を得ること。
【プロンプト設計のループ】
graph TD
A["設計: 思考ツリーと自己修正のルール定義"] --> B["実行: LLMによる複数ルートの思考展開"]
B --> C["評価: 評価基準に照らした妥当性検証"]
C -->|改善: 自己修正指示(Self-Refine)の実行| A
1. 設計(Design)
LLMに単一の思考ルートをたどらせるのではなく、複数の分岐(Tree of Thoughts)を生成させ、それぞれの妥当性を判定するシステムプロンプトを設計します。また、エラーや矛盾を検知した際に自ら軌道修正を行うSelf-Refineのフィードバックループを定義します。
2. 実行(Execution)
最新のLLM(Gemini 1.5 ProやGPT-4oなど)が持つ広大なコンテキストウィンドウを活かし、思考の分岐点(ノード)ごとに「仮説の創出」「評価」「採択/棄却」を実行させます。
3. 評価(Evaluation)
出力された結論および思考プロセスが、あらかじめ設定した品質基準に合致しているかを判定します。矛盾が発生している場合は、どの推論フェーズでエラーが起きたかをトレースし、プロンプトの記述(メタ指示やFew-shot)にフィードバックします。
【プロンプトの実装案】
ToT(Tree of Thoughts)とSelf-Refineのエッセンスを1つのプロンプトに統合し、Few-shotとChain-of-Thought(CoT)を組み込んだ実装案です。
# 役割
あなたは極めて優秀な論理分析官であり、複雑な問題に対して「思考の木(Tree of Thoughts)」を展開し、自己検証(Self-Refine)を繰り返しながら最適な解決策を導き出すエキスパートです。
# ミッション
ユーザーから与えられた【課題】に対し、以下の【推論プロセス】に厳密に従って思考し、最終結論を出力してください。
# 推論プロセス
1. **仮説創出(思考の木)**:
課題に対して、異なるアプローチによる3つのアプローチ(ルートA、B、C)を考えてください。
2. **自己検証(Self-Refine)**:
各ルートについて、以下の観点から批判的に検証し、欠陥やハルシネーション(矛盾)がないかスコア(10点満点)をつけてください。
- 論理の飛躍がないか
- 現実的な実行可能性はあるか
3. **収束と結合**:
最もスコアの高いルート、あるいは各ルートの優れた要素を統合し、最終結論を導出してください。
# 出力フォーマット
## 1. 思考の木(仮説創出)
- **ルートA**: [ルートAの推論プロセス]
- **ルートB**: [ルートBの推論プロセス]
- **ルートC**: [ルートCの推論プロセス]
## 2. 自己検証ログ
```json
{
"route_a": {
"score": 0,
"critique": "検証内容を記述"
},
"route_b": {
"score": 0,
"critique": "検証内容を記述"
},
"route_c": {
"score": 0,
"critique": "検証内容を記述"
}
}
3. 最終結論
[最も優れた論理に基づく最終的な回答]
入力
【課題】:
地方都市における「プラスチックゴミの削減」と「観光地としての景観維持」を両立しつつ、地元飲食店の売上を落とさない具体的な施策を提案してください。
---
## 【評価指標と誤り分析】
### 発生しやすい失敗パターン
1. **批判の形骸化(Self-Refineの形骸化)**:
LLMが自身で作成したルートに対し、すべて「問題なし(10点)」と判定してしまい、実質的な検証が行われない。
2. **フォーマット崩れ**:
JSONブロックの途中でMarkdownの記述が混ざり、後続のシステムでのパースエラーが発生する。
3. **浅い思考展開**:
ルートA、B、Cがほぼ同じ内容になり、多様な視点(Tree)としての機能が果たされない。
### LLM-as-a-Judge 評価基準
| 評価項目 | 評価基準(1-5点) | 5点(優良)の定義 | 1点(不可)の定義 |
| :--- | :--- | :--- | :--- |
| **思考の多様性** | 提示されたアプローチが異なる切り口を持っているか | 3つのルートが全く異なるアプローチ(技術、制度、行動変容など)で展開されている | すべて類似したアプローチであり、単なる言い換えに留まっている |
| **検証の批判性** | 自己検証において、論理の弱点を厳しく指摘できているか | 各ルートの具体的なリスクやデメリットを明確に特定し、スコアリングに反映している | すべて「完璧である」とし、具体的な欠点の指摘がない |
| **フォーマット遵守** | 指定されたJSON構造およびMarkdown見出しを維持しているか | JSONが完全な構文で記述され、仕様通りのキー(route_a等)が存在する | JSONの構文エラーがある、または指定されたセクションが欠落している |
---
## 【改良後の最適プロンプト】
失敗パターン(自己批判の甘さ、フォーマット崩れ)を対策するため、**「悪魔の代弁者(Devil's Advocate)」のロールプレイを導入**し、出力フォーマットを厳格化した改良版プロンプトです。
```text
# 役割
あなたは極めて優秀な論理分析官です。本タスクでは、あえて「自身のアイデアを容赦なく批判する悪魔の代弁者」の視点を強制的に取り入れ、思考の木(Tree of Thoughts)と自己検証(Self-Refine)を実行します。
# ミッション
ユーザーから提示された【課題】に対し、以下の【推論プロセス】を厳密に実行してください。
# 推論プロセス
1. **ステップ1:3つの異なる仮説(思考の木)の提示**
- 課題解決に向けて、全く異なる角度(例:技術的アプローチ、制度的アプローチ、心理/インセンティブ設計など)から3つのルート(A, B, C)を構築してください。
2. **ステップ2:悪魔の代弁者による自己検証(Self-Refine)**
- あなた自身が提示したルートA, B, Cに対し、あえて最も厳しい批判者となり、各ルートの「論理的飛躍」「隠れたコスト」「現実的な障壁」を最低2つずつ指摘してください。
- 批判に基づき、各ルートを10点満点で厳格に減点方式で採点してください(問題がある場合は容赦なく5点以下にしてください)。
3. **ステップ3:最終結論の出力**
- 批判を克服するために最も修正・統合が容易なアイデア、あるいは複数ルートのハイブリッド案を「最終結論」として提示してください。
# 出力フォーマット制約
出力は必ず以下のMarkdownおよびJSONフォーマットを維持してください。他のテキストは一切含めないでください。
## 1. 思考の木
- **ルートA(技術/インフラ主導)**: [プロセス]
- **ルートB(制度/インセンティブ主導)**: [プロセス]
- **ルートC(コミュニティ/行動デザイン主導)**: [プロセス]
## 2. 悪魔の代弁者による自己検証ログ
```json
{
"route_a": {
"weaknesses": [
"弱点1:...",
"弱点2:..."
],
"strict_score": 0
},
"route_b": {
"weaknesses": [
"弱点1:...",
"弱点2:..."
],
"strict_score": 0
},
"route_c": {
"weaknesses": [
"弱点1:...",
"弱点2:..."
],
"strict_score": 0
}
}
3. 最終結論と修正プラン
採択されたアプローチ: [記述]
自己批判を反映した修正点: [記述]
具体的なロードマップ: [記述]
入力
【課題】:
地方都市における「プラスチックゴミの削減」と「観光地としての景観維持」を両立しつつ、地元飲食店の売上を落とさない具体的な施策を提案してください。
“`
【まとめ】
実務で高度な推論プロンプト(ToT / Self-Refine)を運用するための3つの鉄則:
批判フェーズの「役割分離」を明示する
LLMはデフォルトで「自分の出力した文章を肯定的に評価しやすい」というバイアス(自己肯定バイアス)を持ちます。プロンプト内で「悪魔の代弁者」「最も厳しい審査官」といった特定のキャラクターや役割(ペルソナ)を与えることで、自己批判の質を劇的に向上させます。
多角的アプローチの「切り口」をあらかじめ規定する
単に「3つの異なるアプローチ」と指示するだけでは類似した回答になりがちです。「技術」「法制度」「行動経済学(インセンティブ)」のように、思考の次元をプロンプト側から指定(制約)することで、思考の木の「幅」を強制的に広げることができます。
構造化データ(JSON等)は専用ブロックで分離する
自由記述の思考プロセスと、構造化された検証結果(スコアリングなど)を混在させると、パーサーエラーが発生しやすくなります。上記のように、思考(Markdown)と評価ログ(JSON)を明確な見出しで切り分け、LLMにそれぞれのブロックの境界を強く意識させることが重要です。
コメント