Claude APIのプロンプト設計で精度を90%以上引き出す5つのテクニック

同じ質問でも、プロンプトの書き方次第でClaudeの回答精度は大きく変わります。本記事では、仕事の現場で即座に活用できるプロンプト設計の5つのコアテクニックを紹介。具体的なコード例とともに、よくあるハマりポイントも解説します。

プロンプト設計が重要な理由

Claudeなどの大規模言語モデル(LLM)は優秀ですが、「魔法の道具」ではありません。指示が曖昧だと、期待と異なる回答が返ってくることがあります。研究によると、プロンプトの質を高めるだけで、同じモデルでも出力精度が30~40%向上することが報告されています。特にビジネス用途では、この差が重要な判断に影響するため、プロンプト設計スキルは必須といえます。

テクニック1: ロール設定で文脈を明確にする

Claudeに「あなたはXの専門家です」と明確にロールを与えることで、その分野の知識ベースで回答します。単なる一般的な回答ではなく、より正確で専門的な見方が得られます。

// 悪い例
{
  "messages": [
    {
      "role": "user",
      "content": "Pythonのパフォーマンス改善方法を教えてください"
    }
  ]
}

// 良い例:ロール設定で精度向上
{
  "messages": [
    {
      "role": "user",
      "content": "あなたはPythonのシステムエンジニアです。大規模データ処理を扱う企業で、毎秒10万件のリクエスト処理が必要な場面にいます。Pythonアプリケーションのパフォーマンス改善方法を、実装優先度順に3つ教えてください。"
    }
  ]
}
  

ロール設定のコツ

単に職種を述べるだけでなく、その人が「実際に直面する制約条件」を含めることが重要です。上の例では「毎秒10万件」という具体的な制約があるため、Claudeは汎用的ではなく、本当に必要な改善策を優先順位付けで返答します。

テクニック2: 出力フォーマットを明示的に指定する

「JSON形式で返してください」「箇条書きで3つに絞ってください」など、期待する出力形式を明記します。これにより、後続のプログラムでの処理が容易になり、バグも減ります。

// 悪い例
{
  "messages": [
    {
      "role": "user",
      "content": "ECサイトのエラーハンドリング方針を教えてください"
    }
  ]
}

// 良い例:出力フォーマットを指定
{
  "messages": [
    {
      "role": "user",
      "content": "ECサイトのエラーハンドリング方針を、以下のJSON形式で返してください。\n\n{\n  \"error_type\": \"エラー分類\",\n  \"http_status_code\": ステータスコード,\n  \"user_message\": \"ユーザーに表示するメッセージ\",\n  \"log_level\": \"ログレベル\"\n}\n\n3つの重要なエラーケースについて教えてください。"
    }
  ]
}
  

出力フォーマット指定のハマりポイント

複雑なJSON構造を要求すると、Claudeが正確なJSONを返さないことがあります。その場合は、「jsonコードブロック内に返してください」と明示するか、より単純な構造に分割することで解決します。

テクニック3: 具体例を複数パターン提示する(Few-shot Prompting)

「こういった入力に対して、こういった出力が期待される」という具体例を2~3個示すことで、Claudeはそのパターンを学習して、より正確に応答します。特に専門的なタスクで効果的です。

// Few-shot Promptingの例:技術ドキュメントの分類
{
  "messages": [
    {
      "role": "user",
      "content": "以下のドキュメントを『API仕様書』『チュートリアル』『トラブルシューティング』のいずれかに分類してください。\n\n【例1】\n入力: \"REST APIの各エンドポイント一覧。GET /users/{id}は、ユーザーIDを指定してユーザー情報を取得します。\"\n出力: API仕様書\n\n【例2】\n入力: \"初めてのREST API呼び出し。このチュートリアルでは、Pythonを使用してHTTPリクエストを送信する方法を学びます。\"\n出力: チュートリアル\n\n【例3】\n入力: \"APIが403エラーを返す場合、認証トークンの有効期限を確認してください。トークンはのコマンドで再取得できます。\"\n出力: トラブルシューティング\n\n【質問】\n以下のテキストを分類してください:\n\"GraphQL APIの認証に失敗する場合、Bearer トークンの形式を確認してください。正しい形式は 'Bearer ' です。\"\n"
    }
  ]
}
  

Few-shot Promptingを成功させるコツ

重要なのは「例の品質」です。実際のデータに近い、多様性のある例を3~5個用意するのが理想的。同じパターンの例を繰り返すより、異なるバリエーションを含めることで、モデルの汎化能力が向上します。

テクニック4: 制約条件と前提を明文化する

「〜という前提のもとで」「ただし〜という制約がある」といった条件を明記することで、Claudeが不適切な提案をする可能性を減らせます。

