プロンプトエンジニアリングとは?例・タグ・出力形式で指示を整える

オンライン文書の版番号:未確認
AIに同じ仕事を頼んでも、伝え方によって答えが変わるものです。この記事では、プロンプトの基本を踏まえた指示の作り方を説明します。例に使うのは、架空の読書会に届いた文の分類です。
プロンプトエンジニアリングとは
プロンプトエンジニアリングは、AIに求める答えが返るよう、指示や渡す情報を組み立て、結果を見て直す作業です。OpenAIは、条件に合う出力を安定して得るための指示を書く過程と説明しています。
最初に、何が返れば目的を満たすかを決めてください。この記事の例では、「読書会への短い文を質問・要望・感想のどれかに分類し、ラベルを1つ返す」が条件です。単に「文を読んで」と頼むより、結果を確かめる基準が明確になります。
ゼロショットは例を見せずに頼む
ゼロショットプロンプティングは、見本の入出力を渡さずに頼む方法です。作業と対象の文を直接伝えます。
次の文を「質問」「要望」「感想」のどれかに分類してください。
答えはラベル1語だけにしてください。
文:次回は席を増やしてほしいです。
ここでは「分類する」という作業に加え、選べるラベルと返す語数を指定しました。ゼロショットは「短い指示」という意味ではありません。見本を含まないことが、次のフューショットとの違いです。
この文なら「要望」を期待します。ただし、図と例文は説明用に作ったもので、特定のモデルが実際に返した結果ではありません。OpenAIの推論モデル向けガイドでは、まずゼロショットを試し、必要なら例を加えるよう案内しています。
フューショットは入出力の例を見せる
フューショットプロンプティングは、少数の見本を指示に加える方法です。先ほどの作業と対象の文は保ち、分類済みの文を追加します。
次の文を「質問」「要望」「感想」のどれかに分類してください。
答えはラベル1語だけにしてください。
例1 文:開始時刻は何時ですか? 答え:質問
例2 文:会場を広くしてほしいです。 答え:要望
例3 文:読書会が楽しかったです。 答え:感想
文:次回は席を増やしてほしいです。
答え:
図の青い「指示」と白い「対象の文」は、ゼロショットの図と同じです。フューショットでは緑の「見本の入出力」が間に入り、ラベルの使い分けと、答えを1語にする形の両方を示せます。
例は実際の用途に近いものを選び、書式もそろえてください。質問ばかりを並べるより、分類したい種類を含めたほうが、示したい区別が伝わるでしょう。Googleは例を入れることを勧め、Anthropicは用途に近く多様な例を勧めています。一方、OpenAIの推論モデル向けガイドはゼロショットから試す立場です。例の必要性は、使うモデルと作業に合わせて確かめます。
プロンプトをタグで区切る
指示、見本、分類する文が長くなると、各内容の範囲が分かりにくくなります。そのときは、<instructions>と</instructions>のような開始タグと終了タグで囲んでください。タグの名前には、中身が分かる語を使います。
<instructions>
読書会に届いた文を「質問」「要望」「感想」のどれかに分類してください。
答えはラベル1語だけにしてください。
</instructions>
<examples>
文:開始時刻は何時ですか? 答え:質問
文:会場を広くしてほしいです。 答え:要望
文:読書会が楽しかったです。 答え:感想
</examples>
<input>
次回は席を増やしてほしいです。
</input>
<examples>の内側は見本、<input>の内側は今回分類する文です。見本の文を新しい指示と読み違えないよう、役割を示せます。資料を参照させる作業では、<reference>のようなタグで資料を囲んでもよいでしょう。
Anthropicは、複雑なプロンプトで指示や資料などをXMLタグで分ける方法を案内しています。OpenAIとGoogleの資料にあるタグの例も、内容の境目を示すものです。ここで使うタグは、内容を整理するために書きます。チャットに書くだけで、XMLとしての形式検証や指示の優先順位の変更が起こるわけではありません。
出力形式を指定する
答えを後で読むのか、表へ写すのか、アプリで処理するのかによって、必要な形は違います。分類した結果を人が読むなら、ラベルを1語に限定すれば足りる場合もあるでしょう。理由も必要なときは、項目名と順序を指定します。
次の文を「質問」「要望」「感想」のどれかに分類してください。
次の2行だけを返してください。
分類:ラベルを1語
理由:判断の根拠を1文
文:次回は席を増やしてほしいです。
たとえば、期待する形は次のとおりです。これは書式を示すために作った例で、AIの実行結果ではありません。
分類:要望
理由:席数を増やす要望だからです。
「短く答えて」だけでは、項目や順序が定まりません。必要な行数、項目名、各項目の長さまで書くと、望む形式を示せます。ただし、文章で形式を指定しても、毎回その形になるとは限りません。
アプリがJSONを読み取る用途では、対応するAPIでスキーマを指定する方法があります。OpenAIの「Structured Outputs」は、定義したJSON Schemaに沿う出力を得るための機能です。ここまでのタグは入力側の区切り、出力形式の指定は答えの形、スキーマはAPI側の制約を扱います。
テンプレートを用意する
同じ分類を繰り返すときは、変わらない指示を残し、毎回変わる文だけを入れ替えるテンプレートにできます。次の{{分類する文}}は後で実際の文に置き換えるための目印です。この記法をチャットが自動で置換するという意味ではありません。
次の文を「質問」「要望」「感想」のどれかに分類してください。
答えはラベル1語だけにしてください。
<input>
{{分類する文}}
</input>
たとえば、最初は「次回は席を増やしてほしいです。」、次は「開始時刻は何時ですか?」を入れます。指示やラベルは同じままなので、依頼ごとに書き直すのは入力部分です。今回のように短い入力なら、<input>だけで十分でしょう。
テンプレートは再利用するための書き方であり、正しい分類を保証する機能ではありません。使う前に、質問・要望・感想の文をそれぞれ入れ、期待するラベルと余計な説明の有無を確かめます。曖昧な文で判断が分かれるなら、ラベルの定義を追加するか、確認が必要な文として扱うかを決めてください。
【注意】
例や書式を整えても、AIの答えが事実として正しいとは限りません。日時で変わる情報や重要な判断に使う内容は、出典や元の資料で確かめてください。プロンプトに渡す資料には、公開してよい情報だけを使います。
製品での使われ方
ClaudeやChatGPTなどのチャットでは、入力欄の文章に目的、条件、必要な資料を含められます。たとえばClaudeでチャットを始める手順では、メニュー案の数と説明の長さを指定しました。回答を途中で止め、元の指示を編集した場面もその例です。
APIを使うアプリでは、開発者の指示や出力形式の設定を利用者の入力とは別に渡せます。画面に見える文章だけが、AIへ渡る指示のすべてとは限りません。指示の種類はプロンプトとは?で説明しています。