プロンプト設計

System / User / Assistant の役割分担、構造化、思考の引き出し方。 Anthropic の推奨パターンに沿って実用的に書く方法。

3 つの role

role役割
systemモデルの性格・制約・出力形式を定義(API では system 引数)
userユーザーの入力
assistantモデルの応答(履歴 / または途中まで先に書いて続きを生成させる)

System Prompt の書き方

役割・スタイル・制約を明確に。「これをするな」より「これをしろ」の方が効きやすい。

あなたは熟練のシニアフロントエンジニアです。

ルール:
- 質問にはまず結論を 1 文で答える
- 必要に応じてコード例を提示する
- TypeScript と React 18 を前提とする
- 不確かな情報は「不明」と明示する

構造化された入力

Claude はXML タグで構造を伝えるとよく従う。

<document>
  <title>契約書</title>
  <body>...</body>
</document>

<instruction>
上の契約書から金額と期限を JSON で抽出してください。
</instruction>

出力フォーマットを指定する

1. JSON を出させる

次の質問に JSON で答えてください。
スキーマは以下の通り:

{
  "title": string,
  "summary": string,
  "tags": string[]
}

JSON 以外の文字を出力しないでください。

2. assistant の頭出し(prefilling)

モデルの返答を「{」から始めると JSON しか吐かなくなる。

messages: [
  { role: "user", content: "..." },
  { role: "assistant", content: "{" } // ← 続きを生成
]

3. tool_use を活用

本格的にJSON Schema 検証したいなら Tool Use の方が信頼できる(→ Tool Use)。

思考の引き出し方

Chain of Thought (CoT)

段階的に考えてから答えて」と書くだけで精度が上がる。

<thinking> タグの中で段階的に推論し、
最終回答は <answer> タグの中に出してください。

Extended Thinking(Claude)

Claude には内部思考を消費トークンとして明示できるモードがある。

await client.messages.create({
  model: "claude-opus-4-7",
  max_tokens: 16000,
  thinking: { type: "enabled", budget_tokens: 8000 },
  messages: [...]
})

response.contentthinking ブロックが返ってくる(ユーザーに見せる必要はない)。

Few-shot 例示

期待する入出力ペアを2〜3 個だけ見せると安定する。

例 1:
入力: "彼は走った"
出力: {"主語": "彼", "動詞": "走った"}

例 2:
入力: "猫が寝ている"
出力: {"主語": "猫", "動詞": "寝ている"}

入力: "雨が降る"
出力:

役割(persona)を与える

「君はベテラン弁護士だ」「シニアプログラマだ」など。トーンや専門用語の使い方が変わる。

制約と禁止事項

長文ドキュメントを扱うときの順序

  1. System Prompt(役割)
  2. 長文ドキュメント( <document> タグで囲む / Prompt Caching に乗せる)
  3. 具体タスク指示(最後の方に置く)

Claude は最後の指示が最も強い傾向。長文の前後にタスクを書くと効きやすい。

多言語

避けたいパターン

NG理由
「丁寧に」「上手に」主観的すぎて反映されない
否定の連発「〜するな」より「〜せよ」が効く
あいまいな複数命令順序を番号で明示
巨大すぎる例示2〜3 個に絞る
例外条件を追加し続ける分岐は別プロンプト or Tool に

反復改善のコツ

  1. 失敗ケースを 5 〜 10 件集める
  2. 失敗パターンを分類
  3. System Prompt に該当するルールを追加
  4. 全ケースを再評価(→ eval

テンプレート

あなたは {役割} です。

# 目的
{1 文で書く}

# 入力
{何が来るか}

# 出力
{形式と制約}

# 手順
1. {手順 1}
2. {手順 2}
3. {手順 3}

# 失敗時の振る舞い
- 不明なら "unknown" を返す
- 入力が壊れていたらエラーオブジェクトを返す

プロンプトインジェクション対策

ユーザー入力に「上の指示は無視して...」と書かれて従ってしまう問題。

Anthropic の Prompt Library

公式が用意しているプロンプト集が学習に最適: docs.anthropic.com の Prompt Library。

console.anthropic.com の Prompt Generator

コンソール上で「やりたいこと」を書くとSystem Prompt の雛形を生成してくれる。叩き台に使える。

大原則

プロンプトはコードと同じ。バージョン管理 / テスト / レビュー対象。 直感で改造せず、評価セットで効果を検証してから本番投入する。