梁班はグループでOpenAIが作成したプロンプトガイドを共有しました。原文はかなり長いため、オッカムの剃刀の原則に基づき、私にとって役立つ要点を整理しました:
未編集の原文をご覧になりたい場合は、OpenAI公式サイトをご訪問ください https://platform.openai.com/docs/guides/prompt-engineering/。
記事の核心内容:効果的なプロンプトを作成するには主に6つのポイントがあります:
1. 明確な指示
1.1 より多くの詳細情報を提供する
悪い例 | 良い例 |
---|---|
Excelで数字を加算する方法は? | Excelでドル金額の一列の合計を計算するにはどうすればよいですか?テーブル全体の各行を自動的に計算し、最終的に「合計」という列にすべての総額が表示されるようにしたいです。 |
誰が大統領ですか? | 2021年にメキシコの⼤統領は誰ですか?メキシコでは選挙がどのくらいの頻度で⾏われますか? |
1.2 特定の役割を採用する
ドキュメント。
鋼製ボルトのサプライヤーに感謝状を書き、短時間で迅速に納品してくれたことに感謝します。これにより、私たちは重要な注文を如期納品することができました。
1.3 入力の異なる部分を明確に区別するためにセパレーターを使用する
2本の記事(XMLタグで区切られています)を同じテーマについて受け取ります。まず、各記事の主張を要約してください。次に、どちらの記事の主張がより説得力があるかを指摘し、その理由を説明してください。
ここに2番目の記事を挿入してください
1.4 タスクを完了するために必要なステップを明確化する
以下のステップバイステップガイドを使用して、ユーザーの入力に応答します。
ユーザーは三重引用符でテキストを提供します。そのテキストを一文で要約し、「摘要:」というプレフィックスを付けます。
ステップ1の要約をスペイン語に翻訳し、前に「翻訳:」というプレフィックスを付けます。
"""ここにテキストを挿入"""
1.5 例を提供する("few-shot")
一貫した
忍耐について教えてください。
最も深い谷を彫り出す川は、穏やかな泉から始まります。最も壮大な交響曲は単一の音符から始まり、最も複雑なタペストリーは孤独な糸から始まります。
海に関する知識を教えてください。
1.6 必要な出力長さを指定する
三重引用符内のテキストを要約します。
"""ここにテキストを挿入"""
最適化された記事:
2. 参考テキストの提供
2.1 モデルが参考テキストを使用して回答を導く
三重の引用符で区切られた文章を使って質問に答えます。記事中に答えが見つからない場合は、「答えを見つけられませんでした」と記入してください。
"""< 三重引用で区切られた記事を挿入 >"""
問題:< ここに質問を挿入 >
2.2 モデルは参照テキストを引用して質問に答えます
、そして回答に使用したドキュメントの段落を引用してください。もしドキュメントにこの質問に答えるのに十分な情報がない場合は、「情報不足」とシンプルに記入してください。質問に対する答えが提供されている場合、必ず引用を付けてください。関連する段落を引用する際には次の形式を使用してください({"citation": …})。
"""< ここにドキュメントを挿入 >"""
質問:< ここに質問を挿入 >
3. 複雑なタスクをより簡単なサブタスクに分割する
3.1 インテント分類を使用して、ユーザーのクエリに関連性の最も高い命令を識別する
3.2 長い対話が必要なアプリケーションに対して、以前の対話を要約またはフィルタリングする
方法:
a. 対話の前のラウンドを要約する。 b. 埋め込み(Embedding)ベースの検索を使用して効率的な知識検索を実現する。
3.3 長文書をセグメントごとに要約し、再帰的に完全なサマリーを構築する
ステップ:
ステップ1. ドキュメントの各部分を一連のクエリを使用して要約する。 ステップ2. 各章の要約を連結してさらに要約し、要約の要約を作成する。 ステップ3. ステップ2を再帰的に行い、ドキュメント全体を要約するまで続ける。
4. モデルに「考える」時間を与える
4.1 モデルに結論を急ぐ前に独自の解決策を見つけるよう指導する
直接的な回答は誤りです:
自分で答えを計算すれば、Userが間違っていることがわかります:
4.2 内心の独白や一連の質問を使用してモデルの推論プロセスを探索する
4.3 モデルにこれまでのプロセスで何か見落としがないか尋ねる
ソースドキュメントが大きい場合、モデルはすべての関連する抜粋をリストする前に処理を終了することがあります。以前に見逃した可能性のあるすべての抜粋をモデルに検索させるために、フォローアップクエリを使用できます。
あなたは三重引用符で区切られたドキュメントを受け取ります。あなたのタスクは、「人工知能の歴史上、どのような主要なパラダイムシフトが起こりましたか?」という質問に関連する抜粋を選択することです。抜粋には、それらを説明するために必要なすべての関連する背景情報が含まれていることを確認してください——言い換えれば、重要な背景情報を欠いた小さな断片を抽出しないでください。出力は次のJSON形式で提供してください:
[{"抜粋": "..."}, {"抜粋": "..."}]
"""< ここにドキュメントを挿入 >"""
[{ "抜粋": "モデルがここに抜粋を記入" }, {"抜粋": "モデルがここに別の抜粋を記入"}]
同じ抜粋を繰り返さないよう注意してください。また、抜粋にはそれを理解するために必要なすべての関連背景情報が含まれていることを確認してください。
5. 外部ツールの使用
5.1 埋め込みに基づく検索を使用した効率的な知識検索の実現
VectorDBを使用 - https://cookbook.openai.com/examples/vector_databases/readme
5.2 より正確な計算や外部APIの呼び出しを行うためのコード実行
。この機能を使用して計算を行います。
次の多項式のすべての実数解を求めよ:3
5.3 モデルに特定の機能へのアクセス権を付与する
Function Callを参照 - https://platform.openai.com/docs/guides/function-calling
6. 統合的に変更をテストする
6.1 LLM評価フレームワークを使用する
OpenAI Evalsを参照 - https://github.com/openai/evals
6.2 ゴールドスタンダードの答えを基準にモデルの出力を評価する
ある質問に対する正しい回答が特定の既知の事実のセットに関与すべきであることがわかっている場合、モデルクエリを使用して、回答に含まれる必要のある事実の数を計算できます。
👆この部分は少し複雑で、通常のニーズではあまり必要ないかもしれません。皆さんは関連ドキュメントを https://platform.openai.com/playground/p/default-model-based-eval-3?mode=chat で確認できます。
さらに多くの例については、https://platform.openai.com/examples を参照してください。