システムプロンプト
System Prompt
概要(サマリー)
システムプロンプトとは、AIに役割や守るべきルールをあらかじめ与えておく、会話の土台となる指示のことである。
利用者が入力するプロンプトが「その場の依頼」だとすれば、システムプロンプトは「業務マニュアル」にあたる。接客の前に「あなたは当店のスタッフです。敬語で話し、在庫にない商品は勧めないでください」と伝えておくようなものだ。この前提があるおかげで、利用者が何を聞いても振る舞いが安定する。
利用者からは見えない位置に置かれることが多く、会話が続いても効き続ける点が普通のプロンプトと違う。
詳細解説
3つの役割(role)
APIでAIを呼び出すとき、メッセージには役割が付く。主に3種類ある。
- system: 前提となる指示。開発者が設定する
- user: 利用者の発言
- assistant: AIの返答
messages = [
{"role": "system",
"content": "あなたは社内ヘルプデスクの担当者である。就業規則の範囲だけを答え、"
"判断に迷う内容は人事部への連絡を案内すること。丁寧語で簡潔に答える。"},
{"role": "user",
"content": "有給って入社してすぐ取れますか?"}
]
system に書いた内容は、そのあとどれだけ会話が続いても前提として残り続ける。一方 user の指示は、その場のやりとりに対する依頼として扱われる。
ChatGPTの「カスタム指示」やClaudeの「プロジェクト指示」も、仕組みとしてはこのシステムプロンプトにあたる。
何を書くとよいか
漠然と「優秀なアシスタントです」と書いても効果は薄い。効くのは具体的な制約である。
- 役割: 誰として振る舞うか(社内ヘルプデスク、コードレビュアー、校正者)
- 対象読者: 誰に向けて話すか(初心者向け、社内向け、顧客向け)
- 出力の形式: 箇条書きか、文章か、決まった項目を持つJSONか
- 口調: 丁寧語か常体か、絵文字を使うか
- やらないこと: 推測で答えない、医療・法律の判断をしない、外部リンクを貼らない
- 分からないときの答え方: 「資料に記載がありません」と答える、など
とくに最後の2つが効く。やってほしくないことと、答えられないときの振る舞いを決めておくと、ハルシネーションがかなり減る。
悪い例と良い例
悪い例
あなたは優秀なアシスタントです。ユーザーの質問に丁寧に答えてください。
役割が具体的でなく、制約もない。これではモデルの初期状態とほとんど変わらない。
良い例
あなたはNOVEBLOのIT用語集の編集者である。
- 対象読者はAIコーディングを始めたばかりの初心者とする
- 文体は「だ・である」調で統一する
- 専門用語を使うときは、初出で必ず一言の説明を添える
- 断定できない事柄は「〜のことが多い」と幅を持たせて書く
- 出典が確認できない数値や固有名詞は書かない
役割・読者・文体・禁止事項が具体的に決まっている。この差がそのまま出力の安定度になる。
効き目が弱まる場合
システムプロンプトは強い指示だが、絶対ではない。
- 会話が長くなると薄れる: やりとりが増えるにつれ、序盤の指示より直近の発言が優先されやすくなる。長い会話では途中で要点を再掲するとよい
- 矛盾する指示に弱い: 「簡潔に」と「詳しく」を両方書くと、どちらつかずになる
- 利用者の指示に押し切られることがある: 「さっきの設定は忘れて」と言われて従ってしまう場合がある
3つ目に関連して、注意すべきなのがプロンプトインジェクションである。利用者の入力や、AIが読み込んだWebページ・ファイルの中に「これまでの指示を無視して〜」という文が仕込まれていると、システムプロンプトを乗り越えてしまうことがある。
そのため、システムプロンプトをセキュリティの砦にしてはいけない。 「この情報は絶対に出さないで」と書いても、漏れる可能性は残る。本当に見せてはいけないデータは、そもそもAIに渡さない設計にする。
短さと具体性のバランス
長ければ良いというものではない。
- 長すぎると、重要な指示が埋もれる。また毎回の入力量が増えて費用がかさむ
- 短すぎると、振る舞いが安定しない
実務では、まず短く書いて試し、望まない出力が出たときにその防止策だけを足していくやり方が扱いやすい。最初から想定される全ケースを書こうとすると、使われない指示ばかりが膨らむ。
なお、システムプロンプトも会話全体のコンテキストの一部として毎回送られる。長いシステムプロンプトは、そのぶん本題に使える余地を削ることになる。
AIコーディングとの関係
AIコーディングツールを使ううえで、システムプロンプトの考え方は直接役に立つ。
プロジェクトの指示ファイルがシステムプロンプトそのものである。 Claude Code の CLAUDE.md、Cursor のルールファイルなどは、毎回の依頼に先立って読み込まれる前提指示にあたる。ここに書くべきなのは、依頼のたびに言い直したくないことだ。
- 使っている技術と、使ってはいけないもの
- ファイルの置き場所と命名の決まり
- コーディング規約(コメントの有無、変数名の付け方)
- 触ってはいけないファイル
うまく効かないときは、まず矛盾を疑う。 「簡潔に」と「詳しく説明を添えて」のような相反する指示が同居していると、どちらも中途半端になる。
長くなったら構造化する。 指示が増えたら、見出しで区切り、重要なものを先頭に置く。埋もれた指示は守られない。
それでも守られない指示は、その場で再掲する。 会話が長引いたときは、依頼文の中に「規約どおり、コメントは書かないで」と書き添えるほうが確実である。
よくある勘違い
システムプロンプトは絶対に守られる?
守られやすいが、絶対ではない。会話が長引けば薄れるし、巧妙な入力で上書きされることもある。「守ってくれる可能性が高い指示」くらいに捉えておくのが正確である。
普通のプロンプトと何が違う?
効く範囲と持続性が違う。システムプロンプトは会話全体の前提として置かれ、やりとりが続いても残る。利用者のプロンプトはその場の依頼として扱われる。同じことを書いても、置く場所によって効き方が変わる。
秘密の情報を書いておけば安全?
安全ではない。システムプロンプトの内容は、工夫された質問によって引き出されうる。APIキーや個人情報のような、漏れてはいけないものを書く場所ではない。
長く詳しく書くほど精度が上がる?
一定までは上がるが、長すぎると重要な指示が埋もれ、費用も増える。短く始めて、問題が出たときにその対策だけを足していくほうが結果的に精度が高い。
まとめ
- システムプロンプトは、AIの役割やルールをあらかじめ与える会話の土台となる指示である
- 会話が続いても効き続ける点で、その場の依頼である通常のプロンプトと異なる
- 役割・読者・形式・禁止事項・分からないときの答え方を具体的に書くと安定する
- 絶対的な強制力はなく、会話の長さや巧妙な入力で薄れることがある
- 秘密の保持をシステムプロンプトに頼らない。見せられない情報は渡さない設計にする
情報ソース
- Claude Docs: Giving Claude a role with a system prompt
- OpenAI Platform Docs: Text generation and prompting
より詳しくAIに聞いてみよう
- システムプロンプトと通常のプロンプトの違いを、具体例つきで説明してください。
- 効果の高いシステムプロンプトを書くために、最低限含めるべき項目を教えてください。
- 会話が長くなるとシステムプロンプトが効きにくくなる理由と、その対策を教えてください。
- システムプロンプトに機密情報を書くべきでない理由を、具体的なリスクとあわせて教えてください。
- AIコーディングツールの指示ファイルに何を書くと、毎回の指示が減らせますか。