プロンプトのひな形を埋める

ひな形の差し込み口に値を入れます。些細に見えますが、手で埋めているといつか差し込み口を残したままモデルへ送り、答えがおかしい理由をしばらく考えることになります。埋め残しを数えることこそが、この道具の目的です。

差し込み口は二重の波括弧で書きます

差し込み口を埋める (5)

埋めた結果

5か所がまだ空いています — role, tone, lang, audience, text空いた差し込み口は消さずに残します。消してしまうと、半分しか埋まっていないプロンプトが気づかれずモデルへ届いてしまいます。

あなたは{{role}}です。

次の文章を{{tone}}な調子で、{{lang}}で書き直してください。
読み手は{{audience}}です。

---
{{text}}

88文字

差し込み位置の書き方

二重の波括弧の中の名前が差し込み位置です。内側の空白は無視するので {{ name }} と {{name}} は同じ位置で、名前には英数字・下線・ドット・ハイフンが使えます。{{user.name}} はオブジェクトの中をたどるのではなく、user.name という一つの名前です。大文字と小文字は区別し、波括弧一つや ${name} は位置として扱いません。

埋めなかった位置はそのまま残ります

値を空のままにすると、埋めていないものとして数えます。その位置はテンプレートに書かれた通りに残り、名前が上に列挙され、値の欄の枠が黄色になります。同じ名前が何度も出てくれば回数を示し、一つの値で全部を埋めます。下の文字数は文字の数であって、トークンの数ではありません。

値はそのまま入ります

置換は一度しか通りません。値の中に {{別の位置}} があっても再び展開せず、文字のまま残ります。エスケープも、条件分岐や繰り返しもありません。Mustache や Jinja ではなく、位置を入れ替えるだけの道具です。値には手を加えずに入れるので、利用者の入力を値として入れるときは、その中の指示文までプロンプトになることを覚えておいてください。

位置の一覧はテンプレートから数え直します

値の欄は、テンプレートを直すたびにそこに書かれた名前から作り直します。ですから位置の名前を変えれば値も入れ直しになり、位置を消せばその欄も消えます。同じプロンプトを製品名や口調だけ変えて何度も使うとき、変わる場所を位置として書いておけば値を差し替えるだけで済みます。入れた値は保存されず、画面を閉じれば消えます。

差し込み位置として扱われないもの

名前に使えるのは英字・数字・アンダースコア・ドット・ハイフンです。{{名前}} のように日本語で書いたり、{{first name}} のように空白が入ったりすると差し込み位置とみなされず、文字のまま残り、埋めていない位置としても数えません。三重の波括弧 {{{x}}} は内側の二重だけを位置として読むので、値の両側に波括弧が一つずつ残ります。エスケープはないので、{{ を文字として残したければ、中に空白を入れて名前の規則から外すのが一つの手です。

値の欄は一行です

値は一行の欄に入れるので、改行を含められません。複数の段落が要る位置、たとえば翻訳する原文や会話の例は、値ではなくテンプレート本文に直接書き、変わる語だけを位置にしてください。下の文字数は JavaScript の文字列長なので、絵文字一つが二つと数えられます。

よくある質問

埋めなかった差し込み口はどうなりますか

消さずにそのまま残します。空文字に置き換えてしまうと、欠けたプロンプトを気づかず送ることになるからです。埋め残しの数は結果の上に出ます。

差し込み口はどう書きますか

名前を二重の波括弧で包めば差し込み口になります。同じ名前を繰り返せば、値を一つ入れるだけで全部が埋まります。

埋め残すとどうなりますか

空のままの数を数えて知らせます。それがこの道具の要点です — 埋まったプロンプトは一見それらしく、残った一つがモデルに届くと、静かに間違った答えを生みます。

`{{Name}}` と `{{name}}` は同じ位置ですか?

別の位置です。大文字と小文字を区別するので値の欄が二つでき、片方だけ埋めるともう片方は埋めていない位置として残ります。同じ値を入れるつもりなら、テンプレートの側で名前を揃えてください。

貼り付けたものはサーバへ送られますか

送られません。すべてブラウザの中で動き、送信も保存もしません。だからこそ、ふつうならウェブページに貼り付けない社内の設定ファイルや本番のクエリにも使えます。通信を切ったままでも動きます。