「同じような質問をしているのに、サービスによってAIの答え方がまるで違う」
そんな場面に出くわしたこと、ありませんか。
種明かしをすると、利用者から見えないところで別の指示が先に渡されています。
その指示を置くための枠が、システムプロンプトと呼ばれるもの。
AIの役割・口調・禁止事項をあらかじめ固定しておく土台が、その正体です。
システムプロンプトは会話の前提条件を置く枠
チャット画面で私たちが打ち込む文章は、モデルから見ると user という役割のメッセージとして届きます。
対してシステムプロンプトは、その会話が始まる前から積まれている別枠の指示。
Anthropic の Messages API では、system がメッセージ配列の外側に置かれたトップレベルのパラメータとして定義されていました。
Anthropic の Messages API リファレンスには「Messages API の入力メッセージに system というロールは存在しない」という趣旨の注記も添えられています。
会話ログと同じ列に並べて渡す形ではない、という点がまず押さえどころ。
一方 OpenAI の API では、developer という役割のメッセージがこの枠にあたります。
呼び名も渡し方もベンダーによって違うものの、「毎回の質問より先に効く指示を、別の場所から与える」という考え方は共通しているのです。
user に書くのと何が違うのか
同じ内容なら user 側に書いても良さそうに思えます。
けれど両者は、指示が衝突したときの扱いがはっきり違う。
OpenAI の Model Spec は、この優先順位を chain of command という言葉で整理しています。
権限は上から Root、System、Developer、User、Guideline の順に並び、developer の指示は user に優先すると定められていました。
同社のテキスト生成ガイドでも、developer の位置づけは「user メッセージより先に優先されるアプリケーション開発者」。
だからこそ「敬語を崩さない」「社外秘の話題には触れない」といった業務上の制約は、システムプロンプト側に置く価値があるのです。
利用者が途中で「タメ口で話して」と頼んでも、開発者が敷いた土台のほうが上に立つ。
変えてほしくない約束ごとを user の善意に委ねない、という設計判断そのものが、この枠を使う理由になります。
何を書き、何を書かないか
システムプロンプトに向いているのは、会話が何往復しても変わらない情報です。
具体的には、担当する役割、想定読者、出力フォーマット、扱ってよい話題の範囲あたり。
逆に毎回変わる入力データや長大な資料を丸ごと詰め込むのは相性が悪いといえます。
理由は単純で、システムプロンプトも会話全体と同じ枠を消費するから。
限られた枠をどう配分するかという話は、コンテキストウィンドウの記事で詳しく整理しました。
長ければ長いほど従順になる、というものでもありません。
指示が増えるほど互いに矛盾しやすくなり、どれを優先すべきかモデルが判断できなくなる場面が出てきます。
短い禁止事項をいくつか並べるほうが、長い作文より効くことも珍しくないのです。
実運用で引っかかりやすい3つの点
書き方以上に、運用面での落とし穴を知っておくと事故が減ります。
中身は秘密ではない
まず、システムプロンプトを機密情報の置き場にしてはいけません。
巧妙な指示でその内容を吐き出させる手口が知られており、ここに API キーや社内の非公開データを書くのは危険な設計。
この種の攻撃の仕組みは、プロンプトインジェクションの記事にまとめています。
上位のルールは越えられない
次に押さえたいのが、chain of command の上にある Root と System という層。
開発者がどう書いても、提供元が定めた安全上のルールを上書きすることはできないという前提。
「システムプロンプトで指示したのに従わない」と感じたときは、そもそも越えられない線に当たっていないかを先に疑うと早いですね。
書き換えるとキャッシュが効かなくなる
そして意外と見落とされるのが、料金面への影響です。
システムプロンプトは毎回のリクエストに同じ内容が乗るため、キャッシュの対象として扱われる代表格。
先頭部分を固定しておけば、そこまでの計算結果を使い回して費用を抑えられます。
裏を返すと、先頭を1文字でも書き換えるとキャッシュが外れて費用が跳ね上がるわけです。
頻繁に差し替える文言は後ろへ、動かさない前提の文言は前へ。
この並べ方の作法については、プロンプトキャッシュの記事で扱いました。
最後に
システムプロンプトは、会話ごとの指示より一段上に置かれる、変わらない前提を書く枠でした。
Anthropic では system パラメータ、OpenAI では developer ロールと入口は違っても、狙いは同じところにあります。
守ってほしい約束を user の入力から切り離せる、これがいちばんの利点。
長く書けば効くわけではないので、まずは役割と禁止事項を数行で置くところから始めてみてください。
以上です。













コメントを残す