← レッスンに戻る
第2章 · プロンプトエンジニアリング

System Prompt と役割設定

System Prompts and Roles · 約 10 分

重要キーワード

English日本語説明
System Prompt システムプロンプト 会話の前提・役割・ルールを指定する固定指示
Role 役割 user / assistant / system の 3 種。会話履歴の意味を区別する
Persona ペルソナ AI に与える人格や立場 (例: 経験豊富な PM)
Prompt Caching プロンプトキャッシング 長い system プロンプトの入力料金を割引する仕組み

System Prompt (システムプロンプト)

Claude API では、メッセージとは別に system prompt を指定できます。 ここには、Claude の役割・トーン・制約 を書きます。

client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=1024,
    system="あなたは親切な料理のプロです。家庭で作れるレシピだけを提案してください。",
    messages=[{"role": "user", "content": "夕食のアイデアをください"}],
)

役割 (Role) を与える効果

system / user / assistant

よくある system prompt のテンプレート

あなたは {role} です。

## タスク
{task}

## 出力フォーマット
{format}

## 制約
- {constraint_1}
- {constraint_2}

## 知らない場合
事実が分からない場合は「わかりません」と答えてください。推測しないでください。

system に置くと効くもの

種類
役割 「あなたは経験 10 年のシニア SRE です」
トーン 「Slack でのカジュアルな返答スタイルで」
言語 「常に日本語で答えてください」
出力形式 「常に JSON で {result, reasoning} を返す」
知識ベース 「以下の社内ガイドラインを優先 (10,000 字)」
拒否ルール 「医療診断は行わない」

Tip 1: 具体例を system に置いて Cache を効かせる

長く繰り返し使う few-shot 例は、user メッセージに毎回入れるより system に固定で置く ほうが prompt caching が効きやすくコスト削減になります。 これは第 4 章で詳しく扱います。

Tip 2: system は 1 回だけ 設計、user は毎回変わる

system は アプリケーションが固定する 文字列、 user は ユーザー入力が動的に入る 箇所と捉えると設計しやすいです。

同じユーザー質問でも system で答えが変わる

実際に system を変えて挙動の違いを見てみましょう。

▶ 禅僧モード
人生とは何ですか?
▶ 大将モード
人生とは何ですか?

演習問題

演習 1: ペルソナ駆動でツーンを変える

同じユーザー質問 に対して、system を 3 種類変えて応答を比べてみましょう。

質問: 「リモートワークで集中力を保つコツを教えてください」

system 案: 1. 「あなたは脳科学の研究者です。エビデンスベースで答えてください。」 2. 「あなたは Slack で雑談する同僚です。カジュアルに 2 文で答えてください。」 3. 「あなたは禅僧です。比喩を使った短い指南を返します。」

スタータープロンプト:
リモートワークで集中力を保つコツを教えてください。
ヒントを見る

Playground の system 欄を入れ替えて 3 回送るのが手早いです。同じ user メッセージでも応答の文体・語彙・密度がガラッと変わるのを観察しましょう。

演習 2: Refusal を組み込む system を書く

ユーザーが医療相談をしたら丁寧に断り、診断を避けて受診を勧める safety system を書いてください。

テストプロンプト (user 側): 「最近頭が痛くて吐き気もします。何の病気ですか?」

スタータープロンプト:
最近頭が痛くて吐き気もします。何の病気ですか?
ヒントを見る

良い system は 断りつつ役に立つ バランスを持ちます。「絶対に答えない」ではなく「適切に役立つ範囲で答える」設計を心がけましょう。

理解度チェック

  1. Claude API でモデルの役割を最初に固定する場所は?
    1. 最初の user メッセージ
    2. system パラメータ
    3. assistant メッセージ
    4. URL クエリ
  2. system prompt の効果でないのは?
    1. トーンの安定
    2. 不適切な話題の回避
    3. モデルサイズの自動切替
    4. フォーマットの一貫性
  3. 繰り返し使う few-shot 例を system に置く利点は?
    1. Prompt caching が効きやすくコスト削減
    2. モデルが速くなる
    3. API キーが不要になる
    4. user 入力が無料になる
  4. 「ユーザー入力が変わるたびに毎回変える」べき場所は?
    1. system
    2. user
    3. assistant
    4. model
解答と解説を見る
  1. B — system パラメータが「人格・前提条件」を担います。
  2. C — モデルサイズは API 呼び出し側で指定するもので、system では切り替わりません。
  3. A — system に長い固定テキストを置くと cache hit が増えやすくなります。
  4. B — user が可変、system は固定が基本です。