Few-shotプロンプトの設計|例の選び方・件数・順序と、効かなくなる場面


「例を2つ貼ったら急に精度が上がった」「例を1つ増やしたらむしろ悪くなった」。Few-shot(少数事例)プロンプトは、効くときの効き方が分かりやすい反面、なぜ効いたのか・なぜ効かなくなったのかが説明しづらい手法でもあります。この記事では、例をどう選び、何件、どの順序で並べるのか、そしてどんな場面で例示が効かなくなるのかを、公式ガイドと原典論文にあたりながら実務用に整理します。
zero-shot / one-shot / few-shotの区別
用語の出どころは、GPT-3を発表したBrownらの論文「Language Models are Few-Shot Learners」(arXiv:2005.14165、2020年5月投稿)です。同論文は、重みを更新せずにプロンプト内の実演(demonstration)だけでタスクを伝える設定を、実演の数によってzero-shot・one-shot・few-shotの3つに区別しています。ただし論文が定義しているのは評価上の条件までで、それぞれの用途までは述べていません。論文の定義に、実務での使いどころを筆者が補って整理すると次のようになります。
| 設定 | プロンプトに入れる実演の数(論文の定義) | 典型的な使いどころ(筆者の整理) |
|---|---|---|
| zero-shot | 0件(指示のみ) | 指示だけで十分に伝わる一般的なタスク |
| one-shot | 1件 | 出力形式だけを示したいとき |
| few-shot | 数件〜多数 | 形式・粒度・判断基準をまとめて伝えたいとき |
論文中では、few-shotの実演数Kについて「典型的には10から100の範囲に設定する。これはモデルのコンテキストウィンドウ(nctx = 2048)に収まる件数だから」と述べられています。当時の制約を前提にした数字であり、コンテキスト長が桁違いに伸びた現在にそのまま持ち込む数値ではありません。ここで押さえておきたいのは、few-shotが「学習」ではなく「推論時に文脈で条件づける」手法だという点です。重みは変わらないので、例を外せば効果も消えます。
メモ
あわせて読みたい
プロンプト設計の基本|役割・制約・出力形式・例示の4要素で安定させる
例示が効く仕事と、効きにくい仕事
例示が効くかどうかは、タスクの性質でおおよそ見当がつきます。
効きやすいのは、出力の形が決まっていて、言葉で説明するより見せたほうが速いタイプの仕事です。
- 分類・ラベル付け(問い合わせのカテゴリ分け、優先度判定)
- 定型フォーマットへの変換(議事録メモから決定事項テーブルへ)
- 文体・トーンの再現(既存のリリース文と同じ温度感で書く)
- 抽出タスク(契約書から項目を抜き出して同じキー名で返す)
効きにくいのは、次のようなタスクです。
- 入力ごとに求められる推論の筋道が違う問題(例をなぞると、逆に当てはまらない型に引きずられます)
- 正解が事実知識に依存する問い(例を見せても、モデルが知らない事実は埋まりません)
- 出力が長く一点ものの文章(長文の例を数件入れるとコストが跳ね上がる割に、形式以外の再現度は上がりにくい)
Anthropicの現行のプロンプト設計ガイドは、例について「Claudeの出力形式・トーン・構造を導く最も信頼できる方法のひとつ」と位置づけています。逆に言えば、形式・トーン・構造が争点でないタスクでは、例示の投資対効果は下がります。
例の選び方:典型例だけでなく境界を見せる
Minらの研究「Rethinking the Role of Demonstrations」(arXiv:2202.12837、2022年2月投稿)は、in-context learningで何が効いているのかを調べたものです。同論文は、分類および多肢選択タスクにおいて、実演のラベルをランダムなものに置き換えても性能がほとんど落ちなかったと報告し、性能を駆動しているのは(1)ラベル空間、(2)入力テキストの分布、(3)全体のフォーマットを示していることだと述べています。
注意
この観点に立つと、例の選び方の指針が定まります。
- 1
実際の入力に似た例を使う
きれいに整形した架空の入力ではなく、現場で実際に来る文面(誤字・省略・全角半角の混在を含む)を使います。入力の分布を見せることが例の仕事のひとつだからです。 - 2
ラベル空間を網羅する
分類なら、使うカテゴリが少なくとも一度ずつ登場するようにします。例に出てこないカテゴリは、モデルにとって存在しないのと同じになりがちです。カテゴリ数が多くて全件は載せきれない場合は、指示側にカテゴリ一覧を明示して補います。 - 3
迷いやすい境界のケースを混ぜる
典型例ばかり並べると、典型からずれた入力で判断が乱れます。「これは苦情ではなく仕様の質問として分類する」のように、人間でも迷う例を1〜2件入れると境界が伝わります。 - 4
入出力の形式を全例でそろえる
キー名・順序・区切り・空欄の書き方(「不明」なのか空文字なのか)を全例で統一します。Googleのプロンプト設計ガイドも、望ましくない形式を避けるために少数事例の構造とフォーマットを統一するよう求めています。 - 5
指示と例を矛盾させない
OpenAIのガイドは、例を入れる場合は「例が指示と非常に近く整合していること」を求め、両者の食い違いは悪い結果につながると注意しています。指示を直したら例も直す、をセットにします。
Anthropicのガイドは、良い例の条件として「関連性がある(実際のユースケースを忠実に写す)」「多様である(エッジケースを含み、意図しないパターンを拾わせない)」「構造化されている(<example>タグで囲み、指示と区別できるようにする)」の3点を挙げています。多様であることがわざわざ条件に挙がっているのは、似た例ばかり並べるとモデルが本来関係のない共通点(たとえば例がすべて短文である、すべて同じ書き出しである)を規則として学んでしまうためです。
以下のタグ内が分類の例です。入力の形式と、判定の境界を参考にしてください。
<examples>
<example>
<input>領収書の再発行をお願いできますか。先月分です。</input>
<output>{"category":"手続き依頼","priority":"中","reason":"再発行の依頼"}</output>
</example>
<example>
<input>ログインできません!!! 昨日から3回目です。いい加減にしてほしい</input>
<output>{"category":"障害報告","priority":"高","reason":"継続する不具合と強い不満"}</output>
</example>
<example>
<input>プランAとBって、同時に契約できるんでしたっけ</input>
<output>{"category":"仕様の質問","priority":"低","reason":"苦情ではなく仕様確認"}</output>
</example>
<example>
<input>先日の件、その後どうなっていますか。よろしくお願いします</input>
<output>{"category":"その他","priority":"低","reason":"対象を特定できる情報がない"}</output>
</example>
</examples>
上記と同じJSON形式で、次の入力を分類してください。
カテゴリは 手続き依頼 / 障害報告 / 仕様の質問 / その他 の4つから選びます。
判断材料がない場合は category を "その他" とし、reason に不足している情報を書いてください。
3件目のように「苦情に見えるが仕様の質問」という境界例を入れておくと、感情的な語尾に引きずられた誤分類が減らせます。4件目は、判断材料が足りない入力をその他に寄せる例です。使うカテゴリを一度ずつ登場させたうえで、カテゴリ一覧を指示側にも書いておくと、例と指示の両方から選択肢の範囲が伝わります。
何件並べるか:コストと相談して決める
件数について、公開されている公式ガイドの記述はおおむね次のとおりです。
- Anthropic: 最良の結果を得るには3〜5件の例を含めることを推奨(Claudeに例の関連性と多様性を評価させたり、追加の例を生成させたりする使い方も挙げています)
- Google(Gemini API): 少数事例は常に入れることを推奨する一方、「例を入れすぎるとモデルが例に過剰適合することがある」と注意。最適な件数は実験して決めるよう促しています
- OpenAI(推論モデル向けの推奨): まずは例なしのプロンプトを書いてみることを推奨。複雑な出力要件がある場合に例を足す
まとめると、出発点は3〜5件、上限は「増やしても評価スコアが伸びなくなるところ」です。件数を増やすときは、次のコストが同時に増えることを前提に判断します。
- 入力トークン: 例はリクエストのたびに毎回送られます。1件500トークンの例を5件入れれば、全リクエストに2500トークンが固定で乗ります
- レイテンシ: 入力が長くなるほど最初のトークンが返るまでの時間が延びます。対話UIでは体感差が出ます
- 過剰適合: Googleのガイドが挙げるとおり、例に寄りすぎて、例と少し違う入力への一般化が落ちることがあります
一方で、例は「毎回同じ内容が先頭付近に置かれる」という性質を持つため、プロンプトキャッシュとの相性は良い部類です。システム指示と例をプロンプトの前方に固定し、可変の入力を末尾に置く構成にすれば、キャッシュが効く条件を満たしやすくなります。ただしキャッシュの仕様・最小トークン数・課金は提供各社で異なるため、必ず自社が使うAPIの現行仕様を確認してください。
あわせて読みたい
プロンプトキャッシュ(Prompt Caching)とは|LLM APIのコストとレイテンシを下げる仕組みと実務
順序とラベル分布という落とし穴
順序の影響を正面から検証したのが、Luらの「Fantastically Ordered Prompts and Where to Find Them」(arXiv:2104.08786、2021年4月投稿)です。同論文は、例を並べる順序の違いだけで、最先端に近い性能とほぼ当てずっぽうの性能の間で結果が変わりうることを示しました。さらに、この現象がモデルサイズを問わず現れること、特定の例の集合に起因するものではないこと、あるモデルにとって良かった並び順が別のモデルには転用できないことを報告しています。同論文は対策として、モデル自身の生成で人工的な検証セットを作り、順列候補のエントロピー統計から良いプロンプトを選ぶ手法を提案し、GPT系モデルにおいて11のテキスト分類タスクで13%の相対的改善を得たとしています。
これに先行するZhaoらの研究「Calibrate Before Use」(arXiv:2102.09690、2021年2月投稿)も、プロンプトの形式・使う例・例の順序によって精度がほぼ当てずっぽうから最先端近くまで振れうると報告しています。同論文は、この不安定さの原因として3つの偏りを挙げています。
- 多数ラベルバイアス: プロンプト内に多く出てくるラベルを答えたがる。分類の例が正例に偏っていれば、正例と答えがちになる
- 直近バイアス: プロンプトの末尾近くに置かれたラベルを答えたがる。例の件数が均等でも、最後の2件が同じラベルなら、そのラベルに寄る
- 共通トークンバイアス: 事前学習データに頻出する語を答えとして選びやすい
これらの検証は2021年から2022年の論文で、対象は当時のGPT系モデルと分類系タスクが中心です。現行のモデルで同じ大きさの揺らぎが出るとは限りません。ただし「例の並べ方とラベルの偏りは結果に影響しうる変数である」という設計上の含意は、いまも点検の価値があります。
実務での対処は、原因を知っていればさほど難しくありません。
順序・分布まわりの点検
- ラベルの件数を例の中でおおむね均等にした(意図的に偏らせていない)
- 最後の1〜2件が同じラベルで終わっていないか確認した
- 並び順を2〜3通り試して、スコアが大きく動かないか見た
- 例を1件も見せていないカテゴリがないか確認した
- モデルを変えたときに、同じ並び順のまま使い回していないか確認した
とくに最後の項目は見落とされがちです。Luらの論文が示すとおり、良い並び順はモデル間で転用できるとは限りません。モデル移行のときには、プロンプト本文だけでなく例の構成も再検証の対象に入れてください。
あわせて読みたい
プロンプトのバージョン管理と本番運用|コードに置くか、レジストリに置くかの判断
推論モデルと長文コンテキストでは、例を減らす判断もある
few-shotは常に足し算で効くわけではありません。使うモデルによっては、むしろ「まず引いてみる」ほうが合う場面があります。
OpenAIの推論モデル向けのベストプラクティスは、「推論モデルは良い結果を出すのに少数事例を必要としないことが多いので、まずは例のないプロンプトを書いてみてください」と述べています。そのうえで、出力に対する要件が複雑な場合には入出力の例を入れるとよいこと、その際は例と指示が食い違わないようにすることを条件として挙げています。なお、この「まず例なしで」という順序を明記しているのはOpenAIの推論モデル向けガイドで、GoogleのGemini APIガイドは少数事例を常に入れることを、Anthropicのガイドは3〜5件を含めることを勧めています。どのガイドに従うかは、使うモデルに合わせて判断してください。
減らす判断が向く場面を整理すると、次のようになります。
- 推論モデルを使っていて、出力形式が単純(自由文、あるいはスキーマ指定で足りる)
- 構造化出力の機能でJSONスキーマを強制できる。形式を教えるための例が不要になる
- 例が長大で、コストとレイテンシが実用上の問題になっている
- 例に引きずられた画一的な出力が問題になっている(文章生成でよく起きます)
逆に、推論モデルであっても例を残したほうがよいのは、言葉で書き切れない判断基準がある場合です。「どこまでを軽微な不具合とみなすか」のような社内固有の線引きは、定義文を長々と書くより境界例を2〜3件見せたほうが伝わります。
ヒント
あわせて読みたい
構造化出力(Structured Outputs)とは何か|LLMの返答をプログラムで安全に扱うための仕組み
なお、思考の道筋を例で見せるfew-shot CoTは、いまも有効な場面がありますが、推論が組み込まれたモデルでは扱いが変わります。Anthropicのガイドは、少数事例の中で<thinking>タグを使って推論の型を見せるとそのスタイルが拡張思考にも一般化する、という使い方を挙げています。詳しくは以下の記事で整理しています。
あわせて読みたい
Chain-of-Thought(思考の連鎖)とは|CoTプロンプトの基本と推論モデル時代の使いどころ
例を変えたら測る:小さな評価セットの作り方
ここまでの論点は、すべて「試して測る」ことでしか決着しません。few-shotは変更のコストが低い(テキストを差し替えるだけ)ぶん、感触だけで良し悪しを判断してしまいやすい領域です。20〜50件程度の小さな評価セットがあれば、判断の質は大きく変わります。
- 1
実データから30件前後を抜く
本番の入力ログや過去の問い合わせから抜きます。典型例を7割、境界・例外を3割ほどの配分にすると、変更の副作用に気づきやすくなります。 - 2
期待出力を人手で決める
分類ならラベル、抽出ならキーと値を、担当者が確定させます。判断が割れたケースは、割れた理由をメモに残します(そのメモがそのままプロンプトの制約文の材料になります)。 - 3
評価セットとプロンプトの例を分ける
評価セットに使った入力を、そのままfew-shotの例に流用しないでください。自分が答えを教えた問題で採点していることになり、スコアが実力より高く出ます。 - 4
1回の変更で1つの要素だけ動かす
件数を増やすのと順序を変えるのを同時にやると、どちらが効いたか分かりません。「例を3件から5件へ」「並び順をA案からB案へ」を別々に測ります。 - 5
同じ条件で複数回まわす
温度が0でない設定では出力は毎回同じにはなりません。1回の結果で判断せず、3回程度まわして安定性も見ます。 - 6
スコアをプロンプトのバージョンに紐づけて記録する
「いつのプロンプトで、どの例構成で、どのモデルで、いくつだったか」を残します。ここが抜けると、半年後に同じ検証をやり直すことになります。
指標は、分類なら正解率と、業務上とくに避けたい誤りの発生率(たとえば「障害報告を仕様の質問と誤る率」)の2本立てにすると、実務判断に使えます。全体の正解率が上がっても、致命的な誤りが増えているなら採用できません。評価の設計そのものは、以下の記事で詳しく扱っています。
あわせて読みたい
LLMアプリの評価(eval)の作り方|「動いた気がする」で止めないための実務手順
よくある質問
例は何件が正解ですか
例の順序は本当に結果を変えますか
例のラベルは正確でなくてもよいと聞きました
例を入れるとコストはどれくらい増えますか
推論モデルでもfew-shotは使うべきですか
例をチームで共有するときの注意点はありますか
まとめ
Few-shotプロンプトは、書き足すのが簡単なぶん、設計せずに増やしてしまいがちな要素です。押さえるべき点はそれほど多くありません。
Few-shot設計のチェックリスト
- 例が伝えているのは知識ではなく、形式・ラベル空間・入力の分布だと理解している
- 実際の入力に似た例を使い、境界のケースを1〜2件混ぜた
- 入出力の形式を全例でそろえ、指示と例に矛盾がない
- 3〜5件から始め、評価スコアが伸びなくなる点を上限にした
- ラベルの偏りと、末尾の並びを点検した
- 推論モデルではまず例なしを試し、必要な分だけ足した
- 小さな評価セットで、変更を1つずつ測って記録した
例示は、言葉で説明しにくい基準を短く伝えられる、コストパフォーマンスの良い手段です。同時に、順序や偏りといった目に見えにくい変数を持ち込む手段でもあります。増やす方向だけでなく、減らす・差し替えるという選択肢を常に手元に置いて、測りながら調整していってください。プロンプト全体をどう組み立てるかについては、コンテキスト設計の観点もあわせて参考になります。
あわせて読みたい
コンテキストエンジニアリングとは|プロンプトの次に来る設計の基本
出典・参考
- Language Models are Few-Shot Learners (Brown et al., 2020, arXiv:2005.14165)
- Fantastically Ordered Prompts and Where to Find Them (Lu et al., 2021, arXiv:2104.08786)
- Calibrate Before Use: Improving Few-Shot Performance of Language Models (Zhao et al., 2021, arXiv:2102.09690)
- Rethinking the Role of Demonstrations: What Makes In-Context Learning Work? (Min et al., 2022, arXiv:2202.12837)
- Prompting best practices - Claude Docs
- Prompt design strategies - Gemini API
- Reasoning best practices - OpenAI API
関連する記事
プロンプト設計の基本|役割・制約・出力形式・例示の4要素で安定させる
業務でLLMの出力を安定させるためのプロンプト設計を解説します。役割・制約・出力形式・例示という4要素の組み立て方、書き直しの手順、テンプレート化して共有するまでの実務をまとめます。
LLMアプリの評価(eval)の作り方|「動いた気がする」で止めないための実務手順
LLMアプリの品質を測る評価(eval)の作り方を、実務目線で整理します。実運用に似せた評価データの用意、タスク型に応じた指標設計、自動評価と人手レビューの併用、LLM-as-a-judgeの使いどころと落とし穴、失敗トレースをテストへ戻す継続的な評価まで、小さく始める手順にまとめました。
Chain-of-Thought(思考の連鎖)とは|CoTプロンプトの基本と推論モデル時代の使いどころ
最終回答だけでなく途中の推論ステップを言語化させるChain-of-Thought(CoT)プロンプトを、原典の主張・実務での効果と限界・推論モデル時代の使い分けまで整理します。few-shot/zero-shot CoTやself-consistencyの違い、向かない場面も冷静に切り分けます。