// 悪い例
{
  "messages": [
    {
      "role": "user",
      "content": "マイクロサービス構成のシステムを提案してください"
    }
  ]
}

// 良い例:制約条件を明文化
{
  "messages": [
    {
      "role": "user",
      "content": "マイクロサービス構成のシステムを提案してください。\n\n【前提条件】\n- 初期段階のスタートアップ(エンジニア3名)\n- クラウド予算は月額500ドル以下\n- 既存レガシーシステムとの統合が必須\n\n【制約】\n- インフラ管理工数は最小限(フルマネージドサービス推奨)\n- DevOpsエンジニアが不在\n\nこれらの制約を踏まえて、実装可能な提案をしてください。"
    }
  ]
}
  

制約条件指定のよくあるエラー

制約が多すぎると、Claudeは「その条件下では実装不可能」という回答をすることがあります。その場合は、優先度を明示(「最も重要な制約は予算です」など)することで、現実的な提案が返ってきます。

テクニック5: チェーンオブソート(思考の連鎖)で複雑な推論を促す

複雑な意思決定やトラブルシューティングが必要な場面では、「段階的に考えて、各ステップでの理由を説明してください」と指示することで、より正確で追跡可能な回答が得られます。

// 悪い例
{
  "messages": [
    {
      "role": "user",
      "content": "データベースクエリが遅い原因は何ですか?"
    }
  ]
}

// 良い例:段階的な推論を促す
{
  "messages": [
    {
      "role": "user",
      "content": "以下のSQLクエリが遅い理由を、段階的に診断してください。各ステップで仮説を立て、次のステップでそれを検証する形式で説明してください。\n\nSELECT users.id, users.name, COUNT(orders.id) as order_count\nFROM users\nLEFT JOIN orders ON users.id = orders.user_id\nWHERE users.created_at > '2024-01-01'\nGROUP BY users.id, users.name\nORDER BY order_count DESC\nLIMIT 100;\n\n【診断ステップ】\n1. テーブルスキーマ・インデックスを確認\n2. 実行計画(EXPLAIN)で実行順序をチェック\n3. 遅延の主要原因を特定\n4. 具体的な改善案を提示\n"
    }
  ]
}
  

チェーンオブソートの効果測定

この手法は特に技術的な複雑性が高い案件で威力を発揮します。「理由を含めて説明してください」と追加するだけで、回答の信頼性が目に見えて向上します。

実践的なプロンプト構造テンプレート

ここまでの5つのテクニックを統合した、汎用性の高いプロンプトテンプレートを紹介します。

{
  "messages": [
    {
      "role": "user",
      "content": "# ロール\nあなたは[職種/専門分野]のエキスパートです。\n\n# コンテキスト(背景情報)\n[具体的な状況説明。業界、企業規模、現在のペイン、目標など]\n\n# タスク\n[何をしてほしいのか、できるだけ具体的に]\n\n# 制約条件\n- [制約1]\n- [制約2]\n- [制約3]\n\n# 出力形式\n[期待する形式。可能ならJSONやマークダウンで指定]\n\n# 例\n[1-3個の具体例を提示]\n\n# 追加指示\n[段階的に考える、理由を含めるなど]"
    }
  ]
}
  

テスト環境での動作確認

本記事の全コード例は、以下の環境で動作確認済みです:

  • Claude 3.5 Sonnet(2025-01-15時点の最新)
  • Anthropic Python SDK v0.28.1
  • macOS 14 / Ubuntu 22.04

プロンプト設計はモデルのバージョンによって最適化が異なる場合があります。新バージョンがリリースされた際は、一部調整が必要な可能性があることをご認識ください。

使うべき場面と使うべきでない場面

これらのテクニックが活躍する場面

  • 複雑な技術的な判断が必要な場合
  • ビジネスロジックの提案や設計レビュー
  • 後続システムが機械的に処理する必要がある場合(JSON出力など)
  • 同じタスクを繰り返し実行する場合

プロンプト設計が過度な場面

  • 単純な情報検索や一般知識の質問
  • リアルタイム性が最優先の場合(プロンプト最適化よりスピード重視)
  • LLMではなく専門家の判断が必須の法務・医療・金融判断

よくある質問

A: はい、プロンプトトークン数に比例して処理時間が増加します。ただし、結果の正確性向上による全体効率を考えると、多くの場合は妥当なトレードオフです。最適化のコツは、不要な背景説明は削り、実行に必要な情報だけに絞ることです。

K
AWS・Python・生成AIを専門とするソフトウェアエンジニア。AI・クラウド・開発ワークフローの実践ガイドを執筆しています。詳しく見る →