System Prompt設計術とは?Claude・GPT・Geminiで使える実践テクニックを解説

AIの回答品質の8割はSystem Promptで決まるとも言われます。Claude・GPT・Geminiそれぞれに効く指示の書き方と、すぐ使えるテンプレートを解説します。

AI初心者

AIを知りたい

システムプロンプトってユーザーメッセージと何が違うんですか?

AIエンジニア

AIエンジニア

システムプロンプトはAIの「性格」や「役割」を定義するものです。ユーザーメッセージは個別の質問ですが、システムプロンプトはAIの振る舞い全体に影響を与えます。

AI初心者

AIを知りたい

うまく書くコツはありますか?

AIエンジニア

AIエンジニア

いくつかの重要なテクニックがあります。適切に設計すると、AIの出力品質が劇的に変わりますよ!

System Promptとは

System Prompt(システムプロンプト)とは、AIモデルに対して最初に与える指示であり、AIの役割、能力、制約、出力形式などを定義します。Claude、GPT、Geminiの各APIで利用でき、APIリクエストのsystemパラメータとして渡します。

効果的なSystem Promptの構成要素

AI初心者

AIを知りたい

何を書けばいいですか?

AIエンジニア

AIエンジニア

効果的なシステムプロンプトには5つの要素があります。

要素 説明 例
役割定義 AIの専門性や立場 「あなたはシニアPythonエンジニアです」
能力範囲 何ができて何ができないか 「コードレビューとバグ修正が専門です」
出力形式 回答のフォーマット指定 「JSON形式で回答してください」
制約条件 禁止事項やルール 「推測で回答せず、不明な場合は質問して」
トーン指定 会話の雰囲気 「丁寧かつ簡潔に回答して」

各API別のSystem Prompt設定

AI初心者

AIを知りたい

APIによって書き方が違うんですか?

AIエンジニア

AIエンジニア

基本コンセプトは同じですが、設定方法が異なります。

# Claude API
response = anthropic.messages.create(
    model="claude-sonnet-4-20250514",
    system="あなたはシニアPythonエンジニアです。",
    messages=[{"role": "user", "content": "このコードをレビューして"}]
)

# OpenAI API
response = openai.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "あなたはシニアPythonエンジニアです。"},
        {"role": "user", "content": "このコードをレビューして"}
    ]
)

# Gemini API
model = genai.GenerativeModel(
    model_name="gemini-2.0-flash",
    system_instruction="あなたはシニアPythonエンジニアです。"
)
response = model.generate_content("このコードをレビューして")

実践的なSystem Promptテンプレート

AI初心者

AIを知りたい

すぐ使えるテンプレートが欲しいです!

AIエンジニア

AIエンジニア

コードレビュアーのテンプレートを紹介します。

あなたはシニアソフトウェアエンジニアです。
以下の観点でコードをレビューしてください:
1. バグや潜在的な問題
2. パフォーマンスの改善点
3. セキュリティリスク
4. コードの可読性
回答形式:各項目について「問題」「理由」「修正案」を記載

System Prompt設計のアンチパターン

AI初心者

AIを知りたい

やってはいけないことはありますか?

AIエンジニア

AIエンジニア

よくある失敗パターンを紹介します。

アンチパターン 問題 改善策
曖昧な指示 一貫性のない出力 具体的な基準と形式を指定
矛盾する指示 「簡潔」かつ「詳細」 優先順位を明確化
過度に長い指示 重要な指示が埋もれる 構造化して要点を先頭に
ネガティブ指示のみ 「〜するな」だけでは不十分 望ましい行動も明記

AI初心者

AIを知りたい

System Promptで出力が大きく変わるんですね!

AIエンジニア

AIエンジニア

System Promptはプロンプトエンジニアリングの最重要要素です。一度いいテンプレートを作れば、プロジェクト全体で再利用できますよ!

関連記事

OpenAI APIでsystemメッセージを設計する:ペルソナ設定と出力制御の実装

ChatCompletion APIのsystemメッセージを活用して、AIの振る舞いを精密に制御するテクニックを実装します。ペルソナ設定・出力フォーマット指定・制約条件の組み合わせにより、用途に応じた応答を安定して得る方法を確認しましょう。


from openai import OpenAI

client = OpenAI()

# ---- パターン1: 専門家ペルソナ + 出力フォーマット指定 ----
system_expert = """あなたは機械学習エンジニア(経験10年)です。
以下のルールに従って回答してください:
- 技術的に正確な情報のみ回答する
- 不確実な場合は「確認が必要です」と明記する
- 回答は以下のJSON形式で返す:
  {"answer": "回答本文", "confidence": "high/medium/low", "references": ["参考情報"]}
- 日本語で回答する"""

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": system_expert},
        {"role": "user", "content": "BERTとGPTのアーキテクチャの違いを説明してください"}
    ],
    temperature=0.3,
    max_tokens=1000
)
print("=== 専門家ペルソナ ===")
print(response.choices[0].message.content)

# ---- パターン2: ガードレール付きカスタマーサポート ----
system_support = """あなたはSaaSプロダクトのカスタマーサポート担当です。

## 必ず守るルール
1. 製品に関する質問のみ回答する
2. 競合製品の批判はしない
3. 価格交渉には応じず「営業チームにおつなぎします」と案内する
4. 技術的な問題は「サポートチケットを作成します」と案内する
5. 回答は3文以内に収める

## 禁止事項
- 社内情報や開発ロードマップの開示
- 法的アドバイス
- 個人情報の要求"""

response2 = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": system_support},
        {"role": "user", "content": "料金を安くしてもらえませんか?"}
    ],
    temperature=0.5
)
print("\n=== サポートペルソナ ===")
print(response2.choices[0].message.content)

# ---- パターン3: Few-shot例をsystemに含める ----
system_fewshot = """あなたは文章要約アシスタントです。以下の例に従って要約してください。

## 要約例
入力: 「深層学習は多層のニューラルネットワークを用いた機械学習手法で、画像認識や自然言語処理で高い性能を示す。大量のデータと計算資源を必要とするが、特徴量の自動抽出が可能である。」
出力: 「深層学習は多層NNによるML手法。画像・NLP分野で高性能だが、大量データと計算資源が必要。特徴量を自動抽出できる点が強み。」

## ルール
- 元の文章の50%以下の文字数にする
- 専門用語は略称を使用可
- 重要な数値や固有名詞は保持する"""

response3 = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": system_fewshot},
        {"role": "user", "content": "Transformerは2017年にGoogleが発表した深層学習アーキテクチャで、Self-Attentionメカニズムにより系列データの長距離依存関係を効率的に捉える。RNNと異なり並列計算が可能で、BERTやGPTなど現代の大規模言語モデルの基盤となっている。"}
    ],
    temperature=0.2
)
print("\n=== Few-shot要約 ===")
print(response3.choices[0].message.content)

System Prompt設計の要点は3つあります。第一に、ペルソナ(役割)・ルール(制約)・フォーマット(出力形式)を明確に分離して記述することで、モデルが各指示を正確に解釈しやすくなります。第二に、禁止事項を具体的に列挙するガードレール方式は、望まない出力を抑制する最も効果的な手段です。第三に、Few-shot例をsystemメッセージ内に含めることでuserメッセージのトークンを節約しつつ、出力の品質と一貫性を大幅に向上できます。temperatureはルール遵守が重要な場面では0.2〜0.3、創造性が必要な場面では0.7以上が目安です。