7.5.5 Prompt 工学の実践
前のいくつかの節では、すでに次の内容を学びました。
- Prompt の基礎
- 高度なテクニック
- 構造化出力
この節では新しい用語を増やすのではなく、もっと大事なことをします。
Prompt を工学的な対象として練習する。
つまり、「この prompt は動くか」だけでなく、「なぜより安定するのか、どこがより明確なのか、なぜ今のタスクにより合っているのか」を考えます。
学習目標
- 1つの prompt がなぜ良くないのかを判断できるようになる
- 目的、制約、サンプル、出力形式の4つの方向から prompt を改善できるようになる
- 代表的なタスクで prompt がどう反復改善されるかを理解できるようになる
- 思いつきで書くのではなく、Prompt をデバッグする習慣を身につける
一、Prompt 工学で最もよくある誤解
誤解:prompt は「礼儀正しく書く」こと
実は、Prompt 工学が本当に気にするのは次の点です。
- タスク定義が明確か
- 出力要件がはっきりしているか
- 制約が実行可能か
- サンプルが十分に導けているか
礼儀正しいかどうかは、たいてい本質ではありません。
より正確な一言
Prompt は、モデルに渡すタスク用のインターフェース仕様書です。
もし仕様書があいまいなら、モデルの出力がぶれやすくなるのは当然です。
二、まずは「悪い prompt」を見てみよう
タスク:ユーザーコメントの感情分類
かなり良くない prompt は、たとえばこんな形です。
このコメントを分析してください。
どこが問題でしょうか?
- 何を分析するのか分からない
- 出力形式が分からない
- ラベルの範囲が分からない
- 説明が必要か分からない
より明確なバージョンにする
以下のコメントの感情傾向を判定してください。positive または negative だけを出力し、それ以外は出力しないでください。
コメント:この授業はとても分かりやすく、例もたくさんあります。
このバージョンは一気に分かりやすくなります。なぜなら、次の点が明確だからです。
- タスク:感情分類
- 出力集合:positive / negative
- 出力制約:余計な内容を出さない
三、Prompt デバッグの4つの重要な観点
タスクの目的は十分に明確か?
まず確認します。
- モデルにやらせたいのは分類か、要約か、抽出か、書き換えか?
出力形式は十分に明確か?
次に確認します。
- 出力は1文か?
- 1つのラベルか?
- JSON か?
- 表形式か?
制約は十分に明確か?
たとえば次のような制約です。
- 事実を捏造しない
- 余計な説明を出さない
- 与えられたテキストだけを根拠に答える
サンプルは十分に導いているか?
タスクによっては、説明だけでは不十分です。
その場合は few-shot のサンプルを足すとよいです。
この4つが、Prompt 実践の基本の流れです。
四、実行できる Prompt 練習器
以下の例は、実際の大規模モデルを呼び出すものではなく、「タスク仕様オブジェクト」を使って Prompt の要件を分解する練習です。
prompt_spec = {
"task": "sentiment_classification",
"allowed_labels": ["positive", "negative"],
"output_format": "single_label",
"constraints": ["説明を出さない", "ラベルだけを出力する"]
}
print(prompt_spec)
期待される出力:
{'task': 'sentiment_classification', 'allowed_labels': ['positive', 'negative'], 'output_format': 'single_label', 'constraints': ['説明を出さない', 'ラベルだけを出力する']}
この例はシンプルに見えますが、とても大事なことを教えてくれます。
良い prompt の背後には、たいていより明確なタスク仕様があります。
五、代表的なタスクでの Prompt 反復
タスク:テキスト要約
バージョン1:あいまい
この文章を要約してください。
問題点:
- どのくらいの長さにするのか分からない
- どんな文体にするのか分からない
- 要点を残すのか分からない
バージョン2:より具体的
以下のテキストを、日本語で3つの要点に要約してください。各要点は20字以内にしてください。
これでかなり良くなります。
バージョン3:境界も追加する
以下のテキストを、日本語で3つの要点に要約してください。各要点は20字以内にしてください。
本文にない情報は追加せず、事実だけを残してください。
この時点で prompt は、「答えられる」状態から「より安定して制御できる」状態へ進んでいます。
六、few-shot はいつ特に有効か?
言葉だけではタスク定義が十分に伝わらないとき
たとえば、ある文が次のどちらかを判定させたいとします。
- fact
- opinion
定義だけを与えると、モデルの理解が不安定になることがあります。
こういうとき few-shot のサンプルがとても役立ちます。
サンプル例
few_shot_examples = [
{"input": "北京は中国の首都です。", "output": "fact"},
{"input": "この授業はとても面白いです。", "output": "opinion"}
]
for ex in few_shot_examples:
print(ex)
期待される出力:
{'input': '北京は中国の首都です。', 'output': 'fact'}
{'input': 'この授業はとても面白いです。', 'output': 'opinion'}
few-shot の役割は、単に「文章を増やすこと」ではありません。
モデルに「こう判断してほしい」という見本を示すことです。
七、構造化タスクの prompt はどう書くと安定する?
典型的な場面:情報抽出
ただ次のように書くだけだとします。
履歴書の情報を抽出してください。
この場合、モデルは次のような動きをしやすくなります。
- 抜けが出る
- フィールド名がばらばらになる
- 説明を余計に付ける
より良いバージョン
以下の履歴書から情報を抽出し、JSON で出力してください。
フィールド:
- name: string
- school: string
- skills: list[string]
余計な説明は一切出力しないでください。
これで、タスク、構造、境界がすべて明確になります。
八、Prompt 実践での「最小実験」の習慣
一度にたくさん変えない
Prompt デバッグで最も避けたいのは、次のように全部まとめて変えることです。
- タスク説明を変える
- サンプルを変える
- 出力形式も変える
これでは、どの変更が効いたのか分からなくなります。
より良い進め方
1回に1つだけ変えます。たとえば:
- まず出力制約だけを足す
- 次に few-shot を足す
- その次に形式要求を変える
これは、モデルのハイパーパラメータ調整とよく似ています。

