OpenAI社は、「Best practices for prompt engineering with OpenAI API」(OpenAI API を使用した迅速なエンジニアリングのベスト プラクティス)を公式サイトにて公開しました。
「プロンプトエンジニアリング」というのは、ChatGPTがベストなパフォーマンスをできるよう人間がお膳立てするようなものです。このテクニックについて、OpenAIが公表しているものを日本語で具体例を交えて解説します。
OpenAI推奨 プロンプトエンジニアリング10選
公式サイトで公開されている、プロンプトエンジニアリング10選は以下の通りです。
【その1】最新モデルを使用する
最良の結果を得るには、最新のモデルを使用することが推奨されています。
実際、無料版で使えるモデルの「GPT-3.5」に比べ、有料版で使えるモデルの「GPT-4」、さらには、今年11月6日に発表された「GPT-4 Turbo」のほうがより高性能のモデルとなっており、高性能モデルのほうが最新の情報を正確に応答する傾向にあります。
なお、2023年12月22日時点での最新モデルは、Web版、APIどちらも「GPT-4 Turbo」となっています。
【その2】プロンプトの先頭に指示を書く
プロンプトに対する応答の精度を上げるのであれば、プロンプトの先頭に指示を書くことが推奨されます。
例えば、上記の例であれば、一番強調したいことは「応答文は必ず平仮名だけで返すこと」です。そのため、一番最初にその指示内容を記載します。
### または “”” を使用して区切る
テキストを区切りたい場合は、###または”””を使用して区切ることが推奨されています。
たとえば、「プロンプトエンジニアリング」というキーワードを最も重要な点として要約をさせる際に、単にキーワードを書くのではなく、###または”””を使用して区切ると指示が明確に伝わるようになります。
【その3】希望する応答内容をできるだけ詳細に書く
質の高い応答を得るために、希望するコンテキスト、結果、長さ、形式、スタイルなどについて、具体的かつ説明的かつできるだけ詳細に記載することが推奨されています。
上記の例では、「効果的なプロンプト」では、「箇条書きで」「5点」「対象は働き盛りのサラリーマン」といったように、細かく希望する応答を得るために指示内容を具体的に記載しています。
それに対し、「効果が低いプロンプト」では、情報量が効果的なプロンプトに比べて圧倒的に少ないです。これでは、どのようなスタイルで、どのようなターゲットに向けて、どの程度回答をすれば良いのかがChatGPT側で不明瞭となっています。
【その4】例を挙げて、出力のフォーマットを明確にする
「良い例」のように出力のフォーマットを渡してあげると、ChatGPTはそれに従って回答します。
それに対し、「悪い例」のようにざっくりとしたプロンプトを与えると、ChatGPTはつらつらとテーマに対する情報を冗長な内容で返すことがあります。あらかじめ、答えてほしい内容が決まっている場合は、出力形式を明確にすると良いでしょう。
【その5】最初はただ質問してみる、ダメなら具体例を入れてみる
OpenAIの解説では、「ゼロショットから始めて、次に数ショット例を挙げ、どちらも機能しなかったら微調整していきます。」と解説があります。
「ゼロショット」というのは、具体例を入れずに指示することです。
特別な情報を与えなくても、ChatGPTは回答を返してくれます。ただ、「Few-Shot(数ショット)プロンプト」にていくつか情報を与えてから質問することで、得たい回答により近づけることができます。
【その6】「ふわふわした」不正確な説明を減らす
OpenAIによると、「ふわふわした」不正確な説明を減らすと応答の精度が上がるようです。
【その7】何をしてはいけないかをただ言うのではなく、代わりに何をすべきかを言う
ChatGPTからの応答文に希望する内容について、何をしてはいけないかだけ書くのではなく、具体的にどうしてほしいかを明記します。
「良い例」では、初心者でも分かるように「専門用語を使わずに」説明してほしいと明記しています。「悪い例」では、初心者でも分かるよう説明してほしいと指示していますが、ではその代わりにどうしてほしいのかが明記されていません。
【その8】【コード生成時】書き出しを言語特定のパターンに誘導する
こちらは、コードやスクリプトを作成させる際に有効なテクニックです。こちらからプロンプトを投げる際に、書き出しを言語特定のパターンに誘導します。
上記はPythonのコードを作成させるプロンプト例です。両者の違いとしては、最後に「import」があるかどうかです。「import」は、別ファイル(モジュール)に記載されたPythonコードを取り込むときに使う機能です。C言語でいう、「include」と同じようなものです。
コード生成時には、Pythonなら「import」、C言語なら「include」をプロンプトの最後につけることで、応答文を特定のパターンに誘導することが可能です。
【その9】パラメーターの調整
これは、Web版のChatGPTではなく、ChatGPTのAPIを作成するときに有効なテクニックです。
APIを作成する際に、リクエスト内容としてパラメータを設定します。パラメータを調整することで、回答のクオリティが上がることが期待できます。
項目 | 概要 | 精度を上げるために |
---|---|---|
model | 使用するモデルのID。 ( gpt-3.5-turbo など) | より高性能なモデルを使う |
temperature | 応答のランダム性。 0.8 などの高い値では出力がよりランダムになり、 0.2 などの低い値ではより集中的で確定的になります | 0にする |
max_tokens | チャットで生成できるトークンの最大数。 | 応答文が、max_tokensに設定した値を超えないようにする |
stop | トークンの生成を停止する文字列 |
【その10】追加リソース
OpenAIでは、プロンプトエンジニアリングや、API作成などChatGPTに関連する内容について理解を深めるために、以下のページを公開しています。
- Chat Completions API:チャット補完に特化した言語モデルと、それを利用するAPI。Web版のChatGPTと同じモデルを使用しており、独自のサービスでチャットボットのような機能を実現できます
- ファインチューニング:APIのモデルを微調整する方法が説明されています。
- 埋め込み(Embeddings):文字列を浮動小数点数のベクトル (リスト) として表現する技術。APIのモデルが、単語やテキストをどのように解釈しているのかを知るために利用する技術のようです。
- OpenAI クックブック リポジトリ:サンプルコード集。
- OpenAIコミュニティフォーラム
まとめ
今回は、OpenAI社が公開した「Best practices for prompt engineering with OpenAI API」(OpenAI API を使用した迅速なエンジニアリングのベスト プラクティス)について、それぞれ具体例を挙げて解説しました。
プロンプトの内容によって、ChatGPTの応答のクオリティは大きく変わってきます。今回OpenAIが公表したプロンプトのテクニックを参考にすれば、より精度の高い応答が得られることが期待できます。ぜひ、参考にしてみてください。
コメント