Menu

プロンプトテンプレートの例と作り方

プロンプトテンプレートとは、すでに試して効果を確かめたプロンプトに、毎回変わる部分の空欄を設けたものです。穴埋め式のテンプレートをコピーして使い、自分のベストなプロンプトを5つのステップでテンプレートにする方法を紹介します。

このページのプロンプトはすべて編集でき、そのまま ChatGPT や Claude などの AI アプリで開けます。

プロンプトテンプレートとは、空欄のあるプロンプトです。固定部分には、ある種類のタスクで良い答えを得るためにわかったことがすべて入っています。役割、形式、制約です。空欄には毎回変わるものが入ります。トピック、言語、作業対象のテキストです。空欄を3つ埋めるほうがプロンプトを書くより早く、答えの質と形もそろいます。

下のテンプレートは、どんなプログラミングの概念でもあなたのレベルに合わせて説明します。入力欄に自分の値を入れ、パートをオフにしてそれぞれが何を担っているかを確かめてから、コピーするかチャットアプリで開いてください。

自分のレベルに合わせて概念を説明してもらう
Fill in
Parts
あなたは独学でプログラミングを学ぶ人のための、辛抱強い講師です。
JavaScript のクロージャを説明してください。
私は変数、関数、配列はすでに知っています。自分で実行できる小さな例から学ぶのがいちばん身につきます。
太字のラベルを付けた3つのパートで答えてください。1文で表した考え方、重要な行にコメントを付けた短いコード例、よくある間違いを1つ。
300字以内に収めてください。私が知っているものとして挙げていない用語が必要なら、短く説明してください。
Try it
Example replyReplies vary between models and runs.

考え方:クロージャとは、外側の関数の実行が終わったあとでも、自分が作られた場所の変数を覚えている関数のことです。

例:

function makeCounter() {
  let count = 0;
  return function () {
    count += 1; // still sees count from makeCounter
    return count;
  };
}

const next = makeCounter();
console.log(next()); // 1
console.log(next()); // 2

よくある間違い:2つのカウンターが1つの合計を共有すると思いこむこと。makeCounter() を呼ぶたびに新しい count が作られるので、カウンターはそれぞれ自分の値を持ちます。

良いテンプレートの条件

テンプレートの質は元になったプロンプトの質で決まるので、固定部分は、すでに実行して満足したプロンプトにしてください。役に立つテンプレートと、平凡な答えを早く出すだけのフォームを分けるのは、3つの選択です。

変わるところだけを空欄にする。 答えを常に300字以内にしたいなら、300 を固定部分に書いてください。空欄の1つ1つは、使うたびにもう一度決めなければならない判断です。空欄が10個あるテンプレートは、プロンプトを新しく書くより埋めるのに時間がかかります。

すべての空欄にわかりやすい名前と妥当なデフォルトを付ける。 {{既に知っていること}} なら何を入力すればよいかがわかりますが、{{x}} ではわかりません。デフォルトは期待される値の種類を示し、何も入力せずに一度テンプレートを実行することもできます。

1つの仕事に1つのテンプレート。 空欄しだいで概念の説明も、コードレビューも、クイズの作成もするテンプレートは、3つの別々のテンプレートより3つともうまくできません。固定部分が具体的なほど、形式と基準について多くを語れます。

プロンプトの書き方の6つの要素は、固定部分のチェックリストとして役立ちます。役割、タスク、コンテキスト、入力、形式、制約。空欄はたいていタスク、コンテキスト、入力の中に入ります。

プロンプトテンプレートの例

次の3つは、よくある日常の仕事をカバーしています。それぞれに埋める名前付きの欄があります。すぐ使えるプロンプトをもっと見たいなら、プロンプト例を参照してください。

特定の読み手向けに要約する
Fill in
<text> タグの中の文章を、2分しか時間のないマネージャー向けに要約してください。箇条書きは最大3つまでにしてください。読み手がしなければならない判断や行動があれば最初に書き、不要な背景は省いてください。 <text> ここに文章を貼り付け </text>
Try it
小さな関数を書く
Fill in
数値のリストを受け取って中央値を返す Python の関数を書いてください。言語に型ヒントがあれば使ってください。入力が空のときはValueError を出してください。関数のあとに、呼び出し例を3つ、期待される結果をコメントにして付けてください。コードだけを返してください。
Try it
Example replyReplies vary between models and runs.
def median(numbers: list[float]) -> float:
    if not numbers:
        raise ValueError("median() needs at least one number")
    ordered = sorted(numbers)
    middle = len(ordered) // 2
    if len(ordered) % 2 == 1:
        return ordered[middle]
    return (ordered[middle - 1] + ordered[middle]) / 2


# median([3, 1, 2])     returns 2
# median([4, 1, 3, 2])  returns 2.5
# median([])            raises ValueError
メッセージに返信する
Fill in
<message> タグの中のメッセージへの返信を書いてください。目的:丁寧に断り、代わりに来月の日程を提案する。トーン:親しみやすく簡潔に。150字以内で、メッセージや目的にない事実は足さないでください。 <message> こんにちは!14日の勉強会で、あなたのプロジェクトについて短く話していただけませんか? </message>
Try it
Example replyReplies vary between models and runs.

