アプリがClaudeの返信をそのままユーザーに送る場合、誰も事前にチェックしません。Claudeが書いた内容がそのままユーザーに届きます。そのため、Claudeは返信がどこに送られるのか、どのような見た目であるべきか、何を省くべきかを知る必要があります。
プロンプトを明確かつ直接的にするには、Claudeにコンテキスト、希望する出力形式、制約という3つの要素を与えます。それぞれが、新しく入った同僚がタスクを始める前にあなたに尋ねるであろう質問に答えるものです。
Claudeを推測させてしまうプロンプト
歯科医院の予約アプリが、来院前日に各患者にリマインダーをテキストメッセージで送るとします。このアプリは、Claudeに一行のタスクと4行のデータを送り、返ってきた内容をそのまま患者にテキストメッセージで送ります。ある患者向けのプロンプトは次の通りです。
この予約のリマインダーを書いてください。
患者: Dana Okafor
日付: 木曜日、3月12日
時間: 午後2時30分
治療内容: 根管治療、2回目の来院
Claudeは次のような返信を送ってきました。アプリが送信する文字をすべて確認できるよう、生のテキストとして表示しています。
**予約リマインダー**
Danaさん、こんにちは
これは、近日中に予定されている歯科のご予約についてのリマインダーです。
**日付:** 木曜日、3月12日
**時間:** 午後2時30分
**治療内容:** 根管治療(2回目の来院)
**来院前にお願いしたいこと:**
- 10分ほど前にお越しください。
- 施術後、数時間は口の中が麻痺している可能性がありますので、事前に軽めの食事を済ませておいてください。
- 歯科医師から別の指示がない限り、処方されている薬は服用を続けてください。
- 前回の来院以降、痛みや腫れ、仮詰めに関する問題があった場合はお知らせください。
予約の変更やご質問がある場合は、少なくとも24時間前までに[電話番号]までお電話ください。
ご来院をお待ちしております!
[医院名]
アプリはこの内容をすべてそのままDanaさんにテキストメッセージとして送ってしまいますが、その多くは彼女の携帯電話にふさわしくない内容です。
- アスタリスクとハイフンは、太字とリストを表すMarkdown記法です。携帯電話ではこれらはただの文字として表示されます。
- 食事や早めの来院についてのアドバイスは診療に関する助言であり、本来は歯科医師から伝えられるべき内容です。
- 「根管治療(2回目の来院)」という文言は、Danaさんのロック画面に表示される可能性があり、他の人にも見られてしまいます。
- 「[電話番号]」と「[医院名]」は空欄のままで、テキストメッセージが送信される前に誰も埋めていません。
これらの不具合は、いずれもプロンプトに書かれていなかった情報に起因しています。このリマインダーがテキストメッセージであること、誰も事前にチェックしないこと、ロック画面で他の人にも見られる可能性があることは、一切述べられていません。リマインダーがどの範囲をカバーすべきかも書かれておらず、医院名や電話番号も与えられていません。そのため、Claudeは一般的なリマインダーを書き、情報がない箇所は空欄のままにしたのです。
返ってくる結果は、主に何を入力したかによって決まります。プロンプトの言い回しを練り直す前に、まずClaudeに不足している事実を与えましょう。
同僚ならどう尋ねるかを考える
不足している情報を見つけるには、このアプリを見たことのない同僚にこのプロンプトを渡す場面を想像してみてください。その同僚は、このプロンプトだけを頼りにリマインダーを書かなければなりません。もし同僚が困惑するなら、Claudeも同じように困惑します。
一言も書き始める前に、その同僚はあなたにいくつか質問をするはずです。それぞれの質問は、プロンプトに加えられる3つの要素のいずれかを指し示しています。
| 要素 | Claudeに伝える内容 | 同僚が尋ねる質問 |
|---|---|---|
| コンテキスト | 返信が何のためのものか、どこに送られるのか、誰が読むのか | 「これはテキストメッセージですか、それともメールですか? 誰からのものですか? 送信前に誰かがチェックしますか?」 |
| 出力形式 | 返信の見た目、例えば長さやMarkdownが使えるかどうか | 「どのくらいの長さにすべきですか? 太字やリストを使えますか?」 |
| 制約 | 返信が守るべき範囲、または省くべき内容 | 「治療内容の名前を出すべきですか? アドバイスを含めるべきですか?」 |
同僚のそれぞれの質問に対して、プロンプト内のふさわしい部分で答えましょう。
コンテキスト、形式、制約を加える
コンテキストは事実として述べ、出力形式と制約は指示として書きます。Claudeがその目的を推測できないような指示には、理由を添えましょう。
以下の、予約アプリの完成したプロンプトでは、同僚の質問に3つの段落で答えています。それぞれがコンテキスト、出力形式、制約に対応しています。
各要素を入れた場合と入れなかった場合で、このプロンプトを試してみてください。どの返信も、そのプロンプトに対してClaudeから実際に得られたものを記録したものです。
新しいプロンプトで試してみる
では、今度は自分でプロンプトを明確かつ直接的なものにしてみましょう。天気アプリが、Claudeの返信をそのまま、人々が午前7時にロック画面で読むプッシュ通知として送るとします。このアプリのプロンプトは、Claudeに一行のタスクといくつかのデータだけを与えています。
この予報の通知を書いてください。
都市: Portland
午前: 曇り、48°F
午後: 午後3時から大雨
風: 最大瞬間風速35mph
このアプリを見たことのない同僚なら、あなたに何を尋ねるかを考えてみてください。そして、その質問に答えるコンテキスト、出力形式、制約を選んでください。それぞれ選んだ後、なぜそれが正しいのか、あるいは間違っているのかを読んでみましょう。
天気アプリのプロンプトには「この予報の通知を書いてください」としか書かれていません。Claudeにコンテキストを与えるために、どの一文を追加しますか?
通知はロック画面に収まる必要があります。出力形式としてどの一文を追加しますか?
同じプロンプトが毎朝実行され、毎日新しい予報が入ります。制約としてどの一文を追加しますか?
次に進むには
アプリが使用する前に返信を修正する必要がある場合は、プロンプトが答えずに残した質問を探しましょう。自分のコード内でプロンプトを修正するには、次の手順を順に進めてください。
- あなたのアプリを見たことのない同僚を想像し、タスクに取り掛かる前に彼らが何を尋ねるかを考えます。
- プロンプト内で、それぞれの質問にコンテキスト、出力形式、制約として答えます。コンテキストは事実として述べ、Claudeがその目的を推測できない指示には理由を添えます。
- 新しいプロンプトを、アプリからの複数の入力とともに送信します。
- アプリが送信する文字をすべて確認できるよう、各返信を生のテキストとして読みます。アプリで表示できないMarkdown、誰も埋めない空欄、ユーザーに見せるべきでない詳細など、修正しようとしていた不具合を探します。
不具合がまだ残っている場合は、プロンプトがまだ答えていない質問を見つけ、それにも答えましょう。
いくつかの返信を読むだけでは、そのプロンプトがアプリのあらゆる入力に対してどれだけうまく機能するかは分かりません。そのためには、evalが必要です。evalとは、自分自身のケースに対するテストであり、判断材料となる数値を与えてくれるものです。ここから先は、Introduction to evals コースを受講してください。