LESSON 30分

ストーリー

田中VPoE
「CoTで推論過程を出力させる方法を学んだが、一つの推論パスだけでは間違うこともある。」
あなた
「確かに、一度の推論で正しい答えが出るとは限りませんよね。」
田中VPoE
「そこで登場するのがSelf-Consistencyだ。同じ問題に対して複数の推論パスを生成し、多数決で最終回答を決める。」
あなた
「人間で言えば、チームで議論して合意形成するようなイメージですか?」
田中VPoE
「いい例えだね。さらに発展版としてTree of Thoughtsという手法もある。一緒に見ていこう。」

Self-Consistencyとは

Self-Consistencyは、同じプロンプトに対して複数の推論パス(Chain of Thought)を生成し、最も多く得られた回答を最終回答として採用する手法だ。

基本的な流れ

同じプロンプト → [温度を上げて複数回実行]
                    ├── 推論パス1 → 回答A
                    ├── 推論パス2 → 回答A
                    ├── 推論パス3 → 回答B
                    ├── 推論パス4 → 回答A
                    └── 推論パス5 → 回答A

多数決 → 回答A(4/5 = 80%の一致率)→ 最終回答

なぜ有効なのか

理由説明
偶発的なエラーの排除1回の推論で発生するランダムなミスを平均化
信頼度の指標一致率が高いほど回答の信頼性が高い
複数のアプローチ異なる推論パスが同じ結論に至ることで堅牢性が増す

Self-Consistencyの実装方法

方法1: API経由で複数回呼び出し

async function selfConsistency(prompt: string, n: number = 5): Promise<string> {
  const responses = await Promise.all(
    Array.from({ length: n }, () =>
      callLLM(prompt, { temperature: 0.7 })
    )
  );

  // 回答部分を抽出
  const answers = responses.map(extractFinalAnswer);

  // 多数決
  const counts = new Map<string, number>();
  for (const answer of answers) {
    counts.set(answer, (counts.get(answer) || 0) + 1);
  }

  // 最多の回答を返す
  return [...counts.entries()].sort((a, b) => b[1] - a[1])[0][0];
}

方法2: 単一プロンプト内で複数の推論を生成

以下の問題について、3つの異なるアプローチで推論してください。
各アプローチの最終回答を明示し、最後に多数決で最終回答を決定してください。

問題: NetShop社のAPIレスポンスが遅延しています。以下のメトリクスから
最も可能性の高い原因を特定してください。
- CPU使用率: 30%
- メモリ使用率: 85%
- DB接続数: 95/100
- ネットワーク帯域: 40%

アプローチ1の推論:
(推論...)
→ 回答1: [原因]

アプローチ2の推論:
(推論...)
→ 回答2: [原因]

アプローチ3の推論:
(推論...)
→ 回答3: [原因]

多数決結果: [最終回答]
信頼度: [一致した割合]

一致率と信頼度

一致率は回答の信頼度を測る指標として使える。

一致率信頼度アクション
100%(5/5)非常に高いそのまま採用
80%(4/5)高い採用して良い
60%(3/5)中程度追加検証を推奨
40%以下低いプロンプトの改善か人間の判断が必要

Tree of Thoughts(ToT)

Tree of Thoughtsは、Self-Consistencyをさらに発展させた手法だ。線形の推論パスではなく、木構造で推論を探索する。

概念図

        [問題]
       /   |   \
    思考A  思考B  思考C
    / \     |     / \
  A1  A2   B1   C1  C2
  |        |         |
 評価     評価      評価
  ↓        ↓        ↓
 採用     却下      採用

ToTの3ステップ

  1. 生成(Generate): 各ステップで複数の思考候補を生成
  2. 評価(Evaluate): 各候補の妥当性を評価
  3. 探索(Search): 有望な候補を選択して次のステップへ進む

ToTのプロンプト例

以下の設計課題について、Tree of Thoughts形式で分析してください。

課題: NetShop社の検索機能を改善したい。現在の平均検索時間は3秒。

Step 1: 3つのアプローチを提案してください。
アプローチA: [提案]
アプローチB: [提案]
アプローチC: [提案]

Step 2: 各アプローチを以下の観点で評価してください(1-5点)。
- 実装難易度
- 効果の大きさ
- コスト

Step 3: 最も評価の高いアプローチを選択し、具体的な実装計画を作成してください。

Self-Consistency vs ToT vs CoT

項目CoTSelf-ConsistencyToT
推論パス1本複数(独立)木構造(分岐・評価)
コスト中(N回呼出し)高(各段階で複数生成)
精度最高
複雑さ
適用場面一般的な推論正解が明確な問題創造的・設計的な問題

実務での活用指針

場面推奨手法理由
コードのバグ特定Self-Consistency正解が明確で多数決が有効
アーキテクチャ設計ToT複数案の比較評価が必要
ログの異常検知Self-Consistency複数の分析視点で堅牢性向上
新機能の企画ToT創造的なアイデア探索に適する
翻訳・要約CoT(単独)で十分推論の複雑さが低い

まとめ

項目ポイント
Self-Consistency複数の推論パスを生成し多数決で回答を決定
一致率回答の信頼度指標として活用
Tree of Thoughts木構造で推論を探索し、各段階で評価・選択
使い分けコスト・精度・タスク特性に応じて選択

チェックリスト

  • Self-Consistencyの原理と多数決の仕組みを理解した
  • 一致率を信頼度の指標として活用できる
  • Tree of Thoughtsの生成・評価・探索の3ステップを理解した
  • CoT / Self-Consistency / ToTの使い分けを判断できる

次のステップへ

次は「メタプロンプティング」として、プロンプトでプロンプトを生成する高度なテクニックを学ぼう。


推定読了時間: 30分