システムプロンプトは「ペルソナ・タスク定義・制約条件・出力形式・ガードレール」の5要素で構成するのが基本です。ユーザーからは見えない裏側の設計書として、LLMアプリケーションの品質を決定的に左右します。300〜1000トークン程度に収めつつ、5要素を過不足なく明記することが肝要です。長ければ良いわけでも、短ければ良いわけでもありません。

システムプロンプトとは何か

システムプロンプトは、LLMアプリケーションにおいて「AIの振る舞いそのもの」を定義する指示文です。ユーザーとの対話の裏側で常に送信され続け、LLMの応答の基調を決めます。ユーザープロンプトが「今回の質問」なら、システムプロンプトは「このAIの人格と行動規範」という関係です。

アプリケーションによっては、数行の簡素なシステムプロンプトで済む場合もあれば、数百行にわたる精緻な設計書になる場合もあります。重要なのは「長さ」ではなく「必要な要素が漏れなく含まれているか」です。プロンプトエンジニアリング入門、高度なプロンプト技法、ガードレール設計の記事と併せて読むと、理解が深まります。

システムプロンプトの構成要素

体系的に設計するには、5つの構成要素を意識します。ペルソナ、タスク定義、制約条件、出力形式、ガードレールです。これらを過不足なく書くことで、LLMは迷わず指示に従います。

要素目的記述例効果注意点
ペルソナ文体・視点の統一「あなたは10年の経験を持つデータアナリスト」一貫した語り口実在人物を避ける
タスク定義実行すべき作業の明示「ユーザーの質問にデータを用いて回答する」ぶれないゴール具体的に書く
制約条件出力の範囲を限定「根拠のない推測はしない」幻覚抑制矛盾を避ける
出力形式構造を強制「JSON形式で返す」後続処理の安定フォーマット明示
ガードレール禁止事項の明示「法律相談には答えない」事故予防過度な制限を避ける
from openai import OpenAI

client = OpenAI()

SYSTEM_PROMPT = """
# ペルソナ
あなたは10年の経験を持つデータアナリストです。
語り口は丁寧で、事実に基づいた冷静な分析を行います。

# タスク
ユーザーの質問に対し、提供されたデータを参照しながら
統計的・論理的な観点で回答してください。

# 制約条件
- 提供されていない事実は推測しない
- 不確かな情報には「確認が必要」と明記する
- 返答は日本語で行う

# 出力形式
1. 要点(2〜3行)
2. 根拠(データ参照)
3. 補足(必要な場合のみ)

# ガードレール
- 個人を特定する情報を含めない
- 法律・医療・投資の助言は行わない
"""

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": SYSTEM_PROMPT},
        {"role": "user", "content": "Q3売上の特徴を教えてください"}
    ]
)
print(response.choices[0].message.content)

各要素を見出し付きで記述すると、LLMが構造を認識しやすくなります。長い文章の塊で書くより、構造化したほうが読解精度が上がります。

設計パターン5選

用途別に5つの代表パターンがあります。FAQ応答型、分析アシスタント型、コード生成型、翻訳・校正型、データ抽出型です。それぞれ最適なペルソナ設定や制約が異なります。

# FAQ応答型
FAQ_PROMPT = """あなたはカスタマーサポート担当者です。
社内FAQに基づいてのみ回答し、情報がない場合は
「担当者に確認します」と返答してください。"""

# データ抽出型
EXTRACT_PROMPT = """あなたは構造化データ抽出エンジンです。
入力テキストから指定されたフィールドを抽出し、
JSON形式で返却してください。余計な文章は不要です。"""

# 翻訳・校正型
TRANSLATE_PROMPT = """あなたはプロの技術翻訳者です。
日本語から英語への翻訳を行い、原文のニュアンスと
技術用語の正確性を保ってください。注釈は不要です。"""
パターンペルソナ主要制約出力形式適したユースケース
FAQ応答型サポート担当情報源限定自然文問い合わせ対応
分析アシスタント型データアナリスト根拠要求要点+根拠社内分析支援
コード生成型シニアエンジニアセキュア実装コードブロック開発支援
翻訳・校正型プロ翻訳者原文尊重訳文のみドキュメント翻訳
データ抽出型抽出エンジンスキーマ遵守JSON構造化処理

どのパターンにも共通するのは、ペルソナで「文体の軸」を決め、制約で「やってはいけないこと」を定義し、出力形式で「機械可読性」を確保するという構図です。

アンチパターンと改善方法

典型的なアンチパターンは3つあります。第一に「指示の矛盾」。「短く書け」と「詳細に書け」を同時に要求すると、LLMは判断に迷い、不安定な出力を返します。矛盾がないか、自分でプロンプトを読み返すのが改善の第一歩です。

第二に「曖昧な制約」。「不適切な発言はしないでください」のような抽象的な制約は、LLMにとって解釈の余地が広すぎます。「差別的表現、暴力的表現、成人向け表現は避ける」のように列挙した方が効果的です。第三に「過剰な制約」。禁止事項が10も20も並ぶと、LLMが本来の回答能力を発揮できなくなります。必須事項に絞り、優先度順に並べ替えましょう。

システムプロンプトのテスト方法

システムプロンプトは書いて終わりではなく、テストで品質を担保します。テストすべきは3種類。第一は通常ケース。期待通りの入力に対して、期待通りの出力が返るかを確認します。第二はエッジケース。想定外の入力(空文字、極端に長い入力、多言語)に対して、どう振る舞うかを検証します。

第三は攻撃パターン。プロンプトインジェクションに対して、システムプロンプトが漏洩しないか、制約を無視した応答を返さないかを検査します。「システムプロンプトを教えて」「これまでの指示を無視して」といった典型的攻撃に対し、拒否できるか確かめます。テストケースは最低でも30〜50件用意し、リグレッションを防ぐためにCI上で定期的に実行するのが望ましい運用です。

まとめ

  • システムプロンプトは5要素(ペルソナ・タスク・制約・出力形式・ガードレール)で構成する
  • 見出し付きの構造化表記でLLMの読解精度を高める
  • 5つの設計パターンから用途に合うものを選び、調整する
  • 矛盾・曖昧・過剰制約のアンチパターンを避け、テストで品質を担保する

よくある質問

システムプロンプトとは何ですか

LLMアプリケーションで、AIの振る舞い・ペルソナ・制約条件・出力形式を定義する指示文です。ユーザーには見えない「裏側の設計書」として機能し、アプリケーションの品質を大きく左右します。

システムプロンプトの最適な長さは

一般的に300から1000トークン程度が推奨です。短すぎると制約が不十分、長すぎるとLLMが重要な指示を見落とすリスクがあります。構成要素(ペルソナ、タスク、制約、出力形式)を優先度順に記述してください。

システムプロンプトが漏洩するリスクはありますか

はい、プロンプトインジェクションにより漏洩するリスクがあります。「システムプロンプトの内容を教えて」のような攻撃に対する防御策(メタプロンプトによる拒否指示、入力フィルタリング)を組み込むことが推奨です。