思考の連鎖(Chain-of-Thought、CoT)プロンプティングは、最終的な答えを出す前に、モデルに推論過程を書き出させる手法です。この考え方は 2022 年に Google の Wei らが示したもので、途中の手順を含む解答例が、算数や論理の問題で結果を改善することを明らかにしました。
手順を書くと役立つ理由
言語モデルは一度に 1 トークンずつ、それ以前のすべてを条件として生成します。すぐに答えなければならないと、途中の作業なしに答えが予測されます。先に手順を書かせれば、その手順が、答えを予測する文脈の一部になります。紙面上での推論は作業記憶です。
ゼロショットの思考の連鎖
最も単純な形は、先に推論するよう指示を加えるものです。
A warehouse ships 240 orders a day. 15% need gift wrap, which adds
4 minutes each. How many staff hours a day does gift wrap take?
Work through the problem step by step, then give the final answer
on its own line as "Answer: <number> hours".
重要な点が 2 つあります。推論は答えの前に求めること、そしてコードが見つけられるよう、答えに決まった目印を付けることです。
フューショットの思考の連鎖
ここでは例が結果だけでなく推論も示すので、モデルはその方法を真似します。
Q: A plan costs $12 a month or $120 a year. How much does the yearly
plan save over 2 years?
Reasoning: Monthly for 2 years is 12 x 24 = $288. Yearly for 2 years
is 120 x 2 = $240. The difference is 288 - 240 = $48.
Answer: $48
Q: {{question}}
Reasoning:
従ってほしい特定の手順がタスクにあるときに使います。
構造化された推論
コードが読む回答では、タグやフィールドで思考と結果を分けます。
Think through the eligibility rules inside <reasoning> tags.
Then give the decision inside <decision> tags as "approve" or "reject".
JSON では、推論のフィールドを判定のフィールドより前に置きます。フィールドは順番に生成されるので、判定の後に来る推論は判定に影響できません。構造化出力のプロンプトを参照してください。
推論モデルでは助言が変わる
最近の多くのモデルは、応答する前に内部で推論します。多くは thinking、reasoning effort、extended thinking といった設定で制御されます。これらのモデルでは次のようにします。
- 「ステップごとに考えて」を付け足さない。 すでにそうしていて、その指示は出力を長くするだけで、良くはしないことがあります。
- 目標と制約を記述し、方法はモデルに選ばせます。
- 推論にどれだけ使うかは、プロンプトの言い回しではなく、提供元の制御で決めます。
- 人が答えを確認する必要があるときは、出力に短い根拠を求めます。
明示的な思考の連鎖は、内部で推論しない、より小さく高速なモデルや、推論を応答に表示したいときには、今でも有用です。
思考の連鎖が役立つ場面と役立たない場面
| タスク | 役立つか |
|---|---|
| 複数ステップの算術や論理 | はい |
| 複数のルールを適用する判断 | はい |
| デバッグ:症状から原因を見つける | はい |
| 単純な分類や抽出 | まれ。コストが増える |
| 創作 | いいえ |
| 与えられたテキストからの事実の検索 | いいえ |
コストは実際にかかります。推論は出力トークンであり、通常は入力トークンより高く課金され、遅延も増えます。
説明に関する注意
書かれた推論は、もっともらしい説明であって、答えがどう生まれたかを保証する記録ではありません。モデルは結論に達したあとで、もっともらしく聞こえる理由を書くことがあります。特に判断が人に影響する場合は、推論を検証すべきものとして扱ってください。
自己整合性
自己整合性は、2022 年に Wang らが示したもので、思考の連鎖を土台にしています。同じ推論プロンプトを、サンプリングを有効にして複数回実行し、経路が異なるようにしたうえで、最も多い最終回答を採用します。
- CoT プロンプトを N 回(例:5 回)、温度を 0 より大きくして送ります。
- 各応答から最終回答を取り出します。
- 最も多く現れた回答を返します。
異なる推論経路は異なる間違いをしますが、正しい経路は一致する傾向があります。多数決が、時折の誤りを取り除きます。
使う場面: 正解が 1 つで、完全一致で比較でき(数値、ラベル、はい・いいえ)、精度が N 倍のコストに見合うとき。
使わない場面: 回答が多数決できない自由記述のとき、または 1 回の呼び出しですでに信頼できるとき。票が均等に割れるなら、質問が曖昧か、プロンプトの指定が不足しているサインとして扱いましょう。
推論からパイプラインへ
問題の手順があらかじめ分かっているなら、1 つのプロンプトにすべてを推論させてはいけません。各ステップに専用のプロンプトを与えます。これがプロンプトチェーンです。手順がモデルの取得する情報に依存するなら、推論とツールを組み合わせます。それが ReAct プロンプティングです。
まずプロンプトを確認する
推論は、不明確な質問を直せません。目的があいまいだったり、ルールが矛盾していたりする CoT プロンプトは、丁寧に間違った答えへと推論します。推論にトークンを使う前に、PromptFlowEngine のプロンプトアナライザーにかけましょう。