プロンプトエンジニアリングの仕組み
OpenAI のモデルのトレーニング方法により、特にうまく機能し、より有用なモデル出力につながる特定のプロンプト形式があります。 プロンプトのヒントを得るには、通常、OpenAI 公式のプロンプトエンジニアリングガイドから始めるのが最適です。
以下では、うまく機能すると考えられるプロンプト形式をいくつか紹介しますが、タスクにより適した別の形式も自由に試してみてください。
経験則と例
注: 「{text input here}」は実際のテキストやコンテキストのプレースホルダーです
1. 最新のモデルを使用する
最良の結果を得るには、一般に最新で最も高性能なモデルの使用をおすすめします。新しいモデルほど、プロンプトエンジニアリングがしやすい傾向があります。
注: リーズニングモデルにプロンプトを与える場合と GPT モデルにプロンプトを与える場合には、考慮すべき違いがいくつかあります。詳細はこちら。
2. 指示をプロンプトの冒頭に置き、### または """ で指示とコンテキストを分ける
あまり効果的でない例 ❌:
以下のテキストを、最も重要なポイントの箇条書きリストとして要約してください。
{text input here}より良い例 ✅:
以下のテキストを、最も重要なポイントの箇条書きリストとして要約してください。
テキスト: """
{text input here}
"""3. 望ましいコンテキスト、結果、長さ、形式、スタイルなどについて、できるだけ具体的、説明的、詳細にする
コンテキスト、結果、長さ、形式、スタイルなどについて具体的にしてください
あまり効果的でない例 ❌:
OpenAI についての詩を書いてください。 より良い例 ✅:
最近の DALL-E 製品ローンチ(DALL-E はテキストから画像を生成する ML モデル)に焦点を当て、{famous poet} の作風で、OpenAI についての短く感動的な詩を書いてください4. 例を通じて望ましい出力形式を明確にする
あまり効果的でない例 ❌:
以下のテキストで言及されているエンティティを抽出してください。次の 4 種類のエンティティを抽出してください: 会社名、人名、具体的なトピック、テーマ。
テキスト: {text}見せて伝える - 具体的な形式要件を示すと、モデルはより適切に応答します。これにより、複数の出力をプログラムで確実に解析しやすくもなります。
より良い例 ✅:
以下のテキストで言及されている重要なエンティティを抽出してください。まずすべての会社名を抽出し、次にすべての人名を抽出し、その次に内容に合う具体的なトピックを抽出し、最後に全体を包括する一般的なテーマを抽出してください
希望する形式:
会社名: <comma_separated_list_of_company_names>
人名: -||-
具体的なトピック: -||-
一般的なテーマ: -||-
テキスト: {text}5. ゼロショットから始め、次にフューショットを試し、どちらもうまくいかなければファインチューニングする
✅ ゼロショット
以下のテキストからキーワードを抽出してください。
テキスト: {text}
キーワード:✅ フューショット - いくつかの例を示す
以下の対応するテキストからキーワードを抽出してください。
テキスト 1: Stripe は、Web 開発者が Web サイトやモバイルアプリケーションに決済処理を統合するために使用できる API を提供しています。
キーワード 1: Stripe, 決済処理, API, Web 開発者, Web サイト, モバイルアプリケーション
##
テキスト 2: OpenAI は、テキストの理解と生成に非常に優れた最先端の言語モデルをトレーニングしています。当社の API はこれらのモデルへのアクセスを提供し、言語処理を伴うほぼあらゆるタスクの解決に使用できます。
キーワード 2: OpenAI, 言語モデル, テキスト処理, API。
##
テキスト 3: {text}
キーワード 3:✅ファインチューニング: ファインチューニングのベストプラクティスはこちらをご覧ください。
6. 「ふわっとした」不正確な説明を減らす
あまり効果的でない例 ❌:
この製品の説明はかなり短く、数文だけにし、それ以上長くしすぎないようにしてください。より良い例 ✅:
この製品を 3〜5 文の段落で説明してください。7. してはいけないことを言うだけでなく、代わりに何をすべきかを言う
あまり効果的でない例 ❌:
以下は、エージェントと顧客の会話です。ユーザー名やパスワードを尋ねないでください。繰り返さないでください。
顧客: アカウントにログインできません。
エージェント:より良い例 ✅:
以下は、エージェントと顧客の会話です。エージェントは、PII に関する質問を避けながら、問題の診断と解決策の提案を試みます。ユーザー名やパスワードなどの PII を尋ねる代わりに、ユーザーにヘルプ記事 www.samplewebsite.com/help/faq を案内してください
顧客: アカウントにログインできません。
エージェント:8. コード生成向け - 「先導語」を使ってモデルを特定のパターンへ誘導する
あまり効果的でない例 ❌:
# 次を行う簡単な Python 関数を書く
# 1. マイル単位の数値を尋ねる
# 2. マイルをキロメートルに変換する以下のコード例では、「import」を追加することで、Python で書き始めるべきだとモデルに示唆しています。(同様に、「SELECT」は SQL 文の開始を示す良いヒントです。)
より良い例 ✅:
# 次を行う簡単な Python 関数を書く
# 1. マイル単位の数値を尋ねる
# 2. マイルをキロメートルに変換する
import9. 「Generate Anything(何でも生成)」機能の使用
開発者は「Generate Anything(何でも生成)」機能を使って、タスクや期待する自然言語の出力を説明し、カスタマイズされたプロンプトを受け取れます。
「Generate Anything(何でも生成)」機能の使い方について詳しく見る。
パラメーター
一般に、モデル出力を変えるために最もよく使われるパラメーターは `model` と `temperature` です。
`model` - 高性能なモデルは一般にコストが高く、レイテンシーも大きくなる場合があります。
`temperature` - モデルが可能性の低いトークンを出力する頻度の指標です。
temperatureが高いほど、出力はよりランダムになり、通常はより創造的になります。ただし、これは「真実性」と同じではありません。データ抽出や正確な Q&A など、ほとんどの事実に基づくユースケースでは、temperatureは 0 が最適です。`max_completion_tokens`(最大長)- 出力の長さを制御するものではなく、トークン生成の厳格な打ち切り上限です。理想的には、この上限に頻繁に達することはありません。モデルは完了したと判断した時点、または定義した停止シーケンスに達した時点で停止するためです。
`stop`(停止シーケンス)- 生成されるとテキスト生成を停止させる文字(トークン)の集合です。
その他のパラメーターの説明については、API リファレンスをご覧ください。
