プロンプト設計の基本原則

役割・文脈・タスク・制約・出力形式・例示。安定した結果を得るためのプロンプト構成と、よくある失敗の直し方。

#プロンプトの基本構成

良いプロンプトは、だいたい次の要素でできている。すべてを毎回書く必要はないが、結果が不安定なときはどれが欠けているかを疑う。

要素内容例
役割誰として振る舞うか「あなたは経験豊富なテクニカルライターです」
文脈背景、対象読者、目的「社内の非エンジニア向けに配布する資料です」
タスク何をするか(動詞で)「以下の仕様書を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. 最小のプロンプトで試す
  2. 失敗パターンを観察する
  3. 失敗に対応する制約・例を1つ追加する
  4. 再度試す

一度に全部盛り込むより、失敗を見てから足す 方が結果的に短く安定したプロンプトになる。

#まとめ

  • 役割・文脈・タスク・制約・形式・例示の6要素
  • 曖昧語を排し、入力はタグで区切り、形式を指定
  • 「分からないときの振る舞い」を必ず書く
  • 失敗を観察して1つずつ直す