手法

思考の連鎖プロンプティングと自己整合性

思考の連鎖プロンプティングは、答える前にモデルへ段階的に推論させる手法です。役立つ場面、推論モデルでは不要になる場合、そして自己整合性を解説します。

英語の原文からの翻訳です。コード、プロンプト、モデルの出力は英語のまま掲載しています。

思考の連鎖(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 らが示したもので、思考の連鎖を土台にしています。同じ推論プロンプトを、サンプリングを有効にして複数回実行し、経路が異なるようにしたうえで、最も多い最終回答を採用します。

  1. CoT プロンプトを N 回(例:5 回)、温度を 0 より大きくして送ります。
  2. 各応答から最終回答を取り出します。
  3. 最も多く現れた回答を返します。

異なる推論経路は異なる間違いをしますが、正しい経路は一致する傾向があります。多数決が、時折の誤りを取り除きます。

使う場面: 正解が 1 つで、完全一致で比較でき(数値、ラベル、はい・いいえ)、精度が N 倍のコストに見合うとき。

使わない場面: 回答が多数決できない自由記述のとき、または 1 回の呼び出しですでに信頼できるとき。票が均等に割れるなら、質問が曖昧か、プロンプトの指定が不足しているサインとして扱いましょう。

推論からパイプラインへ

問題の手順があらかじめ分かっているなら、1 つのプロンプトにすべてを推論させてはいけません。各ステップに専用のプロンプトを与えます。これがプロンプトチェーンです。手順がモデルの取得する情報に依存するなら、推論とツールを組み合わせます。それが ReAct プロンプティングです。

まずプロンプトを確認する

推論は、不明確な質問を直せません。目的があいまいだったり、ルールが矛盾していたりする CoT プロンプトは、丁寧に間違った答えへと推論します。推論にトークンを使う前に、PromptFlowEngine のプロンプトアナライザーにかけましょう。

実践してみる

プロンプトアナライザーで試す

あらゆるプロンプトから、曖昧さ、不足コンテキスト、矛盾、無駄なトークンを見つけます。 無料・決定論的で、アカウントは不要です。

関連する PromptFlowEngine ツール

手法のその他のガイド

プロンプトエンジニアリングガイドをすべて見る