これらの用語の「ショット」とは例のことです。ゼロショットのプロンプトには例が 1 つもなく、ワンショットは 1 つ、フューショットは複数あります。どれを選ぶかは、プロンプトの長さと、出力をどれだけ正確に絞り込めるかとのトレードオフです。
ゼロショットプロンプティング
ゼロショットのプロンプトは、指示と入力だけを与え、ほかには何も与えません。
Classify the support ticket as billing, bug, or feature request.
Return only the label.
<ticket>
{{ticket}}
</ticket>
最近のモデルは、このやり方で幅広いタスクをこなします。ゼロショットは最も短く、最も安く、最も保守しやすいので、適切な既定の選択です。明確な指示で望む結果が得られなかったときにだけ、例に頼りましょう。
ワンショットプロンプティング
ワンショットのプロンプトは、例を 1 つ加えます。1 つの例は、回答の形式を固定するのは得意ですが、判断を教えるのは苦手です。
Write a changelog entry for the commit below.
Example:
Commit: "fix: retry webhook delivery on 5xx"
Entry: "Fixed: webhooks are now retried when your server returns a 5xx error."
Commit: "{{commit_message}}"
Entry:
リスクは真似のしすぎです。例が 1 つだと、モデルはその長さ、書き出しの語、話題までコピーすることがあります。
フューショットプロンプティング
フューショットのプロンプトは、通常 2〜5 個の複数の例を与え、それらの共通点からモデルがパターンを推測できるようにします。
Rate the urgency of each message as low, medium, or high.
Message: "The export button is slightly misaligned." -> low
Message: "Checkout fails for all customers since 09:00." -> high
Message: "Can you add dark mode at some point?" -> low
Message: "Invoices for March show the wrong tax rate." -> medium
Message: "{{message}}" ->
フューショットが特に役立つのは次のような場合です。
- カテゴリの境界があいまいで、ルールで説明しにくい。
- 特定の文体、スタイル、詳しさが必要。
- 出力が、モデルがあまり見たことのない独自の形式を持っている。
良い例の選び方
幅を網羅する。 各ラベルやケースを少なくとも 1 回は含めます。すべての例が「high」なら、モデルは「high」に傾きます。
難しいケースを入れる。 明白なケースの例から学べることは多くありません。上の税率のメッセージのような境界上のケースが、線引きの位置を決めます。
表面を変える。 長さ、話題、言い回しを変え、例同士の共通点が、あなたが重視するパターンだけになるようにします。
形式を揃える。 すべての例で、区切り、順序、間隔を同じにします。形式が揃っていないこと自体が一つのパターンであり、モデルはそれを拾います。
実際のデータを使う。 実際の入力から取った例は、プロンプトが直面する分布に合致します。
例の数
まず 2〜3 個から始めます。テストで出力が改善する場合にだけ増やします。例は呼び出しのたびにトークンを消費するので、10 個の例を持つプロンプトを 100 万回実行すれば、請求書の明確な一項目になります。変わらない長い例の集合には、提供元のプロンプトキャッシュがそのコストを下げます。トークン最適化を参照してください。
例が逆効果になるとき
- 順序の影響。 モデルは後ろの例を重く見ることがあります。結果が最後のラベルに偏るなら、例をシャッフルします。
- ラベルの偏り。 肯定の例が 3 つで否定が 1 つだと、出力が肯定に偏ります。
- 内容の漏れ。 モデルが例の中の名前や事実を回答で再利用します。例は形式のためだけだと伝えるか、明らかなプレースホルダーの内容を使います。
- 指示と矛盾する例。 ルールが「1 文」なのに例が 2 文なら、たいてい例が勝ちます。
ゼロショットかフューショットか:判断の目安
| 状況 | 最初に選ぶもの |
|---|---|
| 一般的なタスク、明確なルール | ゼロショット |
| 出力形式が安定しない | ワンショット、またはスキーマ |
| ラベルが判断に依存する | フューショット |
| 特定の文体が必要 | フューショット |
| 推論を多く要する問題 | 推論の手法を併用したゼロショット |
厳密な形式では、例よりスキーマのほうが確実です。構造化出力のプロンプトを参照してください。推論タスクでは、答えだけの例より、推論の過程を見せるほうが効果的で、これが思考の連鎖プロンプティングの考え方です。
例と入力を分ける
例と実際の入力を別々の区切りで囲み、モデルが混同せず、ユーザーのテキストが例のふりをできないようにします。
<examples>
...
</examples>
<input>
{{message}}
</input>
PromptFlowEngine のプロンプトアナライザーは、フューショットのテンプレートで最もよくある間違いである、区切りのないテンプレート変数を指摘します。