← レッスンに戻る
第2章 · プロンプトエンジニアリング

Few-shot と Chain of Thought

Few-shot & Chain of Thought · 約 14 分

重要キーワード

English日本語説明
Few-shot フューショット 数件の例を見せて挙動を誘導する手法
Chain of Thought (CoT) 連鎖思考 考えながら答えるよう促し、推論精度を上げる手法
Extended Thinking 拡張思考 Claude 内部で長い思考を行ってから回答するモード
ReAct リアクト Reasoning + Acting。推論と行動を交互に行うエージェントパターン

Few-shot Prompting

入力と理想の出力例をいくつか並べてから本番のタスクを与えると、フォーマット・スタイルの再現性が劇的に上がります。

入力: 「営業時間は 9-17 時です」
出力: {"open": "09:00", "close": "17:00"}

入力: 「土日休み、平日 10 時から 19 時」
出力: {"open": "10:00", "close": "19:00", "closed": ["sat", "sun"]}

入力: 「24 時間営業」
出力:

数件 (3〜5) で十分なことが多く、これを few-shot と呼びます。 1 件は one-shot, 例なしは zero-shot です。

Few-shot の落とし穴

Chain of Thought (CoT, 連鎖思考)

複雑な推論を要するタスクでは、Claude に 「考えながら答える」 よう促すと正答率が上がります。

質問を解く前に、ステップバイステップで思考過程を <thinking>...</thinking> に書いてください。
最終回答だけを <answer>...</answer> に書いてください。

Extended Thinking (拡張思考) との関係

Claude Opus 4.7 / Sonnet 4.6 などには Extended Thinking モードがあり、 モデル内部で長い思考連鎖を行ってから回答します。 プロンプトで明示的に CoT を書く代わりに、API パラメータで thinking を有効化できます。

client.messages.create(
    model="claude-opus-4-7",
    max_tokens=8000,
    thinking={"type": "enabled", "budget_tokens": 4000},
    messages=[...],
)

CoT を書くべきとき / 書くべきでないとき

書くべき: - 数学・論理パズル - 多段の推論を要する分析 - バグ調査などの探索 - 複雑な分類タスク

書かなくていい: - 単純な分類・抽出 (むしろノイズになる) - レイテンシが厳しいリアルタイム応答 - 大量バッチ処理 (コスト爆増)

推論を見せる vs 見せない

ユーザーに CoT 部分を見せない 設計が一般的です。XML タグで分離してから抽出。

import re
m = re.search(r"<answer>(.*?)</answer>", text, re.DOTALL)
final = m.group(1).strip() if m else text

CoT を試す

実際に CoT 有無で答えが変わるか比べましょう。

▶ CoT 無し
りんごが 23 個あります。3 人で同じ数ずつ分け、余ったら花瓶に飾ります。一人いくつもらえますか?何個飾られますか?
▶ CoT 有り
りんごが 23 個あります。3 人で同じ数ずつ分け、余ったら花瓶に飾ります。 手順: 1. <thinking> で計算過程を段階的に書く 2. <answer> で最終回答だけを書く

演習問題

演習 1: JSON 抽出を Few-shot で安定化

営業時間の自然言語記述から JSON を抽出するプロンプトを Few-shot で 書いてください。

入力例: 「平日 10 時から 19 時、日祝休み」

期待出力: {"open": "10:00", "close": "19:00", "closed": ["sun", "holiday"]}

境界ケース (24 時間営業 / 中休みあり / 不明な記述) も含むテストを 3 件作って試してみましょう。

スタータープロンプト:
次の自然言語の営業時間を JSON に変換してください。

例 1:
入力: 「営業時間は 9-17 時です」
出力: {"open": "09:00", "close": "17:00"}

例 2:
入力: 「土日休み、平日 10 時から 19 時」
出力: {"open": "10:00", "close": "19:00", "closed": ["sat", "sun"]}

例 3:
入力: 「24 時間営業」
出力: {"24h": true}

本番:
入力: 「平日 11:00-14:00 と 17:00-22:00、月曜定休」
出力:
ヒントを見る

JSON Schema を冒頭で明示しておくと安定性がさらに上がります。temperature=0.0 を試すと再現性も向上。

演習 2: CoT で論理パズルを解かせる

次のパズルを CoT 無しCoT 有り で解かせて、正答率を比較してみましょう。

A・B・C の 3 人がいる。A は嘘つき、B は正直者、C はランダムに答える。 あなたは 3 人を区別できないが、Yes/No 質問を 1 回だけできる。 どんな質問をすれば、正直者がどれかを必ず特定できるか?

(これは古典的な難問で、CoT 無しだとモデルがしばしば誤ります)

スタータープロンプト:
次のパズルを解いてください。<thinking> の中で順を追って考え、<answer> に最終回答を書いてください。

A・B・C の 3 人がいる。A は嘘つき、B は正直者、C はランダムに答える。
あなたは 3 人を区別できないが、Yes/No 質問を 1 回だけできる。
どんな質問をすれば、正直者がどれかを必ず特定できるか?
ヒントを見る

古典的解は「自己参照を含む質問」を使うパターン。Claude が自力で解ければ立派です。CoT 有無で差が出るかが学びのポイント。

理解度チェック

  1. Few-shot prompting の説明として正しいのは?
    1. 数件の入出力例を見せる
    2. プロンプトを 1 行だけにする
    3. 学習を 5 epoch だけ行う
    4. API 呼び出しを 5 回までに抑える
  2. Chain of Thought が効果的なタスクは?
    1. 定型文の生成
    2. 数学・論理推論
    3. 短い分類
    4. 言語判定
  3. Extended Thinking とは?
    1. ユーザーが長く考える時間を取る機能
    2. モデル内部で長い思考連鎖を行うモード
    3. API のタイムアウトを延ばす機能
    4. ファイルを長く保存する機能
  4. Few-shot 例の選び方として最も望ましいのは?
    1. 全部似たケースで揃える
    2. 境界ケースも含める
    3. 10〜20 件は最低必要
    4. ランダムに集める
解答と解説を見る
  1. A — Few-shot は数件のサンプルを示して挙動を誘導する手法です。
  2. B — 推論ステップが多いタスクほど CoT が効果を発揮します。
  3. B — Extended Thinking はモデルが回答前に長い内部推論を行うモードです。
  4. B — 境界ケースを含めると頑健性が上がります。数は 3〜5 件で十分なことが多い。