GEO

システムプロンプト

システムプロンプトとは、LLMに対して「あなたは誰で、何をすべきで、何をすべきでないか」を伝え、会話全体の枠組みを設定する最上位の指示です。エンドユーザーが書くユーザープロンプトとは異なり、システムプロンプトはアプリ開発者によって注入され、すべてのターンを通じて効力を持ち続けます。

システムプロンプトとは、LLMに対して「あなたは誰で、何をすべきで、何をすべきでないか」を伝え、会話全体の枠組みを設定する最上位の指示です。エンドユーザーが書くユーザープロンプトとは異なり、システムプロンプトはアプリ開発者によって注入され、すべてのターンを通じて効力を持ち続けます。

なぜ重要なのか

システムプロンプトは、LLMベースの製品の「デザイン言語」です。ユーザーがどれだけ自由にプロンプトを書こうとも、よく練られたシステムプロンプトは、モデルの応答を定義された役割、トーン、制限の範囲内に保ちます。ChatGPT、Claude、Geminiのチャットボットから、AI検索エンジン、コーディングエージェント、サポートボットに至るまで、あらゆるLLMアプリはシステムプロンプトを通じてその個性を形作っています。

構成要素

役割: 「あなたはSaaSブログ運営者を支援するマーケティングコピーライティングの専門家です。」モデルが応答する視点を固定します。

目標: 「ユーザーが素早くブログ記事の下書きを作るのを手伝ってください。」会話の方向性を設定します。

制約: 「日本語のみで回答してください。」「コード例は出さないでください。」「最大300文字。」望ましくない挙動を事前にブロックします。

トーン: 「親しみやすくも専門的に、誇張なしで。」ブランドボイスの一貫性を保ちます。

出力形式: 「回答を###の小見出しで構成してください。」後処理を減らします。

ナレッジカットオフ: 「情報が古くなっている可能性がある場合は注記してください。」ハルシネーションのリスクを軽減します。

ツールの説明: function-callingエージェントの場合、利用可能なツールの一覧と説明をシステムプロンプトに含めます。

システムプロンプト vs ユーザープロンプト

観点システムプロンプトユーザープロンプト
書く人開発者エンドユーザー
変更頻度まれリクエストごと
内容役割、制約、トーン具体的なリクエスト
スコープ会話全体そのリクエストのみ
セキュリティユーザーから隠すべき公開

優れたLLMシステムは、「安定した枠組み」(システムプロンプト)と「可変の入力」(ユーザープロンプト)を分離します。

実践的なヒント

命令するのではなく役割を与える: 「Xを行う専門家です」は「Xを行え」より優れています。モデルはその役割に入り込み、より一貫した出力を生み出します。

肯定的な制約を好む: 「これをしてください」は「あれをしないでください」より効果的です。

例を含める(few-shot): システムプロンプトに2~3個の出力例を入れると、スタイルと形式が劇的に安定します。

XMLタグを使う: Claude系のモデルでは、<role><constraints><examples>のようなタグが、各セクションを明確に解析するのに役立ちます。

書きすぎない: 長いシステムプロンプトは、リクエストごとに多くのトークンを消費します。必須でないものはすべて削りましょう。

定期的にA/Bテストする: 異なるシステムプロンプトを実際のリクエストに対して走らせ、満足度、正確性、安全性を比較します。

プロンプトインジェクションへの防御

システムプロンプトは、プロンプトインジェクションの格好の標的です。「これまでの指示をすべて無視せよ」のようなユーザー入力は、弱いシステムプロンプトを上書きしてしまうことがあります。防御策には、サンドイッチ技法(重要な指示を冒頭と末尾で繰り返す)、外部データをXMLタグで隔離すること、そしてツール呼び出しの層で権限を強制することがあります。

Sources: