Open AI公式「GPT best practices」の全文日本語訳
2023/06/16
2023年6月にOpen AIから公式に「GPTからより良い結果を得るための戦略や戦術」としてGPT best practices(原文)が公表されました。
本記事ではそちらの内容を日本語訳でわかりやすく解説することを目指します。
(*翻訳は非公式です。英語の完全な直訳ではなく、より分かりやすい日本語や表現に置き換えている部分がございます)
↓以下からGPT best practices(原文)の日本語訳となります。
はじめに
このガイドでは、GPTからより良い結果を得るための戦略や戦術を紹介しています。紹介する方法は、組み合わせて使うことでより大きな効果を発揮することもあります。あなたにとって最も効果的な方法を見つけるために、ぜひ試してみてください。
紹介する方法の中には、現在、最も高性能なモデルであるgpt-4でのみ動作するものもあります。もし、まだgpt-4にアクセスできない場合は、ウェイティングリストへの参加をオススメしますします。実行したタスクで、GPTモデルから期待した成果が得られなかった場合、より高性能なGPTモデルが利用可能であれば、高性能なモデルで再挑戦することを推奨しています。
(※2023年6月時点で、gpt-4はウェイティングリスト待ちでAPI利用制限あり)
【目次】より良い結果を得るための6つの戦略
戦略1. 明確な指示を書く
GPTはあなたの心を読むことはできません。出力が長すぎる場合は、簡潔な回答を求めてみてください。出力が簡単すぎる場合は、専門家レベルの文章を求めてみてください。形式が気に入らない場合は、望む形式を示してみてください。GPTがあなたの要望を推測する必要がなければなるほど、より望む結果を得られる可能性が高まります。
【戦術(Tactics)】
1-1. リクエストに詳細を含めることでより関連性の高い回答を得る
1-2. モデルに特定の役割を演じるように依頼する
1-3. 区切り記号を使用して入力の異なる部分を明確に示す
1-4. タスクを完了するために必要なステップを指定する
1-5. 例を提示する
1-6. 出力の希望する長さを指定する
戦略2. 参考テキストを提供する
GPTは自信を持って偽の答えを作り出すことができます、特に難解なトピックや引用やURLについて尋ねられたときには。テストで生徒のパフォーマンスを向上させるためのノートのように、GPTに参考テキストを提供すると、より少ない捏造で答えるのに役立ちます。
【戦術(Tactics)】
2-1. 参照テキストを使用して回答するようにモデルに指示する
2-2. 参考文献を引用して回答するようにモデルに指示する
戦略3. 複雑なタスクをよりシンプルなサブタスクに分割する
ソフトウェアエンジニアリングで複雑なシステムを一連のモジュールコンポーネントに分解するのが良い習慣であるように、GPTに提出されるタスクについても同様です。複雑なタスクは、単純なタスクよりもエラーレートが高い傾向があります。さらに、複雑なタスクはよく、早期のタスクの出力が後期のタスクの入力を構築するような、より単純なタスクのワークフローとして再定義できます。
【戦術(Tactics)】
3-1. 意図の分類を使用して、ユーザーのクエリに最も関連性の高い命令を特定する
3-2. 非常に長い会話が必要な対話型アプリケーションでは、以前の対話を要約またはフィルタリングする
3-3. 長い文書を分割して要約し、再帰的に完全な要約を構築する
戦略4. GPTに「考える」時間を与える
17×28の暗算を求められたとき、あなたはすぐに答えが出ないかもしれませんが、時間をかければ解けるでしょう。同様に、GPTは答えをすぐに出そうとすると、より多くの推論エラーを犯します。答えを出す前に一連の推論過程を求めると、GPTはより確実に正しい答えにたどり着くことができます。
【戦術(Tactics)】
4-1. 結論に急ぎすぎず、モデルが自分で解決策を考えるように指示する
4-2. 内部モノローグや一連のクエリーを使って、モデルの推論過程を隠す
4-3. モデルに以前の処理で見落とした部分はないか尋ねる
戦略5. 外部ツールを使用する
他のツールの出力をGPTに供給することで、GPTの弱点を補いましょう。例えば、テキスト検索システムはGPTに関連文書を教えることができます。コード実行エンジンはGPTが数学的な計算をしたり、コードを実行したりするのを助けます。実行したいタスクがGPTよりも他ツールを使用してより確実、もしくは効率的に行える場合は、他ツールに役割を担ってもらうことで最適な結果を得ることができます。
【戦術(Tactics)】
5-1. 効率的な知識の検索を実装するために埋め込みベースの検索を使用する
5-2. コードの実行を使用してより正確な計算や外部APIの呼び出しを行う
戦略6. 変更を体系的にテストする
パフォーマンスを測定できれば、改善するのは容易です。場合によっては、プロンプトへの修正が個別のある例ではより良いパフォーマンスを達成するが、多数の例では全体的なパフォーマンスが悪化することがあります。したがって、パフォーマンスに対する変更が全体としてプラスであることを確認するためには、パフォーマンス測定のためのテストケースをまとめた包括的なテスト用のデータセットを定義することが必要かもしれません。
【戦術(Tactics)】
6-1. ゴールドスタンダードの回答を参照してモデルの出力を評価する
【詳細】戦術の解説
上記のそれぞれの戦略は、具体的な戦術で具体化することができます。これらの戦術は、試すべきアイデアを提供することを目的としています。これらは決して完全に包括的なものではなく、ここに示されていない創造的なアイデアを試す自由があります。
戦略1:明確な指示を書く
1-1:リクエストに詳細を含めることでより関連性の高い回答を得る
あなたの意図に沿った高い関連性を持つ応答を得るためには、あなたのリクエストに重要な詳細や文脈が含まれていることを確認してください。それが含まれないと、あなたの意図が何を意味するのかをモデルが推測することになります。
悪い例 | 良い例 |
Excelで数値をどうやって足しますか? | Excelでドル額の行をどのように合計しますか?全ての行についてこれを自動的に行い、"Total"という列に全ての合計を表示したいです。 |
誰が大統領ですか? | 2021年のメキシコの大統領は誰で、選挙はどのくらいの頻度で行われますか? |
フィボナッチ数列を計算するコードを書いてください。 | TypeScriptの関数を用いて効率的にフィボナッチ数列を計算するコードを書いてください。各部分が何をするのか、なぜそのように書かれているのかを詳しくコメントしてください。 |
ミーティングのノートを要約してください。 | ミーティングのノートを1つのパラグラフで要約してください。その後、スピーカーとその主要なポイントをマークダウンリストで書き出してください。最後に、スピーカーが提案した次のステップやアクションアイテムをリストアップしてください(もしあれば)。 |
1-2:モデルに特定の役割を演じるように依頼する
システムメッセージを使用して、モデルが返信する際に使用する役割を指定することができます。
SYSTEM | 私が何かを書くのを助けるように頼むと、各段落に少なくとも1つのジョークや遊び心のあるコメントが含まれるドキュメントで返信します。 |
USER | 私のスチールボルトの納品業者に、納品を時間内かつ急な要請で行っていただいたことに感謝のメモを書いてください。これにより、重要な注文を届けることができました。 |
1-3:区切り記号を使用して入力の異なる部分を明確に示す
三重引用符、XMLタグ、セクションタイトルなどの区切り記号は、テキストのセクションを異なる方法で区別するのに役立ちます。
USER | 三重引用符で区切られた文章を俳句で要約してください。
"""ここにテキストを挿入する""" |
SYSTEM | 同じトピックに関する一組の記事(XMLタグで区切られたもの)が用意される。まず、各記事の論点を要約する。そして、どちらの記事がより良い議論をしているか示し、その理由を説明しなさい。 |
USER | <article>ここに最初の記事を挿入</article>。
<article> 2つ目の記事をここに挿入する</article> |
SYSTEM | 論文要旨とそのタイトル案が提供されます。論文のタイトルは、読者に論文のテーマがよくわかるものでなければなりませんが、人目を引くものでなければなりません。タイトルがこれらの基準を満たさない場合、5つの代替案を提案する。 |
USER | 要旨:ここに要旨を挿入してください
タイトル:ここにタイトルを挿入してください |
このような明確なタスクにおいては、デリミタの使用は出力の品質に大きな影響を与えないかもしれません。しかし、タスクがより複雑であるほど、タスクの詳細を明確にすることが重要です。GPTに正確に何を求めているのかを理解させるために、余計な作業をさせないでください。
1-4:タスクを完了するために必要なステップを指定する
タスクの中には、一連の手順としてステップを指定するのが最適なケースがあります。ステップを明示的に書き出すことで、モデルがそのステップに従うことが容易になります。
SYSTEM | ユーザーの入力に対応するために、以下のステップバイステップの手順を使用します。
ステップ1 - ユーザーはテキストを三重引用符で提供します。このテキストを「Summary: 」という接頭辞を付けて1文で要約してください。
ステップ2 - ステップ1の要約をスペイン語に翻訳し、「Translation: 」という接頭辞を付けて表示してください。 |
USER | """ここにテキストを挿入してください""” |
1-5:例を提示する
一般的な指示を提供することは、すべての例に適用できるため、通常は効率的ですが、場合によっては例を提供する方が簡単な場合もあります。たとえば、モデルに特定のスタイルでユーザーのクエリに応答するようにコピーさせたい場合などは、明示的に説明するのが難しいため、例を提供することがあります。これは「few-shot」プロンプティングとして知られています。
SYSTEM | 一貫したスタイルで回答してください。 |
USER | 忍耐について教えてください。 |
ASSISTANT | 深い谷を刻む川はささやかな泉から流れ、壮大な交響曲は一音から生まれ、最も複雑なタペストリーは一本の糸から始まる。 |
USER | 海について教えてください。 |