システムプロンプト設計(システムプロンプトセッケイ)
LLMのシステムプロンプト(System Message)を体系的に設計・最適化する技術領域。モデルのペルソナ・制約・出力形式・安全性ガードレールを定義し、アプリケーションの品質と安全性を制御する。
システムプロンプト設計とは
システムプロンプト設計は、LLM ベースのアプリケーションにおいてシステムメッセージ(System Message / System Prompt)を体系的に構築・最適化する技術領域です。ユーザーからの入力を処理する前にモデルの振る舞いを規定する「憲法」としての役割を果たし、出力品質・安全性・一貫性を制御する基盤技術です。
システムプロンプトの構成要素
効果的なシステムプロンプトは通常、以下の要素で構成されます。
| 構成要素 | 目的 | 例 |
|---|---|---|
| ロール定義 | モデルのペルソナと専門性を設定 | 「あなたはPostgreSQL専門のDBエンジニアです」 |
| タスク定義 | 実行すべきタスクの範囲と方法 | 「ユーザーのSQLクエリを最適化してください」 |
| 出力制約 | フォーマット・長さ・言語 | 「JSON形式で回答。500トークン以内」 |
| 安全性ルール | 禁止事項とガードレール | 「DROP/TRUNCATE文は提案しない」 |
| コンテキスト | 参照すべき背景情報 | 「データベースはPostgreSQL 16, テーブル定義は…」 |
| フォールバック | 対応不能時の振る舞い | 「不明な場合は推測せず質問してください」 |
プロンプト構造化パターン
XML タグによる構造化
Claude や GPT-4o では XML タグを使ったセクション分離が効果的です。
<role>PostgreSQL専門エンジニア</role>
<constraints>
- 破壊的DDLは提案しない
- 本番環境向けにCONCURRENTLYオプションを推奨
</constraints>
<output_format>JSON with explanation field</output_format>
Anthropic の公式ドキュメントでは、XML タグの使用により指示遵守率が平均15%向上すると報告されています。
マークダウンによる階層化
OpenAI のモデルではマークダウン形式のヘッダーとリストによる階層化が効果的です。GPT-4o のシステムプロンプトガイドでは、セクションを ## ヘッダーで区切り、制約を箇条書きリストで列挙することが推奨されています。
安全性設計(Constitutional AI の応用)
システムプロンプトに安全性ルールを組み込む際の設計パターンとして、Anthropic の Constitutional AI の原則を応用する手法があります。
- 明示的禁止: 具体的な禁止行動を列挙(「個人情報を生成しない」「医療診断を行わない」)
- 階層的優先順位: 安全性ルール > ユーザー指示 > デフォルト動作の優先順位を明記
- 拒否テンプレート: 禁止事項に抵触した場合の定型応答を定義
- プロンプトインジェクション対策: ユーザー入力をデータとして扱い、指示として解釈しないよう制御
評価と反復改善
システムプロンプトの品質は定量的に評価可能です。代表的な評価指標として、指示遵守率(Instruction Following Rate)、出力フォーマット一致率、安全性違反率、タスク成功率が使われます。
Anthropic の Prompt Playground、OpenAI の Evals、LangSmith のプロンプトバージョニングなど、A/Bテストと回帰テストを支援するツールが充実しています。
FAQ
Q: システムプロンプトの最適な長さはどの程度ですか?
A: 500〜2,000トークンが実用的な範囲です。長すぎるとモデルが指示の優先順位を見失い、短すぎると制約が不十分になります。重要な制約を冒頭に配置し、補足情報を後半に配置する「逆ピラミッド構造」が効果的です。
Q: システムプロンプトはモデルごとに書き分ける必要がありますか?
A: はい。Claude は XML タグ、GPT-4o はマークダウン形式が効果的など、モデルごとに最適な構造が異なります。また、モデルの安全性フィルターの厳しさも異なるため、ガードレールの粒度を調整する必要があります。
Q: システムプロンプトのバージョン管理はどうすべきですか?
A: Git でバージョン管理し、変更ごとに評価スイートを実行する CI/CD パイプラインの構築が推奨されます。LangSmith や Braintrust などのプラットフォームはプロンプトのバージョニングと回帰テストを統合的に管理できます。