プロンプトの種類

ゼロショット、ワンショット、フューショットプロンプティング

ゼロショット、ワンショット、フューショットのプロンプティングを解説。例が役立つ場面、使う数、選び方、そして逆効果になる間違いまで。

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

これらの用語の「ショット」とは例のことです。ゼロショットのプロンプトには例が 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 のプロンプトアナライザーは、フューショットのテンプレートで最もよくある間違いである、区切りのないテンプレート変数を指摘します。

実践してみる

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

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

関連する PromptFlowEngine ツール

プロンプトの種類のその他のガイド

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