AI・機械学習
中級
システムプロンプト(システムプロンプト)
LLM のAPI呼び出し時に設定する、モデルの振る舞い・人格・制約を定義する特別なプロンプト。ユーザーの入力(ユーザープロンプト)とは別に最初に渡され、会話全体を通じてモデルの応答スタイル・トーン・出力形式・安全ガードレールを制御する。
0 回閲覧
0 いいね
システムプロンプトとは
システムプロンプト(System Prompt)は、LLM の API 呼び出し時に role: "system" として設定する特別な指示テキストである。ユーザーが入力するメッセージ(ユーザープロンプト)とは独立に、モデルの基本的な振る舞いを定義する。ChatGPT の「Custom Instructions」や Claude の「System」フィールドがこれに相当する。
システムプロンプトの役割
| 役割 | 説明 | 例 |
|---|---|---|
| ペルソナ設定 | モデルに特定の専門家・キャラクターを演じさせる | 「あなたは10年経験のDevOpsエンジニアです」 |
| 出力制約 | 回答の形式・長さ・言語を制限 | 「JSON形式で回答。日本語のみ使用」 |
| 安全ガードレール | 禁止事項・倫理的制約を設定 | 「個人情報や機密情報は生成しない」 |
| ドメイン知識注入 | 業務固有の用語定義・ルールを提供 | 「当社の製品名一覧: ...」 |
| トーン制御 | 回答のフォーマリティ・親しみやすさを調整 | 「カジュアルな口調で、絵文字は使わない」 |
API での設定方法
主要な LLM API でのシステムプロンプトの設定方法は以下の通り。
OpenAI API:
messages: [
{role: "system", content: "あなたは..."},
{role: "user", content: "質問..."}
]
Anthropic API (Claude):
system: "あなたは...",
messages: [
{role: "user", content: "質問..."}
]
Google Gemini API:
system_instruction: "あなたは...",
contents: [{role: "user", parts: [{text: "質問..."}]}]
効果的なシステムプロンプトの設計原則
- 構造化: XMLタグや Markdown のセクション分けで指示を整理。Claude は
<instructions>タグとの相性が良い - 優先順位の明示: 矛盾する指示がある場合の優先ルールを明記(例: 「安全性 > 有用性 > 簡潔性」)
- 具体例の埋め込み: 期待する出力例を1〜2個含める
- ネガティブ指示の最小化: 「やらないでください」の羅列よりも「常に○○してください」の方が効果的
- テスト可能な基準: 「適切に回答」ではなく「200字以内で3つの箇条書きで回答」
システムプロンプトの長さとパフォーマンス
- 短い(100〜500トークン): レスポンス速度への影響が最小。基本設定向け
- 中程度(500〜2,000トークン): ドメイン知識注入に適切。多くのユースケースで推奨
- 長い(2,000〜10,000トークン): 詳細なルール・知識ベースを含む。コスト増に注意
- 注意: システムプロンプトは毎回のAPI呼び出しで送信されるため、トークンコストに直結する。Anthropic の Prompt Caching を活用すると長いシステムプロンプトのコストを最大90%削減可能
FAQ
Q1: システムプロンプトはユーザーに見えますか?
A1: API レベルでは通常ユーザーには非公開だが、プロンプトインジェクション攻撃で内容を抽出される可能性がある。機密情報(APIキー等)はシステムプロンプトに含めるべきではない。
Q2: システムプロンプトとユーザープロンプトの指示が矛盾したらどうなりますか?
A2: モデルによって挙動が異なる。OpenAI の GPT-4o はシステムプロンプトを優先する傾向が強く、Claude もシステムプロンプトの指示を重視するが、巧妙なユーザー入力で上書きされるケースがある。
Q3: システムプロンプトなしでも LLM は使えますか?
A3: 使えるが、モデルのデフォルト動作に依存するため出力が不安定になりやすい。本番アプリケーションでは必ずシステムプロンプトを設定して出力品質と一貫性を担保すべき。