第2章 · Prompt Engineering
System Prompt と役割設定
System Prompts and Roles
→ で次のスライド · F でフルスクリーン · N で講師ノート · Esc で終了
重要キーワード
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: 会話の前提・人格・ルールを定義 (会話の最初に 1 つ)。
- 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 を変えて挙動の違いを見てみましょう。
▶ 禅僧モード
人生とは何ですか?▶ 大将モード
人生とは何ですか?Hands-on Exercise
演習: ペルソナ駆動でツーンを変える
同じユーザー質問 に対して、system を 3 種類変えて応答を比べてみましょう。
質問: 「リモートワークで集中力を保つコツを教えてください」
system 案: 1. 「あなたは脳科学の研究者です。エビデンスベースで答えてください。」 2. 「あなたは Slack で雑談する同僚です。カジュアルに 2 文で答えてください。」 3. 「あなたは禅僧です。比喩を使った短い指南を返します。」
Hands-on Exercise
演習: Refusal を組み込む system を書く
ユーザーが医療相談をしたら丁寧に断り、診断を避けて受診を勧める safety system を書いてください。
テストプロンプト (user 側): 「最近頭が痛くて吐き気もします。何の病気ですか?」
🎉
まとめ
お疲れ様でした!