OpenAI APIを使ったプロンプト・エンジニアリングのベスト・プラクティス解説
この記事は「Best practices for prompt engineering with OpenAI API」2023年4月を翻訳したものに一部解説を追加したものとなります。最新の情報につきましては英語版のサイトを参照してください。
GPT-3やCodexへの明確で効果的な指示の出し方について
Written by Jessica Shieh
💡 OpenAI APIを使い始めたばかりの方は、最初にIntroductionとQuickstartチュートリアルを読むことをお勧めします。
プロンプト・エンジニアリングの仕組み
インストラクション・フォロー・モデルの学習方法や学習させたデータにより、特に効果的で、タスクに適したプロンプト・フォーマットが存在します。以下では、信頼性の高いプロンプト形式をいくつか紹介しますが、あなたのタスクに最も適した形式を自由に検討してみてください。
経験則と例(Rules of Thumb and Examples)
注:「{テキスト入力はこちら}」は、実際のテキスト/コンテキストのプレースホルダーです。
1. 最新のモデルを使用する
最良の結果を得るためには、一般的に最新で最も性能の高いモデルを使用することをお勧めします。2022年11月現在、テキスト生成には「text-davinci-003」モデル、コード生成には「code-davinci-002」モデルがベストです。
2. プロンプトの先頭に指示を配置し、###や"""で指示と文脈を分ける
効果が低い例(Less effective) ❌:
Summarize the text below as a bullet point list of the most important points.
{text input here}
以下の文章を、最も重要な点を箇条書きにして要約する。
{ここにテキストを入力する}
より効果的な例(Better) ✅:
Summarize the text below as a bullet point list of the most important points.
Text: """
{text input here}
"""
以下の文章を、最も重要な点を箇条書きにして要約しなさい。
テキスト: """
{テキスト入力はこちら}
"""
3. 望む文脈、結果、長さ、形式、スタイルなどについて、具体的かつ、できるだけ詳細に記述する
文脈、成果、長さ、形式、スタイルなどについて具体的に記述
効果が低い例 ❌:
Write a poem about OpenAI.
OpenAIについて詩を書いてください。
より効果的な例 ✅:
Write a short inspiring poem about OpenAI, focusing on the recent DALL-E product launch (DALL-E is a text to image ML model) in the style of a {famous poet}
OpenAIについて、最近のDALL-E(DALL-Eはテキストから画像へのMLモデル)の製品発表に焦点を当て、
{有名な詩人}のスタイルで、インスピレーションを与える短い詩を書いてください。
4. 例(例1、例2など)を通して、望む出力形式を明示する
効果が低い例 ❌:
Extract the entities mentioned in the text below.
Extract the following 4 entity types: company names, people names,
specific topics and themes.
Text: {text}
以下のテキストに記載されているエンティティを抽出する。
企業名、人名、特定の話題、テーマの4種類のエンティティを抽出する。
テキスト: {テキスト}
見せる、そして伝える - 特定のフォーマット要件を示すと、モデルはよりよい応答をします。これにより、複数の出力を信頼性をもってプログラムで解析することがより簡単になります。
より効果的な例 ✅:
Extract the important entities mentioned in the text below.
First extract all company names, then extract all people names,
then extract specific topics which fit the content and finally extract general
overarching themes
Desired format:
Company names: <comma_separated_list_of_company_names>
People names: -||-
Specific topics: -||-
General themes: -||-
Text: {text}
以下のテキストで言及している指示に従い、重要なエンティティを抽出してください。
最初に、すべての企業名を抽出し、次にすべての人名を抽出し、内容に合わせて特定のトピックを抽出し、
最後に大まかなテーマを抽出してください。
期待されるフォーマット:
企業名: <企業名のカンマ区切りリスト>
人名: -||-
特定のトピック: -||-
一般的なテーマ: -||-
テキスト: {テキスト}
5. zero-shotから始め、次にfew-shot(例)、どちらもうまくいかない場合は、fine-tuneを行う
✅ ゼロショット
Extract keywords from the below text.
Text: {text}
Keywords:
以下のテキストからキーワードを抽出する。
テキスト: {テキスト}
キーワード:
✅ Few-shot - 2、3個の例を提供する。
Extract keywords from the corresponding texts below.
Text 1: Stripe provides APIs that web developers can use to integrate payment processing into their websites and mobile applications.
Keywords 1: Stripe, payment processing, APIs, web developers, websites, mobile applications
##
Text 2: OpenAI has trained cutting-edge language models that are very good at understanding and generating text. Our API provides access to these models and can be used to solve virtually any task that involves processing language.
Keywords 2: OpenAI, language models, text processing, API.
##
Text 3: {text}
Keywords 3:
以下の対応するテキストからキーワードを抽出する。
テキスト1:Stripeは、Web開発者がWebサイトやモバイルアプリケーションに決済処理を組み込むために使用できるAPIを提供している。
キーワード1:Stripe、決済処理、API、Webデベロッパー、Webサイト、モバイルアプリケーション
##
テキスト2:OpenAIは、テキストの理解と生成に非常に優れた最先端の言語モデルを訓練しています。私たちのAPIはこれらのモデルへのアクセスを提供し、言語処理を伴うほぼすべてのタスクを解決するために使用することができます。
キーワード2:OpenAI, 言語モデル, テキスト処理, API.
##
テキスト3:{テキスト}
キーワード 3:
✅ ファインチューニング:ファインチューニングのベストプラクティスはこちら。
6. 曖昧で不正確な記述を減らす
効果が低い例 ❌:
The description for this product should be fairly short, a few sentences only, and not too much more.
この製品の説明文はかなり短く、数文のみで、それ以上にはしない方が良い。
より効果的な例 ✅:
Use a 3 to 5 sentence paragraph to describe this product.
この製品の説明には、3~5文の段落を使用する。
7. やってはいけないことだけではなく、代わりに何をすればいいかを記述する
効果が低い例 ❌:
The following is a conversation between an Agent and a Customer.
DO NOT ASK USERNAME OR PASSWORD. DO NOT REPEAT.
Customer: I can’t log in to my account.
Agent:
以下は、エージェントとお客様の会話です。
ユーザー名やパスワードを尋ねないでください。繰り返さないでください。
顧客: 自分のアカウントにログインできません。
エージェント:
より効果的な例 ✅:
The following is a conversation between an Agent and a Customer.
The agent will attempt to diagnose the problem and suggest a solution,
whilst refraining from asking any questions related to PII.
Instead of asking for PII, such as username or password,
refer the user to the help article www.samplewebsite.com/help/faq
Customer: I can’t log in to my account.
Agent:
以下は、エージェントとお客様との会話です。
エージェントは、問題の診断と解決策の提案を試みますが、PIIに関連する質問は控えてください。
ユーザー名やパスワードなどのPIIを尋ねる代わりに、ヘルプ記事(www.samplewebsite.com/help/faq)を
紹介する。
お客様: 自分のアカウントにログインできません
エージェント:
8. コード生成には、モデルを特定のパターンに誘導する「リーディングワード」を使用する
効果が低い例 ❌:
# Write a simple python function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers
# 以下のような簡単なpythonの関数を書いてください
# 1. マイルで数字を聞いてみる
# 2. マイルをキロメートルに変換してくれる
下のコード例では、"import "を追加することで、モデルにpythonで記述し始めることを示唆しています。(同様に "SELECT "はSQL文の開始を示す良いヒントとなります)
より効果的な例 ✅:
# Write a simple python function that
# 1. Ask me for a number in mile
# 2. It converts miles to kilometers
import
# 以下のような簡単なpythonの関数を書いてください
# 1. マイルで数字を聞いてみる
# 2. マイルをキロメートルに変換してくれる
import
パラメータ
一般的に、モデル出力を変更するために最もよく使われるパラメータは、modelとTemperatureであることが分かっています。
model - 高性能なモデルほど高価で、レイテンシーも高くなります。
Temperature - 可能性の低いトークンを出力する頻度を示す指標です。Temperatureが高いほど、出力はよりランダムに(そして通常は創造的に)なります。しかし、これは「真実性」とは異なります。データ抽出や真実のQ&Aなど、ほとんどの事実に基づいた使用例では、Temperatureは0が最適です。
max_tokens(最大トークン数)- 出力の長さを制御するものではありませんが、トークン生成のための厳しいカットオフ制限を設定します。理想的には、モデルが終了と判断するか、またはあなたが定義した停止シーケンスに達したときなので、この制限に達することはめったにありません。
stop (stop sequences) - 生成されるとテキスト生成を停止させる文字(トークン)のセットです。
その他のパラメータの説明については、APIリファレンスを参照してください。
その他のリソース
その他、以下のようなリソースも用意しいますので、興味のある方は以下のリンク先をご参照ください。
ガイド
Text completion - モデルを使ってテキストを生成または編集する方法を学ぶ
Code completion - Codexのためのプロンプト・エンジニアリングを探求する
Fine-tuning - ユースケースに合わせたカスタム・モデルのトレーニング方法を学ぶ
Embeddings - テキストの検索、分類、比較の方法を学ぶ
OpenAI cookbook repo - Embeddingsを使った質問応答など、APIを使った一般的なタスクを達成するためのサンプル・コードとプロンプトが含まれています。
終わりに
本noteをご覧いただきありがとうございます!
少しでも多くの方が、プロンプトに興味を持っていただき、よりAIと共存していけるようになるといいなと思っています。
今後ChatGPTに関する情報を受け取りたい方は公式LINEにご登録いただくと定期的に情報を受け取ることができます。
もしご興味がありましたら以下から登録をお願いします。
◉情報受け取り用公式LINE⬇︎
< https://lin.ee/F3fGixV >
こちらを参考に皆さんがAIと少しでも仲良くなれることを願っております。