AI Engineering Academy · レッスン

Zero-ShotとFew-Shotプロンプティング

モデルに直接尋ねる方法と例を提示する方法の違いを理解し、分類、抽出、生成タスクでどちらがより良い結果を生むかを学びます。

レッスン 1/413 ステップ

「Zero-ShotとFew-Shotプロンプティング」はCoddyKit上の無料AI Engineering Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Engineering Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Engineering Academyコースには全4レッスンが含まれています。

Zero-Shot Prompting とは

Zero-shot promptingとは、やり方の例を一切示さずに、モデルへタスクの実行を依頼することです。タスクを説明するだけで、モデルが事前学習で得た知識を使って処理します。翻訳、要約、単純な分類など、学習中に何度も経験したタスクで特に効果を発揮します。

たとえば、モデルにこのレビューを Positive または Negative に分類してくださいと依頼するのは zero-shot プロンプトです。モデルは事前学習中に感情分類の例を何千件も学習しているため、プロンプト内で例を示さなくてもタスクを実行できます。

シンプルな Zero-Shot の例

Zero-shot プロンプトは簡潔で、モデルに組み込まれた知識に依存します。タスクが一般的で曖昧でない場合に最も効果を発揮します。以下のプロンプトでは、正しい出力例を示さずに、タスクだけを明確に定義している点に注目してください。

import openai

client = openai.OpenAI()

prompt = 'Classify the sentiment of the following customer review.\nRespond with only one word: Positive, Negative, or Neutral.\n\nReview: The delivery was fast but the packaging was damaged.\n\nSentiment:'

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': prompt}],
    max_tokens=5
)
print(response.choices[0].message.content)  # Expected: Negative

Zero-Shot では不十分な場合

Zero-shot prompting は、タスクの形式が特殊な場合、モデルが一般的でない出力スキーマに従う必要がある場合、または実行ごとに異なる解釈をされる可能性がある形式を一貫して出力させたい場合に失敗することがあります。カスタムフィールド名を使った非常に具体的な JSON 構造でデータを抽出するよう依頼するのは、モデルが意図を正確に推測しなければならないため、zero-shot プロンプトでは危険です。

Zero-shot は、ドメイン固有の専門用語や、事前学習中に頻繁には遭遇していないニッチな分類カテゴリにも苦戦します。このような場合は、例を提示すると精度が大幅に向上します。

Few-Shot Prompting とは

Few-shot promptingとは、実際のクエリを提示する前に、タスクの例(入力と望ましい出力)を2~8件モデルに与えることです。例によって、ファインチューニングやトレーニングを行わなくても、求める正確な形式と分類体系をモデルに学習させられます。

これは、プロンプトエンジニアリングにおいて最も強力でありながら、十分に活用されていない手法の一つです。モデルは例からパターンを推測し、新しい入力に適用します。GPT-3の論文の研究では、多くのタスクで例の数を増やすほど性能が大幅に向上し、約8件まではその傾向が続くことが示されました。それ以降は効果が頭打ちになり、トークンを無駄に消費するだけです。

Few-Shotプロンプトの構成

few-shotプロンプトは、一貫したパターンに従います。まずN件の例を入力と出力のペアとして示し、その後に新しい入力を提示して、モデルに出力を補完させます。例の形式によって、期待する正確な出力形式をモデルに学習させます。

import openai

client = openai.OpenAI()

prompt = ('Extract the product name and price from each sentence.\n'
          'Respond in the format: Product: <name> | Price: <price>\n\n'
          'Sentence: The blue headphones cost $79.99.\n'
          'Product: Blue Headphones | Price: $79.99\n\n'
          'Sentence: You can get the leather wallet for just $34.\n'
          'Product: Leather Wallet | Price: $34\n\n'
          'Sentence: Order the ergonomic keyboard for $129.99 today.\n')

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': prompt}],
    max_tokens=30
)
print(response.choices[0].message.content)

適切なFew-Shotの例を選ぶ

例の品質は、数と同じくらい重要です。次の条件を満たす例を選んでください。

  • エッジケースを含む — あいまいな入力の例を含め、どのように処理してほしいかをモデルに示します
  • 出力の範囲を網羅する — 3つのクラスがある場合は、それぞれの例を少なくとも1つ含めます
  • 代表性がある — 実際の本番入力とスタイルや複雑さが近い例を使います
  • 形式が一貫している — 例の形式に一貫性がないと、そのままモデルの出力にも反映されます

不適切な例を選ぶと、タスクの分布についてモデルに誤った認識を与え、かえって性能を低下させることがあります。

Zero-ShotとFew-Shot:使い分けの基準

zero-shotは、タスクが一般的で明確な場合、トークンコストを最小限に抑えたい場合、または例をまだ集めにくく迅速に試行錯誤したい場合に使います。例によってモデルの一般知識を制限したくない場合にも、zero-shotが適しています。

