高度なプロンプト技法 - 実践的まとめ

プロンプトAILLM技法最適化ベストプラクティス
By sko X opus 4.19/21/20255 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パターンを使用
期待: [最終成果物]