(prompt) Prompt Engineering Guide
結論
プロンプトエンジニアリングとは、命令を実行するために、最適なプロンプトを設計するためのアプローチ
具体性、簡潔さ、明確さが応答に良い結果をもたらす
プロンプトエンジニアリングとは?
言語モデル(LM)を効率的に使用するためのプロンプトの開発と最適化の学問
タスクを実行するために最適なプロンプトを設計する
何ができる?
質問応答
算術推論 etc...
パラメータの設定
Temperature:回答の質を表すパラメータ
値が低いほど、確率が高い回答が得られる→決定論的
ex. 事実に基づくQA
値が高いほど、多様で創造的なアウトプット
ex. 詩の生成、創造的なタスク
Top_p:核サンプリングと呼ばれるサンプリング手法
正確で事実に基づいた回答が欲しい → 値を低くする
多様な回答 → 高い値
※どちらかを変更する
基本的なプロンプト
zero-shot prompting: 質問応答(QA)のフォーマット
code:sh
Q: <質問>?
A:
few-shot prompting: サンプルを提供して回答をもとめる方法
code: sh
Q: <質問>?
A: <答え>
Q: <質問>?
A: <答え>
Q: <質問>?
A: <答え>
Q: <質問>?
A:
プロンプトの要素
1. 命令:モデルに実行して欲しい命令
2. 文脈:外部情報・追加の文脈
3. 入力データ:入力・質問
4. 出力指示子:出力タイプ・形式
プロンプトのTips
具体的で直接的である方が良い結果が得られる
直接的であるほど、効果的にメッセージが伝わる
ex1. プロンプトエンジニアリングの概念を説明してもらう
code: ×
プロンプトエンジニアリングの概念を説明してください。説明は短く、数文で、あまり詳しくしないでください。
↑ どのように文を数え、スタイルを指定するかが明確ではない
code: ○
高校生に対して、プロンプトエンジニアリングの概念を2〜3文で説明してください。
「しないこと」を言わず、「すること」を言う
より具体的になり、モデルから良い回答を得るための詳細に焦点が当てられる。
プロンプト例
1. テキスト要約:記事やコンセプトをクイックで読みやすい要約にまとめる
code: input
抗生物質について説明してください。
A:
code: output
抗生物質は、細菌感染を治療するために使用される薬剤の一種です。細菌を殺すか、再生を防止して、体の免疫系が感染に対抗できるようにします。抗生物質は、錠剤、カプセル、液体溶液の形で通常口から摂取されますが、場合によっては静脈内投与されることもあります。抗生物質は、ウイルス感染には効果がなく、不適切に使用すると抗生物質耐性を引き起こす可能性があります。
2. 情報抽出
code: input
研究論文の著者貢献声明や謝辞には、筆者が ChatGPT のようなAIテクノロジーを原稿および分析の準備に使用したかどうか、およびどの LLMs を使用したかが明確かつ具体的に記載されている必要があります。これにより、編集者や査読者がバイアス、不正な引用元のクレジット付け、不正確さなどの可能性について、より注意深く原稿を精査することができます。同様に、科学ジャーナルは、投稿された原稿の選定時に LLMs を使用した場合には、透明性を持って開示する必要があります。
上記の段落において言及されている大規模言語モデルベースの製品を述べてください。
code: output
上記の段落において言及されている大規模言語モデルベースの製品は ChatGPT です。
3. 質問応答
code: input
以下の文脈に基づいて質問に答えてください。回答を短く簡潔に保ちます。回答が不明な場合は、「回答不明」と回答してください。
文脈:Teplizumabは、Ortho Pharmaceuticalと呼ばれるニュージャージー州の薬剤会社に由来します。そこでは、科学者たちはOKT3という抗体の初期バージョンを生成しました。分子はもともとマウスから採取され、T細胞の表面に結合し、その細胞殺傷能力を制限することができました。1986年に、腎臓移植後の臓器拒絶を防止するために承認され、これにより、人間の使用に許可された最初の治療用抗体となりました。
質問:OKT3はもともとどこから採取されたものですか?
回答:
code: output
OKT3はもともとマウスから採取されました。
4. テキスト分類
code: input
テキストをneutral、negative、またはpositiveに分類してください。
テキスト:この食べ物はまずまずでした。
所感:
code: output
この食べ物はneutral(中立)です。
5. 会話:カスタマーサービスのチャットボットなどの会話システムの構築
code: input
以下はAI研究アシスタントとの会話です。アシスタントのトーンは技術的で科学的です。
人: こんにちは、あなたは誰ですか?
AI: やあ!私はAI研究アシスタントです。今日は何をお手伝いできますか?
人: ブラックホールの生成について教えてもらえますか?
AI:
code: output
もちろんです!ブラックホールの生成についてお話ししましょう。ブラックホールは、非常に大きな質量を持つ天体で、その重力が非常に強力で、光ですら逃れることができない領域を形成します。ブラックホールは、通常、巨大な星の崩壊や、二つの中性子星が合体することなど、非常に高い質量が集中した場合に形成されます。
ブラックホールの生成にはいくつかの異なるプロセスが関与する可能性がありますが、最も一般的なのは超新星爆発によるものです。超新星爆発は、恒星がその核で核融合を終え、その重力によって内部が崩壊する際に起こります。恒星の核が崩壊し、非常に高い質量密度を持つコアが形成された場合、ブラックホールが生まれる可能性があります。
ブラックホールの生成に関する詳細な情報が必要であれば、どの特定の側面について質問したいか教えていただければと思います。
より簡易的な回答
code: input
以下はAI研究アシスタントとの会話です。アシスタントの回答は小学生でも理解できるようになっています。
人: こんにちは、あなたは誰ですか?
AI: やあ!私はAI研究アシスタントです。今日は何をお手伝いできますか?
人: ブラックホールの生成について教えてもらえますか?
AI:
code: output
もちろんだよ!ブラックホールってのは、とっても重い星の中心にできる不思議な場所だよ。その星はとても大きいので、重力もすごく強いんだ。星が終わりに近づくと、中心の部分がぶっ壊れて、ブラックホールができるんだ。
星がぶっ壊れるのは、星の中で起きる核融合という特別な反応が終わるときだよ。その後、星の中心部分がとても重くなって、重力がすごく強くなる。すると、その部分はひとつの点に集まって、ブラックホールが生まれるんだ。
ブラックホールはとても不思議で、光も逃げられないほどの強力な重力を持っているよ。これでブラックホールの生成についてわかったかな?質問があればどんどん聞いてね!
6. コード生成
ex1. ユーザーに挨拶をするプログラム
code: input
/* ユーザーに名前を聞いて、「こんにちは」と言ってください。 */
code: output
let name = prompt("あなたの名前は何ですか?");
console.log(こんにちは、${name}さん!);
ex2. MySQLクエリを生成する
code: input
"""
コンピュータサイエンス学科のすべての学生のためのMySQLクエリを作成してください。
"""
code: output
SELECT StudentId、StudentName
FROM students
WHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
7. 推論
現在のLLMは推論タスクを実行するのが困難であるため、高度なプロンプトエンジニアリング技術が必要
MEMO:誤った応答を確認してみる