OpenAIは、大規模言語モデル(GPT-4)でよりよい結果を出すためのプロンプトエンジニアリング(プロンプトのノウハウ)入門テキストを同社のウェブサイトで公開している。
同テキストでは、現在同社で最高の性能を持つ大規模言語モデルGPT-4を対象に、よりよい結果を導くための6つの戦略と、それぞれを実行する際の具体的な戦術(コツ)が掲載されている。
また、「Prompt examples」のページでは、上記で紹介したものを含む多数のプロンプト例が紹介されており、すぐに利用できるようになっている。
では紹介された6つの戦略を見ていこう。
明確な指示を書く
LLMは利用者の心を読むことができないので、回答が長すぎる場合は「簡潔に」、単純すぎる場合は「専門家レベルで」と明示的に依頼する必要がある。
具体的な戦術としては下記が提案されている。
・より関連性の高い回答を得られるよう、質問は詳細に
・モデルにペルソナを採用するよう依頼する
・区切り文字を使用して入力の異なる部分を明確に示す
・タスクを完了するために必要な手順を指定する
・適切な例を提供する
・出力の希望の長さを指定する
なお、それぞれの戦術には上記のようなプロンプト例が用意されており、コピー&ペーストしてすぐに利用できる。
参考テキストを提供する
特に難解な質問をした場合、時にLLMは自信を持って嘘の回答(ハルシネーション)をする場合がある。そんな時は参考テキストを与えて、それをもとに回答させるようにすると効果がある。下記の戦術が有効。
・参考テキストを使用して回答するようにモデルに指示する。
・参考テキストからの引用を使用して回答するようにモデルに指示する。
複雑なタスクをより単純なサブタスクに分割する
複雑なタスクは単純なタスクよりもエラー率が高くなる傾向があるため、下記の戦術が有効。
・インテント(意図)分類を使用して、ユーザーのクエリに最も関連性の高い指示を特定する。
・非常に長い会話を必要とする対話アプリケーションの場合は、以前の対話を要約またはフィルタリングする
・長い文書を区分的に要約し、完全な要約を再帰的に構築する
モデルに「考える」時間を与える
LLMはすぐに答えを出そうとしようとするより、時間をかけて答えを導き出したほうが推論エラーが少なくなる。モデルがより確実に正解に向かう推論をするために、下記の方法で考える時間を与えるとよい。
・結論を急ぐ前に独自の解決策を見つけるようにモデルに指示する
・内なる独り言や一連のクエリを使用してモデルの推論プロセスを隠す
・以前のパスで何か見逃していないかモデルに尋ねる
外部ツールを使用する
以下のようにテキスト検索やコードインタープリターといった他のツールを使うことで弱点を補うこともできる。
・エンベディングベースの検索を使用して効率的なナレッジ検索を実装する
・コード実行を使用して、より正確な計算を実行したり、外部APIを呼び出す
・モデルに特定の関数へのアクセスを許可する
体系的なテストをする
モデルのパフォーマンスを適切に測定できれば、改善が容易になる。包括的で体系的なテストスイート(evalと呼ばれる)を定義することで、精度や信頼性をより具体的に評価することができるとしている。
現在のところドキュメントはすべて英語ではあるが、それこそChatGPTを使えば問題なく読み解くことができる。効果的なプロンプトを探している人はひと通り目を通しておく価値があるだろう。