高度なプロンプト技法 - 実践的まとめ
プロンプトAILLM技法最適化ベストプラクティス
By sko X opus 4.1•9/21/2025•5 min read
コア原則
明確で曖昧さのない言語を使用する
- ❌ 悪い例: "これについて要約してみて"
- ✅ 良い例: "以下のテキストを3つの箇条書きで要約してください"
指示を簡潔で直接的に保つ
- ❌ 悪い例: "可能であれば、この私が提供するテキストを翻訳していただけるでしょうか"
- ✅ 良い例: "このテキストをフランス語に翻訳してください:"
強力な動作動詞を使用する
(分析、作成、抽出、要約、比較、生成、評価)
- ❌ 悪い例: "このデータを見てもらえますか?"
- ✅ 良い例: "このデータを分析して傾向を特定してください"
制約ではなく、ポジティブな指示として表現する
- ❌ 悪い例: "専門用語を使わないでください"
- ✅ 良い例: "一般の人にもわかりやすい簡単な言葉で説明してください"
プロンプト試行を反復し文書化する
- ❌ 悪い例: テストせずに最初の草案を使用する
- ✅ 良い例: テスト → 出力分析 → 改良 → 結果記録
基本技法
シンプルなタスクにはゼロショットから始める
- ❌ 悪い例: 基本的なタスクに例を過剰に提供する
- ✅ 良い例: "フランスの首都は何ですか?"
特定の形式・スタイルが必要な場合は1つの例を追加する
- ❌ 悪い例: 1つで十分な場合に複数の例を提供する
- ✅ 良い例: 1つの翻訳例を示してから、同様の翻訳を依頼する
少数ショットプロンプトには3-5の多様な例を使用する
- ❌ 悪い例: 類似または偏った例を使用する
- ✅ 良い例: 分類タスクでポジティブ、ネガティブ、ニュートラルの感情例を混在させる
分類例でクラス順序をランダム化する
- ❌ 悪い例: 最初にすべてのポジティブ例、次にすべてのネガティブ例
- ✅ 良い例: 異なるクラス間をランダムに交互配置する
プロンプト構造
冒頭でシステムコンテキストを設定する
- ❌ 悪い例: システム指示とユーザークエリを混在させる
- ✅ 良い例: "あなたは親切なAIアシスタントです。常に礼儀正しく応答してください。"
必要に応じて特定の役割を割り当てる
- ❌ 悪い例: "ローマについて書いてください"
- ✅ 良い例: "旅行ブロガーとして行動し、ローマの隠れた名所について書いてください"
明確な区切り文字を使用する
(三重バッククォート、XMLタグ、ダッシュ)
- ❌ 悪い例: 指示とコンテンツを混在させる
- ✅ 良い例:
<instruction>これを要約してください</instruction> <article>[コンテンツ]</article>
構造化された出力を明示的に要求する
- ❌ 悪い例: "情報をください"
- ✅ 良い例: "name、date、locationのキーを持つJSONで返してください"
推論強化
複雑な問題には「段階的に考えてみましょう」を追加する
- ❌ 悪い例: "847293 × 652847はいくつですか?"
- ✅ 良い例: "847293 × 652847はいくつですか?段階的に考えてみましょう。"
決定論的推論にはtemperatureを0に設定する
- ❌ 悪い例: 数学問題に高いtemperature
- ✅ 良い例: 計算と論理タスクにはTemperature=0
特定のタスク前に一般原則を尋ねる(Step-Back)
- ❌ 悪い例: "探偵小説を書いてください"
- ✅ 良い例: "良い探偵小説の要素は何ですか?その原則を使って1つ書いてください"
重要なタスクには複数の推論パスを生成する(Self-Consistency)
- ❌ 悪い例: 重要な決定に単一の出力に依存する
- ✅ 良い例: より高いtemperatureで3-5回実行し、多数決を取る
ツール使用とアクション
パラメータ付きの明確なツール説明を提供する
- ❌ 悪い例: "ウェブ検索ができます"
- ✅ 良い例: "ツール: web_search(query: string) - 最新情報を検索します"
マルチステップタスクにはReActパターンを使用する
- ❌ 悪い例: 複雑なクエリを一発で処理
- ✅ 良い例: 思考 → アクション → 観察 → 完了まで繰り返し
次のステップのコンテキストとしてツール出力を含める
- ❌ 悪い例: ツール結果を無視する
- ✅ 良い例: "検索結果に基づいて: [データ]、今度は分析してください..."
高度な最適化
複雑なタスクをサブタスクに分割する
- ❌ 悪い例: "AIに関する完全な研究論文を書いてください"
- ✅ 良い例: アウトライン → セクション → 結論の別々のプロンプト
最新・専門情報にはRAGを使用する
- ❌ 悪い例: コンテキストなしで最近の出来事について尋ねる
- ✅ 良い例: 関連文書を最初に取得し、コンテキストとして含める
対象読者を明示的に指定する(ペルソナパターン)
- ❌ 悪い例: "量子物理学を説明してください"
- ✅ 良い例: "高校生に量子物理学を説明してください"
LLMを使ってプロンプトを改良する
- ❌ 悪い例: 手動での試行錯誤のみ
- ✅ 良い例: "このプロンプトを分析して改善提案をしてください: [プロンプト]"
コードと技術タスク
言語とバージョンを指定する
- ❌ 悪い例: "リストをソートするコードを書いてください"
- ✅ 良い例: "Python 3.9でリストをソートするコードを書いてください"
デバッグにはコンテキストとエラーメッセージを提供する
- ❌ 悪い例: "このコードを修正してください"
- ✅ 良い例: "NameErrorが発生するこのPythonコードを修正してください: [コード + トレースバック]"
品質管理
エッジケースでプロンプトをテストする
- ❌ 悪い例: 理想的な入力のみでテスト
- ✅ 良い例: 不完全、曖昧、または異常な入力でテスト
構造化出力をプログラム的に検証する
(JSON検証にPydanticなどのスキーマを使用)
- ❌ 悪い例: JSONが常に有効だと仮定する
- ✅ 良い例: スキーマ強制で解析と検証
成功したプロンプトをバージョン管理に保存する
- ❌ 悪い例: チャット履歴にのみプロンプトを保持
- ✅ 良い例: コードベースの.txt/.mdファイルに保存
自動テストでプロンプトパフォーマンスを監視する
- ❌ 悪い例: 手動チェックのみ
- ✅ 良い例: 期待される出力でテストスイートを作成
モデル変更時にプロンプトを更新する
- ❌ 悪い例: プロンプトがすべてのバージョンで動作すると仮定
- ✅ 良い例: 新しいモデルリリースで再テストと調整
クイックリファレンス - プロンプト用動作動詞
分析: 分析、評価、査定、比較、対照、検査 作成: 生成、作成、制作、設計、開発、構成 抽出: 抽出、特定、発見、場所特定、取得、分離 変換: 変換、転換、翻訳、再フォーマット、適応 要約: 要約、要約、抽象、概要、ハイライト 整理: 分類、分類、ソート、グループ、整理、構造化
テンプレート例
基本タスクテンプレート
役割: [オプション:特定の役割]
タスク: [明確な動作動詞 + 具体的要件]
入力: [明確に区切られたコンテンツ]
出力: [期待される形式/構造]
複雑な推論テンプレート
コンテキスト: [背景情報]
タスク: [主要目標]
ステップ:
1. [最初のサブタスク]
2. [2番目のサブタスク]
3. [最終統合]
形式: [出力要件]
ツール使用テンプレート
利用可能ツール:
- tool_name(パラメータ): 説明
タスク: [ツールが必要な複雑なクエリ]
プロセス: ReActパターンを使用
期待: [最終成果物]