ロールプロンプティングとは、何をするかを伝える前に、誰になるかをモデルに伝えることです。「あなたは辛抱強い数学の講師です」「新人開発者の採用担当者として振る舞ってください」のように書きます。役割によって、答えが誰に向けて書かれるか、どんな言葉を使うか、どこまで深く掘り下げるか、何に注目するかが変わります。モデルがもともと持っていない知識が増えるわけではありません。役割は答えの舵を取る方法であって、事実を足す方法ではないのです。
役割で変わること
役割は、いくつかのことを一度に決める簡潔な方法です。
- 読み手と語彙。 初心者向けの講師は用語を定義してたとえを使いますが、同業者向けに書くシニアエンジニアはどちらも省きます。
- 基準。 厳しい編集者は、好意的な読み手なら見逃す文にも印を付けます。何を問題とみなすかは役割が決めます。
- 焦点。 セキュリティのレビュアーとパフォーマンスのレビュアーは、同じ関数を読んでも違うことに気づきます。
- ふるまい。 面接官は質問して待ちます。講師には、答えの代わりにヒントを出すよう指示できます。
下の3つのタブを切り替えてみてください。タスクはどれも同じで、役割だけが違います。
API(アプリケーション・プログラミング・インターフェース)とは、あるソフトウェアが別のソフトウェアとやりとりするための決まりごとです。どんな依頼ができるか、どう依頼するか、何が返ってくるかを定めています。たとえば天気アプリは、天気サービスの API を使って予報を取得します。API を使えば、開発者は他のシステムの内部を知らなくてもその機能やデータを利用できます。
「あなたは専門家です」は答えをほとんど動かしませんでした。ありきたりな形はそのままで専門用語が増えただけです。「専門家」は、誰が読むのかについて何も語っていないからです。具体的な役割は、語彙、例、たとえの基準を変えました。読み手と、その読み手がすでに知っているものを示したからです。
役割で変わらないこと
役割で知識を足すことはできません。「あなたは世界トップクラスの税理士です」と書いても、モデルが今年の税制を学んでいなければ、それを知ることはありません。自信たっぷりのペルソナは、間違った答えをかえって権威ありげに聞こえさせることがあります。正確さを上げるために専門家のラベルを当てにしないでください。正しさが重要なら、必要な事実や文書をモデルに渡し、確信がないときはそう言うよう頼んでください。役立つプロンプトは AI のハルシネーションで扱っています。
実在の人物についても同じです。「有名なプログラマーならこう答える、という形で答えて」と頼むと、その人の公の場でのスタイルのまねが返ってきます。モデルはその人の私的な意見を知らないので、新しい質問についてその人の口調で言うことは、すべて作り話です。
具体的な役割を書く
役に立つ役割は、たいてい4つのことを示しています。仕事、読み手、目的、基準です。比べてみてください。
- 「あなたはライターです」は「あなたは技術ブログの編集者で、初心者が手順についていくのに役立たない文はすべて削ります」になります。
- 「あなたはプログラマーです」は「あなたは後輩のプルリクエストをレビューするシニア Python 開発者です。まずバグを指摘し、次に読みやすさを見て、後輩が学べるように各指摘を説明してください」になります。レビュー用のプロンプト全体はコードレビューのためのプロンプトを参照してください。
- 「先生として振る舞って」は「15歳の生徒の試験対策をする化学の先生として振る舞ってください。答えを教える代わりに私に質問し、私が間違えたらヒントを出してください」になります。
役割はプロンプトの一部であって、プロンプト全体ではありません。明確なタスク、モデルが推測できないコンテキスト、欲しい答えの形と一緒に働きます。ほかの要素はプロンプトの書き方ガイドで扱っています。「厳しいレビュアー」に「作者を安心させて」と頼むように、役割とタスクが別々の方向を向いていると、返答は両方をしようとして、たいていどちらもうまくいきません。
練習のための「〜として振る舞って」プロンプト
「〜として振る舞って(Act as)」という形は、共有されたプロンプト集を通じて広まりました。モデルが採用面接官、語学の練習相手、さらには Linux のターミナルまで演じます。ロールプレイは、面接、難しい話し合い、プレゼン、新しい言語など、リハーサルしたいことなら何にでも役立ちます。
うまくいくロールプレイと崩れてしまうロールプレイの違いは、ルールです。役割が各ターンで何をするか、いつあなたを待つか、いつ終えるかを伝えてください。ルールがないと、モデルはセッション全体を1回の返答で済ませてしまうことがあります。一度に5問出したり、質問のあとに模範解答まで付けたりします。
では始めましょう。まずは基礎的な質問からです。
質問1:JavaScript の let、const、var の違いは何ですか?
本番の面接のつもりで、落ち着いて答えてください。
職種と分野を変えれば、自分の面接のリハーサルができます。「私の答えを待ってください」の一文が、1ターンに1問を守らせています。そして「5問終わったら止めて」がセッションに終わりとまとめを与えています。
役割を書く場所
すべての返答で保ってほしい役割はシステムプロンプトに書きます。API なら system フィールド、チャットアプリならカスタム指示やプロジェクトの指示です。そこに書けば、繰り返さなくても会話全体に適用されます。1回きりの依頼なら、タスクの前、メッセージの最初の文に役割を書いてください。
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
message = client.messages.create(
model=MODEL,
max_tokens=500,
system="You are a patient programming tutor for adults in their first month of coding. Give hints before full solutions.",
messages=[{"role": "user", "content": "Why does my loop print the last item twice?"}],
)
print(message.content[0].text)
役割は会話の途中でも使えます。モデルが何かの下書きを書いたあとで、「今度は上の下書きを疑ってかかるレビュアーとして振る舞い、弱点を3つ挙げてください」と頼むと、最初の段階で見過ごされた問題がよく浮かび上がります。新しい役割によって、モデルが探すものが変わるからです。
よくある質問
ロールプロンプティングとは何ですか?
ロールプロンプティングとは、何をするかを伝える前に、誰になるかをモデルに伝えることです。たとえば「あなたは12歳の子どもに教える辛抱強い数学の講師です」や「新人開発者の採用面接官として振る舞ってください」です。役割は返答の読み手、語彙、深さ、焦点を決め、会話の中では、答える代わりに質問するなど、モデルのふるまいを変えることもあります。
AI に「あなたは専門家です」と伝えると正確になりますか?
当てにしないでください。「あなたは世界トップクラスの専門家です」のようなラベルは、モデルにない知識を与えるものではなく、間違った答えをより自信ありげに聞こえさせることもあります。正確さを上げたいなら、必要な事実や情報源を渡し、確信がないときはそう言うよう頼み、結果を確認してください。
役割はどこに書けばいいですか?
会話全体で続けてほしい役割はシステムプロンプトに書きます。API なら system フィールド、チャットアプリならカスタム指示やプロジェクトの指示です。1回きりの依頼なら、タスクの前、メッセージの最初の文に書いてください。
「〜として振る舞って」というプロンプトとは何ですか?
英語で「Act as」から始まり、モデルに演じる役割を与えるプロンプトのことです。面接官、語学の練習相手、Linux のターミナル、旅行ガイドなどです。共有されたプロンプト集によってこの型が広まりました。各ターンで役割が何をするか、いつ終えるかも書くと最もうまくいきます。
良いロールプロンプトの条件は何ですか?
具体性です。仕事、読み手、目的、基準を書きます。「後輩のプルリクエストをレビューするシニア Python 開発者。まずバグ、次に読みやすさ」は、「専門家」よりもはるかに多くの手がかりをモデルに与えます。そのうえで、プロンプトの残りはいつもどおり、タスク、コンテキスト、形式を書きます。