Few-shot learningは、最も強力なプロンプティング技術の一つです。欲しい結果の例を提示することで、ファインチューニングなしでモデルに複雑なタスクを教えることができます。

<Callout type="info" title="例から学ぶ">
人間が例を見て学ぶように、AIモデルもプロンプトで提供された例からパターンを学習することができます。
</Callout>

## Few-Shot Learningとは？

Few-shot learningは、タスクを実行させる前に、入力と出力のペアの例をモデルに示す手法です。モデルは提供された例からパターンを学習し、新しい入力に適用します。

<Compare 
  before={{ 
    label: "Zero-Shot（例なし）", 
    content: `このレビューを肯定的か否定的かに分類してください：

「バッテリーは長持ちしますが、画面が暗すぎます。」

→ モデルはエッジケースで一貫性を欠く可能性があります` 
  }}
  after={{ 
    label: "Few-Shot（例あり）", 
    content: `「最高です！」→ 肯定的
「品質がひどい」→ 否定的  
「良いけど高い」→ 混合

次を分類してください：
「バッテリーは長持ちしますが、画面が暗すぎます。」

→ モデルはあなたの正確なカテゴリを学習します` 
  }}
/>

<div className="my-4 grid grid-cols-2 md:grid-cols-4 gap-2">
  <div className="p-3 bg-muted/50 rounded-lg text-center">
    <div className="text-2xl font-bold">0</div>
    <div className="text-xs text-muted-foreground">Zero-shot</div>
  </div>
  <div className="p-3 bg-muted/50 rounded-lg text-center">
    <div className="text-2xl font-bold">1</div>
    <div className="text-xs text-muted-foreground">One-shot</div>
  </div>
  <div className="p-3 bg-primary/10 rounded-lg text-center border-2 border-primary">
    <div className="text-2xl font-bold">2-5</div>
    <div className="text-xs text-muted-foreground">Few-shot</div>
  </div>
  <div className="p-3 bg-muted/50 rounded-lg text-center">
    <div className="text-2xl font-bold">5+</div>
    <div className="text-xs text-muted-foreground">Many-shot</div>
  </div>
</div>

## 例が効果的な理由

<FewShotDemo />

例は以下を伝えます：
- **フォーマット**：出力の構造
- **スタイル**：トーン、長さ、語彙
- **ロジック**：従うべき推論パターン
- **エッジケース**：特殊な状況の処理方法

## 基本的なFew-Shotパターン

Few-shotプロンプティングの基本構造はシンプルなパターンに従います：例を示してから、新しいタスクを依頼します。例の間でフォーマットを一貫させることが重要です。モデルはあなたが確立したパターンから学習します。

```
[例 1]
入力: [入力 1]
出力: [出力 1]

[例 2]
入力: [入力 2]
出力: [出力 2]

[例 3]
入力: [入力 3]
出力: [出力 3]

次を実行してください：
入力: [新しい入力]
出力:
```

## 分類のためのFew-Shot

分類はFew-shot learningの最も強力なユースケースの一つです。各カテゴリの例を示すことで、指示だけでは達成できないほど正確にクラス間の境界を定義できます。

### 感情分析

<Callout type="info" title="感情分析とは？">
感情分析は、テキストを感情的なトーンによって分類します：肯定的、否定的、中立的、または混合。顧客フィードバック、ソーシャルメディアモニタリング、ブランド認知追跡などで広く使用されています。
</Callout>

感情分類は、各感情タイプの例を示すことで効果が上がります。特に「混合」感情のような曖昧なエッジケースに有効です。

<TryIt compact prompt={`これらの顧客レビューの感情を分類してください。

レビュー: 「この製品は期待をはるかに超えました！また買います。」
感情: 肯定的

レビュー: 「壊れた状態で届き、カスタマーサービスも役に立ちませんでした。」
感情: 否定的

レビュー: 「普通に動きます。特別なことはありませんが、役目は果たします。」
感情: 中立的

レビュー: 「品質は素晴らしいですが、配送に時間がかかりすぎました。」
感情: 混合

次を分類してください：
レビュー: 「デザインは気に入っていますが、バッテリー寿命が残念です。」
感情:`} />

### トピック分類

マルチクラス分類では、各カテゴリに少なくとも1つの例を含めてください。これにより、モデルのデフォルトの理解とは異なる可能性のある、あなた特有の分類体系を理解させることができます。

<TryIt compact prompt={`これらのサポートチケットを分類してください。

チケット: 「アカウントにログインできません。パスワードリセットも機能しません」
カテゴリ: 認証

チケット: 「プレミアムプランへのアップグレード方法を教えてください」
カテゴリ: 請求

チケット: 「データをエクスポートしようとするとアプリがクラッシュします」
カテゴリ: バグ報告

チケット: 「モバイルアプリにダークモードを追加できますか？」
カテゴリ: 機能リクエスト

次を分類してください：
チケット: 「支払いが拒否されましたが、カードには請求が表示されています」
カテゴリ:`} />

