system message は、AI にどう振る舞ってほしいかを、ユーザーの入力より先に置いておく上位の指示です。
初心者向けには、この会話ではこういう役割・ルールで答えて と最初に決めておく土台と考えると分かりやすいです。日本語では「システムプロンプト」と呼ぶことも多いです。
提供元によって呼び名も形も違う
同じ役割なのに、API ごとに置き場所が違うのが混乱しやすいところです。
- OpenAI … o1 以降のモデルでは
systemではなくdeveloperロールが現行の呼び名です。公式ドキュメントは developer メッセージをアプリ開発者からの指示で、ユーザーのメッセージより優先されると説明しています(Text generation)。指示の強さは platform(提供元) > developer(開発者) > user(利用者)の順という考え方(instruction hierarchy)が Model Spec で示されています - Anthropic(Claude) … メッセージのロールではなく、リクエストのトップレベルの
systemパラメータです。公式リファレンスはMessages API に入力メッセージ用の "system" ロールは存在しないと明記しています(Messages API) - チャットUIの「カスタム指示」 … 実体としては同じ層に近い機能です
移植のときは、system ロールで送ればどこでも同じ とは考えず、その API の現行仕様を確認するのが安全です。
何を書くか
- 役割(誰として答えるか)と読み手の前提
- 出力の形式と長さ、禁止事項
- 迷ったときの優先順位(
分からないときは推測せず、分からないと答えるなど)
何を書かないか
system message に入れた内容は、利用者から見えない保証がありません。 巧妙な入力で内容を吐き出させるプロンプトインジェクションは現実に起きるため、APIキー、社外秘の条件、個人情報は置かないのが原則です。
権限の制御は、system message の文章ではなく、そもそも AI に渡すデータと実行できる操作の側で絞ります。
近い用語との違い
- プロンプトエンジニアリング … 指示の書き方全体。system message はその一部
- few-shot … 例を見せる手法。system message はルールを置く場所
- ファインチューニング … モデル自体を学習で変える。system message は毎回の指示なのですぐ変更できる
あわせて見たい用語
実務での書き方は プロンプトエンジニアリングとは?実務で使える書き方を解説 で扱っています。