System Prompt と役割設定
重要キーワード (4 語)
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 を変えて挙動の違いを見てみましょう。
人生とは何ですか?人生とは何ですか?