プロンプト設計の基本原則
役割・文脈・タスク・制約・出力形式・例示。安定した結果を得るためのプロンプト構成と、よくある失敗の直し方。
#プロンプトの基本構成
良いプロンプトは、だいたい次の要素でできている。すべてを毎回書く必要はないが、結果が不安定なときはどれが欠けているかを疑う。
| 要素 | 内容 | 例 |
|---|---|---|
| 役割 | 誰として振る舞うか | 「あなたは経験豊富なテクニカルライターです」 |
| 文脈 | 背景、対象読者、目的 | 「社内の非エンジニア向けに配布する資料です」 |
| タスク | 何をするか(動詞で) | 「以下の仕様書を800字以内で要約してください」 |
| 入力 | 処理対象のデータ | 「 |
| 制約 | やってはいけないこと、条件 | 「専門用語には注釈を付ける」「推測は書かない」 |
| 出力形式 | 構造、長さ、言語 | 「Markdownの箇条書き。見出しは3つ」 |
| 例示 | 望む出力のサンプル | 「例: ...」 |
#原則1: 具体的に、曖昧さを消す
悪い例:
この文章を良くして
良い例:
以下のメール文を、取引先への謝罪メールとして適切な敬語に直してください。
- 冒頭で謝罪、次に原因、最後に再発防止策の順
- 300字以内
- 言い訳に聞こえる表現は避ける
「良くする」「いい感じに」はモデルの解釈次第で結果がぶれる。何をどう変えたいか を書く。
#原則2: 文脈と目的を伝える
同じ「要約して」でも、経営者向けの1行サマリーと、エンジニア向けの技術要約はまったく違う。誰が・何のために読むか を書くだけで品質が大きく変わる。
#原則3: 入力データは区切る
長い入力は XML タグや区切り線で明示的に囲む。指示とデータが混ざるのを防ぎ、プロンプトインジェクションへの耐性も上がる。
次の <review> タグ内のレビューを分析し、感情(positive / negative / neutral)を判定してください。
<review>
(ここにレビュー本文)
</review>
#原則4: 出力形式を指定する
後続処理に使うなら JSON、人が読むなら Markdown。形式を指定すると再現性が上がる。
以下のJSON形式のみで回答してください。説明文は不要です。
{"sentiment": "positive" | "negative" | "neutral", "reason": "20字以内"}
API利用なら「構造化出力(JSON Schema 指定)」機能を使う方が確実。
#原則5: 例を示す(Few-shot)
言葉で説明しにくいトーンや形式は、実例を2〜3個 見せるのが最も効く。例は多様で、望ましい出力の代表になるものを選ぶ。
#原則6: 考えさせる
複雑な判断は、いきなり答えを求めず段階を踏ませる。
- 「まず論点を列挙し、次に各論点を検討し、最後に結論を出してください」
- 思考機能(extended thinking / reasoning)のあるモデルではそれを有効にする方が効果的
#原則7: 分からないときの振る舞いを決める
資料に書かれていないことは「資料に記載なし」と答えてください。推測で補わないでください。
これだけでハルシネーションがかなり減る。
#原則8: 長い指示は構造化する
システムプロンプトが長くなるときは、見出しや箇条書きで整理する。優先順位が重要なら「最も重要なルール」を先頭に置く。
#よくある失敗と直し方
| 症状 | 原因 | 直し方 |
|---|---|---|
| 毎回出力形式が違う | 形式指定がない | 出力形式を明示、例を付ける |
| 長すぎる/短すぎる | 長さ指定がない | 文字数・項目数を指定 |
| 的外れな回答 | 目的・読者が不明 | 文脈を追加 |
| 勝手に情報を補う | 「分からない場合」の指示なし | 「不明なら不明と言う」を追加 |
| 指示を一部無視 | 指示が多すぎる、矛盾 | 指示を減らす、優先順位を書く |
| 前置きが長い | 出力スタイル未指定 | 「前置きなしで結論から」と指示 |
#反復して改善する
- 最小のプロンプトで試す
- 失敗パターンを観察する
- 失敗に対応する制約・例を1つ追加する
- 再度試す
一度に全部盛り込むより、失敗を見てから足す 方が結果的に短く安定したプロンプトになる。
#まとめ
- 役割・文脈・タスク・制約・形式・例示の6要素
- 曖昧語を排し、入力はタグで区切り、形式を指定
- 「分からないときの振る舞い」を必ず書く
- 失敗を観察して1つずつ直す