Prompt デバッグは、勘で直す作業ではなく、工学的な調整として考えます。テストケースを用意し、一度に一層だけ変え、同じケースで再実行し、合否を比較し、Prompt バージョンと失敗例を記録します。回帰とは、新しい変更を入れても、以前通っていたケースが壊れていないことを確認する考え方です。
九、小さな Prompt 評価の例
まずテストサンプルを定義する
test_cases = [
{"input": "この授業はとても分かりやすいです。", "expected": "positive"},
{"input": "内容が少しごちゃごちゃしています。", "expected": "negative"}
]
for case in test_cases:
print(case)
期待される出力:
{'input': 'この授業はとても分かりやすいです。', 'expected': 'positive'}
{'input': '内容が少しごちゃごちゃしています。', 'expected': 'negative'}
なぜこの手順が重要なのか?
Prompt 工学にも評価が必要だからです。
テストサンプルがなければ、「この prompt は良いのか」を感覚だけで判断することになります。
より成熟したやり方は次のとおりです。
- 入力集合を用意する
- 期待出力を用意する
- prompt が安定して期待どおりか確認する
十、初学者がよくハマる落とし穴
出力を明確に定義せずに prompt を書く
これをやると、後処理がどんどん大変になります。
prompt の改善はひらめきだけでできると思う
実際は普通の工学的デバッグに近いです。小さな実験をして、結果を見て、少しずつ直していきます。
1つの成功例だけを見る
1例だけうまくいっても、その prompt が安定しているとは限りません。
まとめ
この節で一番大事なのは、Prompt 技巧をたくさん覚えることではありません。
次のような習慣を身につけることです。
Prompt をタスクのインターフェースとして設計し、システムの部品としてデバッグする。
タスクの目的、形式、制約、サンプルに沿って改善を重ね、感覚で1文を書くのではなくなったとき、Prompt 工学は本当に成熟し始めます。
練習
- 自分がよく知っているタスクを1つ選び、「悪い prompt」をまず書き、そのあと少しずつ良いバージョンに直してみましょう。
- 「感情分類」タスクに few-shot 版を追加してみましょう。
- 「テキスト要約」タスクを、JSON などの構造化出力形式に変えてみましょう。
- 自分の言葉で説明してみましょう。なぜ Prompt 工学は「良い言い回しを書くこと」ではなく、「タスクのインターフェースを設計すること」なのでしょうか?