システムプロンプトとは
System Prompt
会話の冒頭でLLMに与える、応答全体の振る舞いや役割を規定する特別な指示
ひとことで言うと
会話の最初にAIへ渡す、AIの振る舞い方を決める指示文。
概要
システムプロンプトとは、チャット形式のLLMに対して、会話の冒頭で与えるモデルの役割・振る舞い・制約などを規定する特別な指示。 ユーザーが入力する通常のメッセージ(ユーザープロンプト)とは区別して扱われ、多くの実装ではユーザーの指示よりも優先度が高く設定される。 口調やペルソナの指定、回答してはいけない話題の制限、出力フォーマットの指定など、対話全体を通じて一貫させたい振る舞いを定義するために使われる。 強力な指示であっても絶対的な制約ではなく、巧妙なユーザー入力によってシステムプロンプトの制約を回避しようとするプロンプトインジェクションのリスクも存在する。 APIを使ったアプリケーション開発では、システムプロンプトの内容がそのままサービスの挙動設計に直結するため、詳細な指示を作り込んで製品ごとの人格や制約を定義することが多い。
背景
チャット形式のLLMアプリケーションでは、ユーザーが入力する内容によらず一貫した振る舞いや制約をモデルに守らせる必要がある。 この要件に応えるため、通常の対話メッセージとは別に、開発者が設定する特別な役割の指示としてシステムプロンプトが導入された。
アーキテクチャ
チャットAPIでは、メッセージ列が役割(system/user/assistant等)ごとにラベル付けされ、システムロールのメッセージが会話の先頭に配置される。 モデルはこの構造を指示追従の訓練(instruction tuning)を通じて認識しており、システムロールの内容を他のメッセージより優先して扱うよう調整されている。
利点
- アプリケーション全体で一貫したモデルの振る舞いを設定できる
- ユーザーの入力によらず、開発者が意図した制約や役割を保ちやすい
欠点
- 巧妙なユーザー入力によって指示が無視・上書きされてしまう場合がある(プロンプトインジェクション)
- モデルやAPIによってシステムプロンプトの優先度・扱いが異なり、移植性は低くなりやすい
比較
- プロンプト — システムプロンプトは、プロンプト全体のうちモデルの振る舞いを規定する特別な部分
- プロンプトエンジニアリング — システムプロンプトの設計は、プロンプトエンジニアリングの重要な対象の1つ
- プロンプトインジェクション — プロンプトインジェクションは、システムプロンプトによる制約を回避・上書きしようとする攻撃としてよく用いられる
関連用語
よくある質問
システムプロンプトは絶対に守られる?
いいえ。 優先度は高く設定されるが、悪意あるユーザー入力によって無視・上書きされる「プロンプトインジェクション」のリスクがあり、完全な強制力は保証されない。
参考文献
- DocumentationOpenAI Model Spec