元記事:Best practices for prompt engineering with OpenAI API
OpenAIは、APIでプロンプトエンジニアリングを行う際に役立つベストプラクティスをまとめています。「APIを使う場合」についての解説ですが、一般のプロンプトエンジニアリングにも参考になります。
早速、OpenAIが公式におすすめする「プロンプトエンジニアリングの8つのコツ」を見てみましょう。
プロンプトエンジニアリングの8つのコツ
最新のモデルを使用する
プロンプトの先頭に指示を入れ、##や"""で指示と文脈を区切る
望ましい文脈、成果、長さ、形式、スタイルなどについて、具体的かつ説明的で、できるだけ詳細に説明する
望ましい出力形式を明確にする
ゼロショットから始め、次にフューショット、それでもうまくいない場合にはファインチューン
"ふわっと"した曖昧な記述を減らす
やってはいけないことを言うのではなく、代わりに何をすべきかを伝える
(コード生成の場合)モデルを特定のパターンに誘導するための「リーディングワード」を使用する
1. 最新のモデルを使用する
当然ですが、まずは最新のモデルを使用しているか確認しましょう。
ChatGPTであればGPT-4が最新です。
APIであれば既に使用許可が出ていればGPT-4、まだであればGPT-3.5です。
APIでGPT-4を使用できるよう申請するにはこちら
https://openai.com/waitlist/gpt-4-api
出力の品質についてGPT-3系とGPT-4との間には雲泥の差がありますので、必ず最新のモデルを使用しましょう。
2. プロンプトの先頭に指示を入れ、##や"""で指示と文脈を区切る
イマイチ❌:
以下の文章を、最も重要な点を箇条書きにして要約してください。
{ここにテキストを入力}
Good✅:
以下の文章を、最も重要な点を箇条書きにして要約してください。
テキスト: """
{ここにテキストを入力}
"""
3. 望ましい文脈、成果、長さ、形式、スタイルなどについて、具体的かつ説明的で、できるだけ詳細に説明する
文脈、成果、長さ、形式、スタイルなどについて、具体的に説明してください。
イマイチ❌:
OpenAIについて詩を書いてください。
Good✅:
OpenAIについて、最近のDALL-E(DALL-Eはテキストから画像へのMLモデル)の製品発表に焦点を当て、{有名な詩人}のスタイルでインスピレーションを与える短い詩を書いてください。
4. 望ましい出力形式を明確にする
イマイチ❌:
以下のテキストに記載されている要素を抽出してください。会社名、人名、特定の話題、テーマの4種類の要素を抽出してください。
テキスト: {テキスト}
見せる、そして伝える - 特定のフォーマット要件を示すと、モデルはよりよく反応します。また、プログラムによって複数の出力を確実に解析することが容易になります。
Good✅:
以下のテキストに記載されている重要なエンティティを抽出してください。まずすべての会社名を抽出し、次にすべての人名を抽出し、次に内容に合った特定のテーマを抽出し、最後に一般的な包括的テーマを抽出してください。
希望する形式
会社名:<コンマで区切られた会社名のリスト>。
人名: -||-
具体的なトピック-||-
一般的なテーマ: -||-
テキスト: {テキスト}。
5. ゼロショットから始め、次にフューショット、それでもうまくいない場合にはファインチューン
✅ ゼロショット
以下のテキストからキーワードを抽出してください。
テキスト: {テキスト}
キーワードは
✅ フューショット(Few-shot) 参考としていくつかの例を提供します
以下の対応するテキストからキーワードを抽出してください。
テキスト1:Stripeは、Web開発者がWebサイトやモバイルアプリケーションに決済処理を組み込むために使用できるAPIを提供している。
キーワード1:Stripe、決済処理、API、Webデベロッパー、Webサイト、モバイルアプリケーション
##
テキスト2:OpenAIは、テキストの理解と生成に非常に優れた最先端の言語モデルを訓練している。私たちのAPIはこれらのモデルへのアクセスを提供し、言語処理を伴うほぼすべてのタスクを解決するために使用することができる。
キーワード2:OpenAI, 言語モデル, テキスト処理, API.
##
テキスト3:{text}。
キーワード 3:
✅ ファインチューン:ファインチューンのベストプラクティスをこちらでご覧ください。 6. "ふわっと "した不正確な記述を減らす
イマイチ❌:
この製品の説明文は、かなり短く、数文のみで、それ以上にはならないようにします。
Good✅:
この製品について、3~5文の段落で説明してください。
7. やってはいけないことを言うのではなく、代わりに何をすべきかを伝える
イマイチ❌:
以下は、エージェントとお客様との会話です。ユーザー名やパスワードを尋ねないでください。繰り返さないでください。
お客様: 自分のアカウントにログインできないのですが。
エージェント:
Good✅:
以下は、エージェントとお客様との会話です。エージェントは、問題の診断と解決策の提示を試みますが、個人情報に関連する質問は控えてください。ユーザー名やパスワードなどの個人情報を尋ねる代わりに、ヘルプ記事(www.samplewebsite.com/help/faq)を紹介してください。
お客様: 自分のアカウントにログインできないのですが。
エージェント:
8. (コード生成の場合)モデルを特定のパターンに誘導するための「リーディングワード」を使用する
イマイチ❌:
# 以下のようなシンプルなpython関数を書きます。
# 1.マイルで数字を聞いてみる
# 2.マイルをキロメートルに変換してくれる
以下のコード例では、"import"を追加することで、モデルがPythonで記述し始めることを示唆しています。(同様に "SELECT "はSQL文の開始を示す良いヒントとなります)。
Good✅:
# 以下のようなシンプルなpython関数を書きます。
# 1.マイルで数字を聞いてみる
# 2.マイルをキロメートルに変換してくれる
import