Chain-of-Thoughtとは
CoT / 思考の連鎖
最終的な答えに至る過程を段階的に言語化させることで、LLMの推論精度を高めるプロンプティング手法
ひとことで言うと
AIに答えまでの考え方を順を追って書かせることで、精度を上げる質問の仕方。
概要
Chain-of-Thought(CoT、思考の連鎖)とは、LLMに対して最終的な答えだけでなく、そこに至る推論過程を段階的に言語化させることで、複雑な推論タスクの精度を高めるプロンプティング手法。 プロンプトに推論過程を含む例を示す(few-shot CoT)か、「ステップバイステップで考えてください」といった指示を加えるだけ(zero-shot CoT)でも効果が確認されている。 算数の文章題や論理パズルなど、複数の推論ステップを要するタスクで特に効果を発揮する。 一方で生成される推論過程が必ずしもモデル内部の実際の計算過程を正確に反映しているとは限らず、もっともらしいが誤った理由付けをする場合もある点には注意が必要。
背景
LLMは次のトークンを逐次予測する仕組み上、複雑な問題にいきなり答えだけを出力させると、途中の推論を省略してしまい誤りやすいという課題があった。 CoTは、推論過程そのものをモデルに生成させることで各ステップの計算を出力トークンとして明示的に行わせ、精度を高めるために考案された。
歴史
2022年: Weiらがfew-shot Chain-of-Thoughtプロンプティングを提案し、大規模モデルにおいて算数・常識推論タスクの精度を大きく向上させることを示す。 2022年: Kojimaらが「Let's think step by step」という指示のみで効果が得られるzero-shot CoTを提案。 2024年以降: 推論過程を強化学習等で最適化する「推論モデル」の内部挙動としてCoT的な振る舞いが組み込まれるようになる。
アーキテクチャ
特別なモデル構造の変更は不要で、プロンプトの与え方のみで実現される手法。 出力トークン列に中間的な推論ステップを含めることで、モデルが直前までの自分自身の推論結果を参照しながら次のステップを予測できるようにする。
ワークフロー
タスクに応じたプロンプトを用意 → 推論過程の例を含める(few-shot)か「ステップバイステップで考えて」と指示する(zero-shot) → モデルが中間の推論ステップを出力しながら最終的な答えを生成 → 出力から最終的な答えの部分を抽出。
コード例
zero-shot CoTによる段階的推論の指示
from openai import OpenAI
client = OpenAI()
prompt = (
"ある店で商品を3個買うと合計1200円、5個買うと合計1800円でした。"
"1個あたりの価格を求めてください。\nステップバイステップで考えてください。"
)
response = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": prompt}],
)
print(response.choices[0].message.content)利点
- 複数ステップの推論を要するタスクの精度を、追加学習なしに高められる
- 推論過程が出力されるため、モデルの判断根拠をある程度確認できる
- few-shotの例文を用意するだけでモデルの重みを変更せず適用できる
欠点
- 出力トークン数が増えるため、推論コストとレイテンシが増加する
- モデルの規模が小さい場合、CoTの効果が乏しい、または逆効果になることがある
- 出力された推論過程が実際のモデル内部の計算過程を正確に反映しているとは限らない
比較
- プロンプトエンジニアリング — Chain-of-Thoughtはプロンプトエンジニアリングの代表的な手法の1つ
- 推論モデル — 推論モデルは、CoT的な段階的推論を強化学習などで内部的に最適化したモデル
- リフレクション — Chain-of-Thoughtが単一の推論過程を段階的に言語化するのに対し、リフレクションは一度出した結論を事後的に見直す
関連用語
よくある質問
CoTは全てのモデルで効果がある?
一般に大規模なモデルほど効果が出やすいとされ、小規模なモデルでは効果が限定的、または安定しない場合がある。