LLM のAPI呼び出し時に設定する、モデルの振る舞い・人格・制約を定義する特別なプロンプト。ユーザーの入力(ユーザープロンプト)とは別に最初に渡され、会話全体を通じてモデルの応答スタイル・トーン・出力形式・安全ガードレールを制御する。
システムプロンプト(System Prompt)は、LLM の API 呼び出し時に role: "system" として設定する特別な指示テキストである。ユーザーが入力するメッセージ(ユーザープロンプト)とは独立に、モデルの基本的な振る舞いを定義する。ChatGPT の「Custom Instructions」や Claude の「System」フィールドがこれに相当する。
| 役割 | 説明 | 例 |
|---|---|---|
| ペルソナ設定 | モデルに特定の専門家・キャラクターを演じさせる | 「あなたは10年経験のDevOpsエンジニアです」 |
| 出力制約 | 回答の形式・長さ・言語を制限 | 「JSON形式で回答。日本語のみ使用」 |
| 安全ガードレール | 禁止事項・倫理的制約を設定 | 「個人情報や機密情報は生成しない」 |
| ドメイン知識注入 | 業務固有の用語定義・ルールを提供 | 「当社の製品名一覧: ...」 |
| トーン制御 | 回答のフォーマリティ・親しみやすさを調整 | 「カジュアルな口調で、絵文字は使わない」 |
主要な 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: "質問..."}]}]
<instructions> タグとの相性が良いA1: API レベルでは通常ユーザーには非公開だが、プロンプトインジェクション攻撃で内容を抽出される可能性がある。機密情報(APIキー等)はシステムプロンプトに含めるべきではない。
A2: モデルによって挙動が異なる。OpenAI の GPT-4o はシステムプロンプトを優先する傾向が強く、Claude もシステムプロンプトの指示を重視するが、巧妙なユーザー入力で上書きされるケースがある。
A3: 使えるが、モデルのデフォルト動作に依存するため出力が不安定になりやすい。本番アプリケーションでは必ずシステムプロンプトを設定して出力品質と一貫性を担保すべき。