## 変換のためのFew-Shot

変換タスクは、意味を保持しながら入力を別の形式に変換します。例はここで不可欠です。なぜなら、あなたのユースケースにおいて「変換」が何を意味するかを正確に定義するからです。

### テキストの書き換え

スタイル変換には、希望するトーンの変化を正確に示す例が必要です。「プロフェッショナルにする」のような抽象的な指示は、異なる解釈をされます。例があれば具体的になります。

<TryIt compact prompt={`これらの文をプロフェッショナルなトーンに書き換えてください。

カジュアル: 「ねえ、私のメール届いたか確認したかっただけなんだけど？」
プロフェッショナル: 「先日お送りしたメールについて、確認のためご連絡させていただきました。」

カジュアル: 「これ超重要で、今すぐやらなきゃいけないんだ！」
プロフェッショナル: 「この件は緊急の対応が必要であり、迅速な処置をお願いいたします。」

カジュアル: 「返信遅れてごめん、忙しすぎて！」
プロフェッショナル: 「ご返信が遅れまして申し訳ございません。多忙を極めておりました。」

次を書き換えてください：
カジュアル: 「ミーティング行けない、ちょっと用事ができた。」
プロフェッショナル:`} />

### フォーマット変換

フォーマット変換タスクは、エッジケースや曖昧な入力を示す例があると効果的です。モデルは、扱いにくいケースに対するあなた特有の規則を学習します。

<TryIt compact prompt={`これらの自然言語の日付をISO形式に変換してください。

入力: 「来週の火曜日」
出力: 2024-01-16（今日が2024-01-11木曜日の場合）

入力: 「明後日」
出力: 2024-01-13

入力: 「今月末」
出力: 2024-01-31

入力: 「2週間後」
出力: 2024-01-25

次を変換してください：
入力: 「来月の最初の月曜日」
出力:`} />

## 生成のためのFew-Shot

生成タスクは、学習したパターンに従って新しいコンテンツを作成します。例は、長さ、構造、トーン、強調すべき詳細を確立します。これらは指示だけでは指定しにくいものです。

### 製品説明

マーケティングコピーは、例があると非常に効果的です。なぜなら、抽象的に説明することが難しいブランドボイス、機能の強調、説得テクニックを捉えることができるからです。

<TryIt compact prompt={`このスタイルで製品説明を書いてください：

製品: ワイヤレスBluetoothヘッドフォン
説明: クリスタルクリアなサウンドに包まれる、軽量ワイヤレスヘッドフォン。40時間のバッテリー寿命、アクティブノイズキャンセリング、そしてふかふかのメモリーフォームイヤークッションで、一日中快適に過ごせます。

製品: ステンレス製ウォーターボトル
説明: スタイリッシュに水分補給。二重壁断熱構造のボトルは、冷たいドリンクを24時間、温かいドリンクを12時間キープ。漏れ防止の蓋と標準的なカップホルダーに収まるサイズが特徴です。

製品: エルゴノミックオフィスチェア
説明: 調節可能なエルゴノミックチェアでワークスペースを変革。通気性のあるメッシュバック、ランバーサポート、360°スイベルの組み合わせで、長時間の作業でも快適に過ごせます。

次を書いてください：
製品: ポータブル電話充電器
説明:`} />

### コードドキュメンテーション

<Callout type="info" title="なぜコードをドキュメント化するのか？">
良いドキュメンテーションは、コードが何をするか、パラメータ、戻り値、使用例を説明します。一貫したdocstringにより、自動生成されるAPIドキュメントが可能になり、IDEがより良いコード補完を提供できるようになります。
</Callout>

ドキュメンテーションのスタイルはプロジェクトによって大きく異なります。例は、あなた特有のフォーマット、含めるべき内容（引数、戻り値、例）、期待される詳細レベルを教えます。

<TryIt compact prompt={`これらの関数のドキュメンテーションコメントを書いてください：

関数:
def calculate_bmi(weight_kg, height_m):
    return weight_kg / (height_m ** 2)

ドキュメンテーション:
"""
体重と身長からBMI（ボディマス指数）を計算します。

Args:
    weight_kg (float): 体重（キログラム）
    height_m (float): 身長（メートル）

Returns:
    float: BMI値（体重/身長²）

Example:
    >>> calculate_bmi(70, 1.75)
    22.86
"""

次をドキュメント化してください：
関数:
def is_palindrome(text):
    cleaned = ''.join(c.lower() for c in text if c.isalnum())
    return cleaned == cleaned[::-1]

ドキュメンテーション:`} />

## 抽出のためのFew-Shot

