CoTは単なる「ステップバイステップで考えよう」ではない
2022年にGoogle Researchが発表した論文「Chain-of-Thought Prompting Elicits Reasoning in Large Language Models」がCoT研究のブームを巻き起こしましたが、多くの人の理解は「プロンプトの最後に『Let's think step by step』を追加する」というレベルにとどまっています。実際には、CoTには深い認知科学の原理が込められています。それは人間のシステム2思考(遅い思考)の働き方を模倣しています。複雑な問題を一連の中間推論ステップに分解し、各ステップに明確な論理的根拠を持たせ、最終的に信頼できる結論に収束させます。
なぜCoTは有効なのでしょうか?情報理論の観点から見ると、CoTはモデルの「思考」の計算量を増やします。各推論ステップでトークンを生成する際、モデルは入力とそれ以前に生成された推論ステップに再び注意を向け、実質的に複数回の内部アテンション計算を行います。この再帰的なアテンションメカニズムにより、モデルは単一のフォワードパスでは見落としがちな長距離依存関係を捉えることができます。言い換えれば、CoTは本質的により多くの計算と引き換えに、より強力な推論能力を得ているのです。
CoTの4つの変種
Zero-shot CoT:最も単純な形式で、プロンプトの末尾に「Let's think step by step」を追加するだけです。利点はゼロコスト(例を準備する必要がない)ですが、効果は不安定です。単純な推論タスクには顕著に役立ちますが、複雑なタスクには限定的です。
Few-shot CoT:完全な推論プロセスを持つ2〜3個の例を提供します。これは現在最も効果的で広く使われているCoTの形式です。重要な設計要素:例の推論は正確でなければなりません(誤った例は例がないよりも悪い)、例は異なる推論モード(算術、論理、常識をそれぞれ1つ)をカバーすべきです、例の複雑さは対象タスクに一致すべきです。
Auto-CoT:推論チェーンを自動生成します。クラスタリングにより多様な例題を選択し、モデルに各例の推論チェーンを自動生成させます。人手による注釈は不要です。大量の例が必要なシナリオに適していますが、推論チェーンの品質は人手によるレビューが必要です。
Tree-of-Thought(ToT):CoTの高度なバージョンです。線形推論だけでなく、各ステップで複数の可能な推論経路を探索し、各経路の品質を評価し、最も有望な経路を選んで続行します。ToTは人間の「ブレインストーミング→評価→選択」という意思決定プロセスを模倣し、探索と計画を必要とするタスクでCoTを大幅に上回ります。
Few-shot CoTの精密な設計
多くの開発者は「推論プロセス付きの例を適当にいくつか見つければいい」と誤解しています。実際には、Few-shot CoTの設計は繊細な作業です。例の形式は一貫している必要があります。すべての例で同じ構造(問題→推論→答え)を使用します。推論ステップは明確で検証可能でなければなりません。各ステップは独立した検証可能な部分結論であるべきで、飛躍的な推論は避けます。境界ケースをカバーします。少なくとも1つの例で、推論の途中で追加情報が必要になったり、不確実性が生じたりする状況を示し、モデルが不確実な場合に答えを捏造するのではなく不確実性を表現することを学ぶようにします。
from openai import OpenAI
client = OpenAI(api_key="your-deepseek-api-key", base_url="https://api.deepseek.com")
FEWSHOT_COT = """以下の例の推論方法に従って質問に答えてください。
【例1 - 数学的推論】
問題:店がプロモーションで、3冊買うと1冊無料。小明は20冊必要です。最低でも何冊分の代金を払う必要がありますか?
推論:
1. ルールを理解する:3冊買うごとに1冊無料、つまり4冊ごとに3冊分の代金を払う。
2. 「4冊」のグループがいくつ必要か計算:20 ÷ 4 = 5グループ
3. 各グループで3冊分を支払う:5 × 3 = 15冊
4. 検証:15冊支払い + 5冊無料 = 20冊 ✓
答え:最低でも15冊分の代金を払う必要があります。
【例2 - 論理的推論】
問題:すべてのAがBであり、すべてのBがCであるなら、すべてのAはCですか?
推論:
1. 前提1:すべてのAはBである — A ⊆ B
2. 前提2:すべてのBはCである — B ⊆ C
3. 推移性により:A ⊆ B かつ B ⊆ C ならば、A ⊆ C
4. 検証:これは有効な三段論法(Barbara形式)です。
答え:はい、すべてのAはCです。
【あなたの質問】
問題:{question}
推論:"""
question = "池に注水管があり、3時間で満水になります。排水管は5時間で空にします。両方の管を同時に開くと、何時間で満水になりますか?"
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role":"user","content":FEWSHOT_COT.format(question=question)}],
temperature=0.1
)
print(response.choices[0].message.content)Tree-of-Thought:線形推論を超えて
Tree-of-Thought(ToT)は、推論プロセスを木探索問題としてモデル化します。各推論ステップで、モデルは複数の可能な思考方向を生成し、各方向の見込みを評価し、最も有望な方向を選んで深掘りします。ある経路が行き詰まった場合は、前の分岐点に戻って他の方向を試します。この探索・評価・バックトラックのメカニズムにより、AIは人間の専門家に似た問題解決能力を獲得します。
ToTの主要コンポーネントには、思考生成器(複数の候補思考を生成)、状態評価器(現在の思考の品質と見込みを評価)、探索戦略(BFS/DFS/ビームサーチ)が含まれます。探索戦略の選択はタスクによって異なります。求解タスク(数学問題、プログラミング問題など)ではDFSが通常より効率的です。創造的タスク(執筆、企画など)ではBFSがより多くの可能性を探索できます。
class TreeOfThought: def __init__(self, max_depth=5, beam_width=3): self.max_depth = max_depth self.beam_width = beam_width def generate_thoughts(self, problem, context): prompt = f"問題:{problem}\n現在の推論状態:{context}\n\n次の推論方向を{self.beam_width}個提案してください。各方向は独立しており、論理的で検証可能である必要があります。" response = client.chat.completions.create( model="deepseek-chat", messages=[{"role":"user","content":prompt}], temperature=0.7) return response.choices[0].message.content def solve(self, problem): beams = [{"context":"","score":10}] for depth in range(self.max_depth): candidates = [] for beam in beams: thoughts = self.generate_thoughts(problem, beam["context"]) for thought in thoughts.split("\n"):if thought.strip(): candidates.append({"context":beam["context"]+"\n"+thought,"score":beam["score"]+7}) candidates.sort(key=lambda x:x["score"], reverse=True) beams = candidates[:self.beam_width] return beams[0]["context"] if beams else "No solution" tot = TreeOfThought(max_depth=4, beam_width=3) solution = tot.solve("分散型タスクスケジューリングシステムのアーキテクチャを設計する") Self-Consistency:AIに「何度も考えさせる」
Self-Consistencyは、シンプルだが非常に効果的なCoT強化戦略です。核となる考え方は、モデルに同じ問題に対して複数回独立した推論を行わせ(temperature>0を設定してランダム性を導入)、その複数の推論結果に対して投票を行い、最も頻繁に出現する、または最も一貫した答えを選択するというものです。これは人間の「三思而后行」(三度考えてから行動する)に似ており、最初の考えには偏りがあるかもしれませんが、何度も考えてコンセンサスを得ることで、精度が大幅に向上します。
研究によると、数学的推論タスクにおいて、5回サンプリングして多数決を取ると、精度は単一回の推論の75%から90%以上に向上します。サンプリング回数が多いほど効果は高まりますが、収穫逓減の法則があり、通常5〜10回のサンプリングでほとんどの利益が得られ、20回を超えると改善はわずかです。主要パラメータ:temperature(推奨0.5〜0.8。低すぎると多様性が不足し、高すぎると推論品質が低下)、サンプリング回数(5〜10回が最も費用対効果が高い)。
CoTの失敗モードと対策
推論幻覚:モデルが推論中に存在しない事実や論理を捏造する可能性があります。対策:外部検証ステップを導入し、推論中の重要な主張を事実確認します。推論ループ:モデルが推論中にぐるぐる回り続け、前進できません。対策:最大推論ステップ数(例:10ステップ)を設定し、タイムアウト時に強制終了して要約を要求します。過剰推論:簡単な問題に対して過度に複雑な推論を行い、トークンを浪費します。対策:まず問題の複雑さを判断し、簡単な問題にはZero-shot CoTを使用し、複雑な問題にのみFew-shot/ToTを使用します。形式崩壊:推論出力が期待される形式に準拠せず、下流の解析が失敗します。対策:プロンプトで形式要件を強調し、形式エラーのfew-shot反例を含めます。
エンジニアリング実践:CoTの費用対効果分析
CoTは無料の昼食ではありません。典型的なFew-shot CoTプロンプトは、直接プロンプトよりも3〜5倍多くのトークンを消費する可能性があります(例の推論チェーンとモデルが生成する推論チェーンを含む)。実際のプロジェクトでは、タスクの価値に基づいてCoTを使用するかどうかを決定する必要があります:高価値タスク(例:医療診断支援、法的文書分析)は、深い推論に多くのトークンを投資する価値があります;低価値タスク(例:簡単な情報照会)は、直接プロンプトの方が経済的です。
実用的な戦略:ユーザーリクエストを複雑さで分類します。簡単なクエリは直接回答;中程度の複雑さはZero-shot CoTを使用;高複雑さはFew-shot CoT + Self-Consistencyを使用します。段階的ルーティングにより、品質を確保しながらコストを制御します。
フロンティア展望:CoTからSystem 2推論へ
CoTの究極の目標は、モデルに推論プロセスを模倣させることではなく、人間のSystem 2に似た深い推論能力をモデルに真に備えさせることです。現在の研究フロンティアには、マルチモーダルCoT(画像、コードなどのマルチモーダル情報を組み合わせた推論)、再帰的CoT(モデルが推論中に自分自身を呼び出して部分問題を解決する)、自己改善CoT(モデルが強化学習を通じて自身の推論戦略を自動最適化する)が含まれます。DeepSeek-R1はこの方向性の傑出した代表例です—大規模な強化学習トレーニングを通じて、モデルがチェーン推論を内生的に学習し、手動で設計されたCoTプロンプトを必要としません。これは、AIの推論能力が「プロンプト誘発」から「モデル内生」への質的変化を示しています。CoTの原理を理解して初めて、この世代のAIモデルの推論能力がどこから来るのかを真に理解できます。
このスキルチェーンを自分で編成してみませんか?
スキルチェーンで開く →