複雑な論理推論を制御する:Tree of ThoughtsとSelf-Refineを融合したLLM出力最適化プロンプト

Tech

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

複雑な論理推論を制御する:Tree of ThoughtsとSelf-Refineを融合したLLM出力最適化プロンプト

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

多角的な仮説検証と自己修正を要する複雑な意思決定において、LLMの論理崩壊を防ぎ一貫した推論出力を得ること。

  • 入力の型:解決したい課題(テキスト)、制約条件(Markdownリスト)

  • 出力の型:思考プロセス(Markdownによる木構造表現)、自己修正ログ(JSON形式)、最終結論(Markdown)


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

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つの鉄則:

  1. 批判フェーズの「役割分離」を明示する LLMはデフォルトで「自分の出力した文章を肯定的に評価しやすい」というバイアス(自己肯定バイアス)を持ちます。プロンプト内で「悪魔の代弁者」「最も厳しい審査官」といった特定のキャラクターや役割(ペルソナ)を与えることで、自己批判の質を劇的に向上させます。

  2. 多角的アプローチの「切り口」をあらかじめ規定する 単に「3つの異なるアプローチ」と指示するだけでは類似した回答になりがちです。「技術」「法制度」「行動経済学(インセンティブ)」のように、思考の次元をプロンプト側から指定(制約)することで、思考の木の「幅」を強制的に広げることができます。

  3. 構造化データ(JSON等)は専用ブロックで分離する 自由記述の思考プロセスと、構造化された検証結果(スコアリングなど)を混在させると、パーサーエラーが発生しやすくなります。上記のように、思考(Markdown)と評価ログ(JSON)を明確な見出しで切り分け、LLMにそれぞれのブロックの境界を強く意識させることが重要です。

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

コメント

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