抽出タスクは、非構造化テキストから構造化された情報を取り出します。例は、どのエンティティが重要か、出力のフォーマット方法、情報が欠落または曖昧な場合の処理方法を定義します。

### エンティティ抽出

<Callout type="info" title="固有表現認識とは？">
固有表現認識（NER）は、テキスト内の固有表現を識別し、人物、組織、場所、日付、製品などのカテゴリに分類します。情報検索や知識グラフの構築に不可欠な技術です。
</Callout>

NERは、あなた特有のエンティティタイプと、複数のカテゴリに該当しうるエンティティの処理方法を示す例があると効果的です。

<TryIt compact prompt={`これらの文から固有表現を抽出してください。

テキスト: 「AppleのCEOティム・クックがクパチーノでiPhone 15を発表しました。」
エンティティ:
- 企業: Apple
- 人物: ティム・クック
- 製品: iPhone 15
- 場所: クパチーノ

テキスト: 「欧州連合は2018年にGoogleに43.4億ユーロの罰金を科しました。」
エンティティ:
- 組織: 欧州連合
- 企業: Google
- 金額: 43.4億ユーロ
- 日付: 2018

次から抽出してください：
テキスト: 「イーロン・マスクのSpaceXが12月3日にケープカナベラルから23基のStarlink衛星を打ち上げました。」
エンティティ:`} />

### 構造化データ抽出

自然言語から構造化データを抽出するには、欠落フィールド、暗黙の情報、さまざまな入力形式の処理方法を示す例が必要です。

<TryIt compact prompt={`ミーティングの詳細を構造化フォーマットで抽出してください。

メール: 「明日午後3時に会議室Bで会って、第4四半期の予算について話し合いましょう。ノートパソコンを持ってきてください。」

ミーティング:
- 日付: [明日の日付]
- 時間: 午後3時
- 場所: 会議室B
- トピック: 第4四半期の予算討議
- 必要なもの: ノートパソコン持参

メール: 「チームの同期会議は金曜日の午前10時に変更になりました。代わりにZoomを使います。リンクはカレンダー招待にあります。最大30分です。」

ミーティング:
- 日付: 金曜日
- 時間: 午前10時
- 場所: Zoom（バーチャル）
- トピック: チーム同期
- 所要時間: 30分

次から抽出してください：
メール: 「月曜日の朝9時半頃にクライアントプレゼンについて簡単に通話できますか？Teamsのリンクを送ります。」

ミーティング:`} />

## 高度なFew-Shot技術

基本的なFew-shot以外にも、複雑なタスクの結果を改善できる技術がいくつかあります。

### 多様な例

例の多様性は量よりも価値があります。同じような例を繰り返し示すのではなく、異なるシナリオ、エッジケース、潜在的な曖昧さをカバーしてください。

<TryIt compact prompt={`顧客の苦情に対応してください。

例1（製品の問題）:
顧客: 「注文した商品が破損して届きました。」
対応: 「破損した商品をお届けしてしまい、誠に申し訳ございません。直ちに無料で交換品をお送りいたします。破損した商品はご返送いただく必要はございません。配送先住所を確認させていただけますでしょうか？」

例2（サービスの問題）:
顧客: 「2時間も保留にされています！」
対応: 「長時間お待たせしてしまい、大変申し訳ございません。これは許容できることではありません。ただいまから私が責任を持って問題を解決させていただきます。どのようなご用件でしょうか？」

例3（請求の問題）:
顧客: 「同じ注文に対して二重に請求されています！」
対応: 「この請求ミスについてお詫び申し上げます。二重請求を確認し、XX.XXドルの返金処理を開始いたしました。3〜5営業日以内に元のお支払い方法に反映されます。」

次に対応してください：
顧客: 「製品がウェブサイトに表示されていたものと違います。」
対応:`} />

### 否定的な例

<Callout type="tip" title="対照学習">
「良い」例と「悪い」例を示すことを対照学習と呼びます。これにより、モデルは何が望まれているかだけでなく、何を避けるべきかを理解できます。スタイルや品質の判断に特に有効です。
</Callout>

何を*しない*かを示すことは、正しい例を示すのと同じくらい価値があることがあります。否定的な例は、モデルが境界を理解し、よくある間違いを避けるのに役立ちます。

<TryIt compact prompt={`簡潔なメールの件名を書いてください。

良い: 「Q3レポート レビューのご依頼」
悪い: 「ねえ、前に話してた例のレポートできたよ」

良い: 「要対応：金曜日までに休暇申請の承認をお願いします」
悪い: 「お願いがあるので読んでください」

良い: 「会議変更：プロジェクト同期 → 木曜14時」
悪い: 「予定変更！！！！！」

次の件名を書いてください：
メール内容：提案書の下書きへのフィードバック依頼
件名:`} />

