プロンプトエンジニアリングのテクニック:Zero-shot、Few-shot、Chain-of-Thought
1. プロンプトエンジニアリングとは?
プロンプトエンジニアリングとは、基盤モデルから望ましい出力を得るために入力(プロンプト)を設計する技術です。トレーニングやファインチューニングを必要とせず、FMの動作をカスタマイズする最も安価で最速の方法です。
1.1. プロンプトの構成要素
┌────────────────────────────────────────────┐
│ SYSTEM PROMPT(システムプロンプト・任意) │
│ 「あなたは親切なAWSソリューション │
│ アーキテクトです。簡潔に回答してください。」 │
├────────────────────────────────────────────┤
│ CONTEXT(コンテキスト・任意) │
│ 背景情報、ドキュメント、データ │
├────────────────────────────────────────────┤
│ USER PROMPT(ユーザープロンプト・必須) │
│ 実際の質問や指示 │
├────────────────────────────────────────────┤
│ EXAMPLES(例・任意、Few-shot用) │
│ 入力 → 出力のペア │
├────────────────────────────────────────────┤
│ OUTPUT FORMAT(出力形式・任意) │
│ 「JSONで回答」「箇条書きで」 │
└────────────────────────────────────────────┘
2. プロンプティングテクニック
2.1. Zero-shotプロンプティング
例を一切与えずにプロンプトを送信します。モデルは事前学習した知識のみに依存します。
プロンプト: "このレビューの感情を分類してください:
'商品が破損して届き、カスタマーサービスも役に立ちませんでした。'
感情:"
出力: "ネガティブ"
使用場面:モデルがすでに十分理解している、シンプルで明確に定義されたタスク。
2.2. Few-shotプロンプティング
実際のタスクを提示する前にいくつかの例を提供します。これにより、モデルが期待される形式やロジックを理解しやすくなります。
プロンプト: "以下のレビューを分類してください:
レビュー: '素晴らしい品質、迅速な配送!' → ポジティブ
レビュー: 'ひどい体験、二度と利用しない。' → ネガティブ
レビュー: 'まあまあ、特別ではない。' → ニュートラル
レビュー: '商品が期待を上回りました!' →"
出力: "ポジティブ"
使用場面:Zero-shotでは十分な品質が得られない場合に、モデルに特定の形式やロジックパターンに従わせたいとき。
2.3. One-shotプロンプティング
Few-shotのバリエーションで、1つの例のみを提供します。パターンを設定したいがコンテキストウィンドウが限られている場合に使用します。
2.4. Chain-of-Thought(CoT)プロンプティング
回答する前にモデルにステップバイステップで考えるよう求めます。数学、論理、推論タスクに特に効果的です。
CoTなし:
Q: "店に12個入りの箱が3つあり、15個を配ったら
残りはいくつ?"
A: "21"(推論なしでは間違える可能性あり)
CoTあり:
Q: "ステップバイステップで考えてください:店に12個入りの
箱が3つあり、15個を配ったら残りはいくつ?"
A: "ステップ1:合計のりんご = 3 × 12 = 36
ステップ2:配った後 = 36 - 15 = 21
答え:21個のりんご"
試験のポイント:「推論の精度を向上させるプロンプティングテクニックはどれ?」→ Chain-of-Thought。キーフレーズ:「ステップバイステップで考える」「推論を説明する」。
3. システムプロンプトとペルソナ
システムプロンプトは、モデルの役割、動作、制約、出力形式を定義します。ユーザーとの対話前に「舞台を設定」します。
システムプロンプト:
"あなたはXYZ銀行のファイナンシャルアドバイザーAIです。
ルール:
- 銀行と投資に関する質問のみ回答する
- 特定の銘柄の推奨は絶対にしない
- 常に免責事項を含める
- プロフェッショナルなトーンで回答する
- 金融以外の話題を聞かれたら丁寧にリダイレクトする"
システムプロンプトのベストプラクティス:
| プラクティス | 理由 |
|---|---|
| 明確な役割を定義 | モデルの動作をドメインに制約する |
| 境界を設定 | トピック外や有害な回答を防ぐ |
| 出力形式を指定 | 一貫性のある、パース可能な出力を保証する |
| 例を含める | 期待される動作を明確にする |
| ガードレールを追加 | 悪用を防ぐ(PII、有害コンテンツ) |
4. 高度なプロンプティングテクニック
4.1. ネガティブプロンプティング
モデルがやってはいけないことを明示的に指定します。画像生成で特に有用です。
テキスト生成:
"この記事を要約してください。意見や個人的な
コメントは含めないでください。100語を超えないでください。"
画像生成(Stable Diffusion):
プロンプト: "プロフェッショナルなヘッドショット、スタジオ照明"
ネガティブプロンプト: "ぼやけ、漫画、歪み、低品質"
4.2. プロンプトテンプレート
動的コンテンツ用のプレースホルダーを含む再利用可能なプロンプト構造:
テンプレート:
"以下の{document_type}が与えられています:
---
{content}
---
以下の情報を抽出してください:
- {field_1}
- {field_2}
- {field_3}
JSON形式で回答してください。"
4.3. プロンプトチェーン
複雑なタスクを複数の連続したプロンプトに分割し、前のプロンプトの出力が次のプロンプトの入力になります。
ステップ1: "この文書から主要なエンティティを抽出: {doc}"
→ 出力: エンティティのリスト
ステップ2: "各エンティティ{entities}について、このテキスト
で表現されている感情を分析: {doc}"
→ 出力: エンティティ-感情ペア
ステップ3: "これらのエンティティの感情分析サマリーレポート
を作成: {entity_sentiments}"
→ 出力: 最終レポート
5. 試験用比較表
| テクニック | 例の提供 | 最適な用途 | 試験キーワード |
|---|---|---|---|
| Zero-shot | なし | シンプルでよく知られたタスク | 「例なし」 |
| One-shot | 1つの例 | 最小限のコンテキストでフォーマット設定 | 「単一の例」 |
| Few-shot | 2-5の例 | パターン追従、分類 | 「例を提供」「デモンストレーション」 |
| Chain-of-Thought | 推論ステップ付き | 数学、論理、複雑な推論 | 「ステップバイステップ」「推論」 |
| ネガティブプロンプティング | 該当なし | 不要な出力の回避 | 「含めない」「避ける」 |
| プロンプトチェーン | 該当なし | 複雑な多段階タスク | 「ステップに分割」「連続的」 |
6. 推論パラメータの確認
プロンプトエンジニアリングには推論パラメータのチューニングも含まれます:
| パラメータ | 低い値 | 高い値 |
|---|---|---|
| Temperature | 決定論的、事実重視(0.0-0.3) | 創造的、多様(0.7-1.0) |
| Top-p | 限定的な語彙(0.1-0.3) | 多様な語彙(0.9-1.0) |
| Top-k | 選択肢が少ない(例:10) | 選択肢が多い(例:250) |
| Max tokens | 短い回答 | 長い回答 |
| Stop sequences | 生成を停止するタイミングを定義 | |
試験のポイント:「カスタマーサポートチャットボットが一貫性のない回答をする」→ Temperatureを下げる(0に近づける)。「クリエイティブライティングアプリがつまらないテキストを生成する」→ Temperatureを上げる(1に近づける)。
7. プロンプトエンジニアリングのベストプラクティス
- 具体的に:「3つの箇条書きで要約」>「これを要約して」
- コンテキストを提供:関連する背景情報を含める
- 出力形式を定義:JSON、マークダウン、テーブル、箇条書き
- 区切り文字を使用:セクションを --- や ``` で区切り、プロンプトインジェクションを防ぐ
- 反復改善:出力に基づいてプロンプトをテストし改良する
- 曖昧さを避ける:モデルがあなたの意図を知っていると仮定しない
- 例を使用:Zero-shotがうまくいかない場合、Few-shotの例を追加する
8. 練習問題
Q1:開発者が分類タスクに取り組んでいますが、モデルのZero-shot回答が一貫していません。次にどのプロンプティングテクニックを試すべきですか?
- A) Temperatureを0に下げる
- B) 入力と出力の例を使ったFew-shotプロンプティングを使用する ✓
- C) カスタムデータでモデルをファインチューニングする
- D) 別のモデルプロバイダーに切り替える
解説:Few-shotプロンプティングはZero-shotが失敗した後の論理的な次のステップです。例を提供することでモデルが期待されるパターンを理解しやすくなります。ファインチューニングはより高コストで複雑です。Temperature調整だけでは分類ロジックを修正できない場合があります。
Q2:顧客がAIアプリケーションで複雑な数学の文章問題をより正確に解きたいと考えています。結果を最も改善するプロンプティングテクニックはどれですか?
- A) Zero-shotプロンプティング
- B) ネガティブプロンプティング
- C) Chain-of-Thoughtプロンプティング ✓
- D) プロンプトチェーン
解説:Chain-of-Thoughtプロンプティングは、モデルにステップバイステップで推論を示すよう促し、数学的・論理的推論タスクの精度を大幅に向上させます。
Q3:生成AIアプリケーションでシステムプロンプトを使用する利点はどれですか?
- A) ユーザー入力の必要性を排除する
- B) モデルの推論コストを削減する
- C) モデルの役割、動作、制約を定義する ✓
- D) ファインチューニングの必要性を置き換える
解説:システムプロンプトはモデルの役割、動作制約、出力形式を設定し、モデルトレーニングなしですべてのユーザーインタラクションで一貫した動作を確立します。