お声がけいただきありがとうございます。思い出していただけてうれしいです!あいにく14日は都合がつきません。代わりに来月の日程ではいかがでしょうか。そのときはぜひプロジェクトについてお話しさせてください。

よろしくお願いします。 [あなたの名前]

貼り付けた文章をタグで囲んでいるのには理由があります。埋めたテキストに指示のように見える文が含まれていることがあり、区切り文字があれば、モデルがテンプレートの指示と作業対象の素材を取り違えずに済みます。

自分用のテンプレートの作り方

  1. うまくいったプロンプトから始める。答えが正しく出た会話を選び、プロンプトの最終版を集めます。フォローアップのメッセージで足さなければならなかった修正も含めてください。その修正こそが最も価値のある部分で、最初の版が間違えたことを直しているからです。
  2. 次に変わるところに印を付ける。プロンプトを読み、次に使うときに書き換える言葉すべてに下線を引きます。たいていは2〜4か所です。主題、読み手、長さ、貼り付ける入力などです。
  3. それぞれを名前付きの空欄に置き換える。空欄は使うツールが期待する形で書きます。手で貼り付けるプロンプトなら [読み手]、コードなら {audience} のようにします。
  4. 3通りの埋め方で試す。典型的なケースを1つ、とても短いかとても長い入力を1つ、珍しいケースを1つ使います。どれかが失敗するなら、固定部分がまだ最初の使い方について何かを前提にしています。プロンプトの反復改善で説明しているように、一度に1文ずつ変えてください。
  5. 見つけられる場所に保存する。メモのファイル、テキスト展開ツール、スニペット管理ツールなど、どれでもかまいません。探さないと見つからないテンプレートは、そのうち使われなくなります。

コードの中のテンプレート

プログラムの中では、テンプレートは名前付きのフィールドを持つ文字列です。Python の str.format() でそれを埋めます。

SUMMARY_TEMPLATE = """Summarize the text inside the <text> tags for {audience}.
Use at most {bullets} bullet points and lead with any action the reader must take.

<text>
{text}
</text>"""

with open("notes.txt", encoding="utf-8") as f:
    meeting_notes = f.read()

prompt = SUMMARY_TEMPLATE.format(
    audience="a manager who has two minutes",
    bullets=3,
    text=meeting_notes,
)

str.format() では、テンプレート内のそのまま出したい波括弧をすべて2つ重ねる({{ と }})必要があり、テンプレートに JSON の例を含めるときに問題になります。meeting_notes の中のコードのように、渡す値の中の波括弧はエスケープ不要です。AI アプリを作るためのライブラリには独自のテンプレートクラスを持つものもありますが、やっていることは、フォーマット文字列にいくつかの機能を足したものと同じです。

値がユーザーから来る場合、テンプレートはその人のテキストをモデルに送ることを忘れないでください。区切り文字の中に入れ、悪意のある入力に悪用されうるツールやデータをモデルに与えないでください。

テンプレートかシステムプロンプトか

テンプレートとシステムプロンプトは、別々の問題を解決します。システムプロンプトには、会話やアプリのすべてのメッセージに適用されるルールを入れます。ペルソナ、トーン、アシスタントが絶対にしてはいけないことなどです。テンプレートには、空欄のある1つのタスクを入れます。アプリではよく両方を使います。基本ルールを決める固定のシステムプロンプトと、各ユーザーメッセージを組み立てるテンプレートです。

よくある質問

プロンプトテンプレートとは何ですか?

プロンプトテンプレートとは、使うたびに変わる部分を [トピック] や {language} のようなプレースホルダーにした、再利用できるプロンプトです。固定部分にはすでに試した指示が入っていて、毎回ゼロからプロンプトを書く代わりに空欄を埋めて使います。

自分用のプロンプトテンプレートはどう作ればいいですか?

すでに良い答えが得られたプロンプトから始めます。次に使うときに変える言葉に印を付け、それぞれを名前付きの空欄に置き換え、珍しいケースを1つ含む3通りの埋め方でテンプレートを試します。最初の答えを良くした指示は、そのまま残してください。

プロンプトテンプレートはどこに保存すればいいですか?

すぐにコピーできる場所ならどこでもかまいません。メモのファイル、テキスト展開ツール、スニペット管理ツールなどです。チャットアプリにも、カスタム指示やプロジェクトの指示のように繰り返し使うテキストを置く場所がありますが、そこは空欄のある1回きりのタスクより、すべてのメッセージに適用されるルールに向いています。

Python でプロンプトテンプレートを使うには?

テンプレートを名前付きのフィールドを持つ文字列として保存し、str.format() や f 文字列で埋めます。str.format() では、テンプレートに JSON の例を含める場合のように、そのまま出したい波括弧は2つ重ねて({{ と }})書きます。ユーザーが入力したテキストは、指示と分かれるよう区切り文字の中に入れてください。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める