### エッジケースの例

エッジケースは、ソリューションが本番環境で機能するかどうかを決定することがよくあります。例に異常な入力を含めることで、「ハッピーパス」に当てはまらない実世界のデータでモデルが失敗するのを防ぎます。

<TryIt compact prompt={`名前を構造化フォーマットにパースしてください。

入力: 「山田太郎」
出力: {"first": "太郎", "last": "山田", "middle": null, "suffix": null}

入力: 「田中花子・スミス」
出力: {"first": "花子", "middle": null, "last": "田中・スミス", "suffix": null}

入力: 「マーティン・ルーサー・キング・ジュニア博士」
出力: {"prefix": "博士", "first": "マーティン", "middle": "ルーサー", "last": "キング", "suffix": "ジュニア"}

入力: 「マドンナ」
出力: {"first": "マドンナ", "last": null, "middle": null, "suffix": null, "mononym": true}

次をパースしてください：
入力: 「サー・パトリック・スチュワート三世」
出力:`} />

## 例の数は？

<div className="my-4 grid gap-2">
  <div className="flex gap-3 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-40">シンプルな分類</span>
    <span className="text-primary font-mono">2-3</span>
    <span className="text-muted-foreground">各カテゴリに最低1つ</span>
  </div>
  <div className="flex gap-3 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-40">複雑なフォーマット</span>
    <span className="text-primary font-mono">3-5</span>
    <span className="text-muted-foreground">バリエーションを示す</span>
  </div>
  <div className="flex gap-3 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-40">微妙なスタイル</span>
    <span className="text-primary font-mono">4-6</span>
    <span className="text-muted-foreground">全範囲をカバー</span>
  </div>
  <div className="flex gap-3 p-3 bg-muted/50 rounded-lg">
    <span className="font-semibold min-w-40">エッジケース</span>
    <span className="text-primary font-mono">1-2</span>
    <span className="text-muted-foreground">通常の例と一緒に</span>
  </div>
</div>

## 例の品質が重要

<Compare 
  before={{ 
    label: "悪い例", 
    content: `「良い製品」→ 良い
「良いサービス」→ 良い
「良い価格」→ 良い

✗ すべて似すぎている
✗ 同じ言葉の繰り返し
✗ エッジケースがない` 
  }}
  after={{ 
    label: "良い例", 
    content: `「期待を超えました！」→ 肯定的
「届いた時点で壊れていた」→ 否定的
「普通に動く、特別なことはない」→ 中立的
「品質は素晴らしいが高すぎる」→ 混合

✓ 多様なシナリオ
✓ 明確な境界
✓ エッジケースをカバー` 
  }}
/>

## Few-Shotと他の技術の組み合わせ

Few-shot learningは他のプロンプティング技術と組み合わせると強力です。例は「何を」を提供し、他の技術がコンテキスト、推論、または構造を追加できます。

### Few-Shot + ロール

ロールを追加することで、モデルにタスクを実行する*理由*のコンテキストを与え、品質と一貫性を向上させることができます。

```
あなたは法務契約レビュアーです。

[契約条項分析の例]

次を分析してください: [新しい条項]
```

### Few-Shot + CoT

Few-shotとChain of Thoughtを組み合わせることで、*どの*答えを出すかだけでなく、その答えに至る*推論方法*を示すことができます。判断が必要なタスクに効果的です。

```
分類し、推論を説明してください。

レビュー: 「機能は素晴らしいが高すぎる」
思考: このレビューはポジティブな面（「素晴らしい機能」）を
述べていますが、重大なネガティブな面（「高すぎる」）もあります。
「が」という接続詞から、ネガティブな面がポジティブな面を
上回っているようです。
分類: 混合-ネガティブ

[推論を含む他の例]

次を推論とともに分類してください：
レビュー: 「まさに必要としていたもので、予想より早く届きました」
```

## まとめ

<Callout type="tip" title="重要なポイント">
Few-shot learningは実演を通じて教え、多くの場合、指示だけよりも効果的です。2〜5個の多様で正確な例を使用し、最良の結果を得るために他の技術と組み合わせてください。
</Callout>

<Quiz 
  question="Few-shot learningでは通常何個の例を提供すべきですか？"
  options={[
    "できるだけ多く（10個以上）",
    "1つの例で常に十分",
    "2〜5個の多様で正確な例",
    "指示が明確であれば例は不要"
  ]}
  correctIndex={2}
  explanation="2〜5個の多様で正確な例が通常最も効果的です。少なすぎるとパターンを捉えられず、多すぎるとトークンを無駄にし、モデルを混乱させる可能性があります。量よりも品質と多様性が重要です。"
/>

次の章では、反復的な改善について探ります：連続した試行を通じてプロンプトを改善する技術です。