few-shotは、出力形式が特殊または厳密な場合、ドメイン固有のカテゴリがある場合、zero-shotで形式が一貫しない場合、または特定のスタイルやトーンを一貫して守らせたい場合に使います。few-shotは特に、抽出、分類、形式制約付きの生成で効果を発揮します。

分類タスクでのFew-Shot

分類は、few-shot promptingの中でも特に価値の高い用途の一つです。一般的なカテゴリには対応しない独自のラベルを使う場合、例を与えることでモデルに分類体系を学習させられます。以下の例では、サポートチケットにおけるBug、Feature Request、Questionの意味を正確に定義しています。

import openai

client = openai.OpenAI()

prompt = ('Classify the support ticket into: Bug, Feature Request, or Question.\n\n'
          'Ticket: The login button does nothing when I click it.\n'
          'Category: Bug\n\n'
          'Ticket: Can you add dark mode to the dashboard?\n'
          'Category: Feature Request\n\n'
          'Ticket: How do I export my data to CSV?\n'
          'Category: Question\n\n'
          'Ticket: The export button crashes the app every time.\n'
          'Category:')

response = client.chat.completions.create(
    model='gpt-4o-mini',
    messages=[{'role': 'user', 'content': prompt}],
    max_tokens=10
)
print(response.choices[0].message.content)  # Bug

One-Shot Prompting

zero-shotとfew-shotの中間に位置するのが、例をちょうど1件与えるone-shot promptingです。これは、形式の問題を解消したり、あいまいなタスクを明確にしたりするのに十分なことが多く、完全なfew-shotプロンプトよりもはるかに少ないトークンで済みます。zero-shotで信頼性の低い結果が出た場合、one-shotは最初に試す改善策として適しています。

実際には、まずzero-shotから始め、実際の入力のサンプルで評価し、モデルが失敗する箇所にだけ例を追加します。これにより、プロンプトを簡潔かつトークン効率の高い状態に保ちながら、最も効果のある部分を狙って改善できます。

Dynamic Few-Shot Selection

本番システムでは、すべてのクエリに同じ少数の例をハードコードする方法は最適ではありません。Dynamic few-shot selectionでは、ラベル付きの例の集合から、埋め込みの類似度を使って現在の入力に最も近い例を取得し、それらの例だけをプロンプトに挿入します。

これにより、入力のスタイルやドメインに合わない一般的な例ではなく、常にその入力に最も関連するデモンストレーションをモデルに提示できます。この手法は、few-shot promptingの利点と検索システムのスケーラビリティを組み合わせたもので、example-based retrieval-augmented promptingと呼ばれることもあります。

Few-Shotプロンプトにおける形式制約

few-shot promptingは、構造化出力やJSONモードを利用できるようになる前に、厳密な出力形式を適用する最も信頼性の高い方法です。フィールド名、区切り文字、順序など、期待する形式を正確に示すことで、解析可能な出力を得られる可能性が大幅に高まります。

few-shotプロンプトは、期待する出力パターンの冒頭で必ず終えてください(例:JSONオブジェクトの開始中括弧や最初のフィールド名)。こうすると、モデルは先にタスクを要約したりコメントしたりするのではなく、そのパターンを続けるよう促されます。

クイックチェック

このレッスンで学んだAI Engineeringの概念を確認しましょう。

レッスンのまとめ

このレッスンでは、zero-shot promptingは説明だけをもとにモデルへタスクを実行させること、few-shot promptingは形式と分類体系を教えるために2~8件の入力と出力の例を与えること、そしてdynamic few-shot selectionは埋め込みの類似度を使ってクエリごとに最も関連性の高い例を取得することを学びました。次は、複雑な推論タスクのためのchain-of-thought promptingについて学びます。

無料で開始

AI チューターと学ぶ Python — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「Zero-ShotとFew-Shotプロンプティング」レッスンは無料ですか?

はい。「Zero-ShotとFew-Shotプロンプティング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Engineering Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Engineering Academyコースには全4レッスンが含まれています。

「Zero-ShotとFew-Shotプロンプティング」で何を学びますか?

モデルに直接尋ねる方法と例を提示する方法の違いを理解し、分類、抽出、生成タスクでどちらがより良い結果を生むかを学びます。 ブラウザで直接実行するハンズオンコードでAI Engineering Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Engineering Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Engineering Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「Zero-ShotとFew-Shotプロンプティング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Engineering Academyレッスンでコードを書いて実行できますか?

はい。すべてのAI Engineering Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Zero-ShotとFew-Shotプロンプティング
  2. Chain-of-Thoughtとステップごとの推論
  3. システムプロンプトとペルソナの定義
  4. プロンプトの反復とデバッグ
← AI Engineering Academyに戻る