プロンプトエンジニアリング ベストプラクティス
概要
プロンプトエンジニアリングは、LLMから望ましい出力を得るために、入力(プロンプト)を最適化する技術である。効果的なプロンプトは、モデルの能力を最大限に引き出し、タスクの成功率を大幅に向上させる。
なぜ重要か
- •リソース効率: ファインチューニングより低コスト・高速
- •素早い反復: 即座に試行錯誤が可能
- •一般知識の保持: 特定タスクに最適化しながら汎用性を維持
- •透明性: プロンプトの変更が結果に与える影響を理解しやすい
基本原則
効果的なプロンプトを作成するための基本原則:
- •明確性: 曖昧さを排除し、期待する出力を具体的に指示する
- •文脈提供: タスクに必要な情報を十分に提供する
- •構造化: XMLタグや段落分けで情報を整理する
- •例示: 期待する出力形式を例で示す
- •段階的思考: 複雑なタスクは推論ステップを明示する
効果的なテクニック(優先順位順)
1. 明確で直接的な指示
曖昧な表現を避け、具体的に指示する。
悪い例: データを分析してください
良い例:
以下のCSVデータを分析し、以下の形式で出力してください: 1. 各カテゴリの平均値 2. 最大値と最小値 3. 外れ値の特定(平均±2標準偏差を超えるもの)
ポイント: 具体的なアクション、期待する出力形式、判断基準を明示する。
2. 例の使用(Few-shot Learning)
期待する入出力の例を2-5個提供する。
例:
以下の形式でタスクを分類してください:
例1:
入力: "バグ修正が必要"
出力: {"type": "bug", "priority": "high"}
例2:
入力: "新機能の提案"
出力: {"type": "feature", "priority": "medium"}
実際のタスク:
入力: "ドキュメントの誤字修正"
出力:
ポイント: 多様なケースをカバーし、例の品質を重視する。
3. 思考プロセスの促進(Chain of Thought)
段階的な推論を促す。「ステップバイステップで考えて」を追加。
例:
以下の問題を解いてください。解答前に: 1. 問題の理解と既知の情報の整理 2. 解決に必要なステップの特定 3. 各ステップの実行 4. 最終的な解答の提示
ポイント: 複雑な推論タスクで特に効果的。
4. XMLタグの活用
構造化されたコンテキストを提供する。
例:
<document> <title>API仕様書</title> <content>...</content> </document> <review_criteria> - 完全性 - 明確性 </review_criteria> レビュー結果を<review></review>タグ内に出力してください。
ポイント: 意味のあるタグ名を使用し、情報の境界を明確化する。
5. ロール設定(System Prompts)
特定の役割や専門性を与える。
例: あなたは10年以上の経験を持つシニアPythonエンジニアです。以下のコードをレビューし、セキュリティとパフォーマンスの観点から改善点を指摘してください。
ポイント: 専門知識の領域と評価基準を明示する。
6. 応答の事前入力(Prefilling)
期待される応答の開始部分を提供する。
例:
User: 以下のデータをJSON形式で出力してください:
名前: 田中太郎, 年齢: 30, 職業: エンジニア
Assistant: {
"name": "田中太郎",
"age": 30,
"occupation": "エンジニア"
}
ポイント: JSON、コードブロック、特定の形式の出力を促す。
7. プロンプトの連鎖
複雑なタスクを複数のステップに分割する。
例:
ステップ1: 要件を分析し、主要機能をリストアップ ステップ2: 各機能の技術的実装方法を提案 ステップ3: 実装の優先順位を決定
ポイント: 各ステップの出力を次のステップの入力として使用する。
8. 長文コンテキストの活用
大量の情報を扱う際のコツ。
テクニック:
- •重要な情報をプロンプトの最初と最後に配置
- •XMLタグで情報を構造化
- •参照したい情報を明示的に指示
例: <documents></documents>タグ内の全ドキュメントを参照して、要約を作成してください。
ポイント: モデルは長文コンテキスト全体にアクセスできるが、構造化により精度が向上する。
クイックチェックリスト
プロンプト作成時に確認する項目:
- • 指示は具体的で明確か?
- • 期待する出力形式を示しているか?
- • 必要なコンテキストを提供しているか?
- • 例を含めるべきタスクか?(分類、フォーマット変換など)
- • 複雑な推論を要するか?(Chain of Thoughtが必要か?)
- • 情報は構造化されているか?(XMLタグなど)
- • ロールや専門性を設定すべきか?
- • 判断基準や評価軸を明示しているか?
詳細リファレンス
より詳細な情報は以下のファイルを参照:
- •
コアテクニック詳細:
references/core-techniques.md- •明確で直接的な指示
- •例の使用(Multishot)
- •思考プロセスの促進
- •XMLタグの活用
- •ロール設定
- •
高度なテクニック:
references/advanced-techniques.md- •応答の事前入力
- •プロンプトの連鎖
- •長文コンテキストのコツ
- •Few-shot vs Zero-shot
- •Self-Consistency
- •Tree of Thoughts
- •
アンチパターン:
references/anti-patterns.md- •避けるべきパターンと理由
- •よくある失敗例
実装例
実際の使用例は以下のファイルを参照:
- •
改善前後の比較:
examples/before-after-examples.md- •具体的な改善例と効果
- •
ユースケース別の例:
examples/use-case-examples.md- •コード生成
- •データ分析
- •文書作成
- •質問応答
- •推論タスク
使用方法
このスキルは以下の場合に自動的に呼び出される:
- •ユーザーが「プロンプトを改善して」と依頼した時
- •「より良いプロンプトを書きたい」と述べた時
- •「プロンプトをレビューして」と要求した時
- •プロンプトエンジニアリングについて質問した時
手動で呼び出す場合: /prompt-engineering
プロンプト改善の実践
ユーザーのプロンプトを改善する際の手順:
- •現在のプロンプトを分析: 目的、コンテキスト、期待する出力を理解
- •適用可能なテクニックを特定: 上記8つのテクニックから選択
- •改善版を提案: Before/Afterを明示
- •改善ポイントを説明: なぜその変更が効果的かを説明
- •必要に応じて詳細リファレンスを提供: references/やexamples/を紹介
重要な注意事項
- •簡潔さを重視: 過度に複雑なプロンプトは避ける
- •反復テスト: プロンプトは試行錯誤で改善する
- •タスクに応じた選択: すべてのテクニックを常に使う必要はない
- •測定可能な改善: 可能な限り改善の効果を測定する