プロンプト エンジニアリングの手法

OpenAI の GPT-3、GPT-3.5、GPT-4、GPT-4o モデルはプロンプト ベースです。 プロンプト ベースのモデルでは、ユーザーはテキスト プロンプトを入力してモデルと対話し、モデルはテキスト入力候補でそれに応答します。 この入力候補は、入力テキストに対してモデルが続けたものです。

これらのモデルは非常に強力ですが、その動作もプロンプトに対して非常に敏感です。 このため、プロンプトの構築が開発のための重要なスキルになります。

プロンプトの構築は難しい場合があります。 実際には、プロンプトは目的のタスクを完了するためにモデルの重みを構成するように機能しますが、これは科学というより芸術であり、多くの場合、成功するプロンプトを作成するには経験と直感が必要になります。 この記事の目標は、この学習プロセスを開始できるようにすることです。 説明するのは、すべての GPT モデルに適用される一般的な概念とパターンです。 ただし、各モデルは動作が異なるため、学習内容がすべてのモデルに等しく適用されない場合があります。このことを理解するのが重要です。

基本

このセクションでは、GPT プロンプトの基本的な概念と要素について説明します。

テキスト プロンプトは、ユーザーが GPT モデルと対話する方法です。 すべての生成言語モデルと同様に、GPT モデルも、前のテキストから続く可能性が最も高い次の一連の単語を生成しようとします。 これは、"私が <prompt> と言ったとき、最初に頭に浮かぶことは何ですか?" と質問するのと同じです。次の例は、この動作を示しています。 有名なコンテンツの最初の単語を指定すると、モデルはテキストを正確に続けることができます。

Prompt Completion
Four score and seven years ago our (87 年前、われわれの) fathers brought forth on this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal. (父祖たちは、自由の精神にはぐくまれ、人はみな平等に創られているという信条にささげられた新しい国家を、この大陸に誕生させた。) […]
"Call me Ishmael." (私のことはイシュマエルと呼んでもらおう。) "Some years ago—never mind how long precisely—having little o no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world." (何年か前 — 正確なことはどうでもいいのだが — 財布の中はほとんど空っぽだったし、それに陸ではこれといって興味を引かれるものは何もなかったし、少し船を乗り回して、水の世界でも見物してやろうと思った。) […]

より複雑なプロンプトを作成するとき、この基本的な動作を念頭に置くと役立ちます。 指定されたプロンプトに関係なく、モデルは、(トレーニング データとトレーニング ターゲットを考慮して) 最も可能性が高いと判断した内容で単に応答します。 プロンプトで質問した場合、モデルは個別の "Q&A" コード パスに従っていませんが、質問に回答しているように見えます。これは、その回答が、入力として指定した質問に対する最も可能性が高い種類の応答であるためです。

プロンプトの構成要素

Completion API を使用するとき、プロンプトの各部分が区別されることはありませんが、基になるプロンプトの構成要素を特定することは学習とディスカッションに役立ちます。 Chat Completion API では、プロンプトの各セクションが、関連するロール (システム、ユーザー、アシスタント) と共に、ディクショナリの配列の形式で API に送信されます。 このガイダンスは、特定の API に固有の規範的なガイダンスを提供するのではなく、プロンプトの構築に関するより一般的な考え方に焦点を当てています。

プロンプトを分析する有効な方法は他にもありますが、ここでの分析の目標は、プロンプトの構築に関する比較的単純な考え方を示すことです。この点を理解することが重要です。 Completion API では、すべての構成要素が省略可能ですが、少なくとも 1 つは用意する必要があります。ほとんどのプロンプトには複数の構成要素が含まれます。 構成要素の間にグレー領域が存在する場合もあります。 以下に示す順序は、各構成要素の使用頻度にほぼ対応しています (使用頻度最高から最低)。

Instructions

指示 (Instruction) は、最も一般的に使用されるプロンプトの構成要素です。 指示は、単に、何を行うかについてのモデルへの指示です。 概念は単純ですが、実際には複雑な場合があります。 次の表で、これを示します。そのために、単純な指示と複雑な指示 (2 種類の形式) の両方を示します。

指示の種類 Prompt Completion
単純な指示 Write an introduction for a weekly newsletter. (週刊ニュースレターの前書きを書いてください。) Welcome to our weekly newsletter. (週刊ニュースレターへようこそ。) This week we have a special focus on productivity. (今週は生産性について主に取り上げます。) We'll be sharing tips and tricks on how to be productive in all areas of your life. (生活のあらゆる面で生産性を高めるためのヒントとコツを紹介します。) We hope you enjoy and please share with your friends! (楽しんでいただき、お友達にも紹介していただければ幸いです!)
複雑な指示 Write an introduction for a weekly newsletter to my company named Contoso. (Contoso という会社の週刊ニュースレターの前書きを書いてください。) It should mention the great all hands meeting we had last week and thank the team for all their hard work over the tough past few months. (先週開催された素晴らしい全社会議に言及し、過去数か月間の業務にチームが懸命に取り組んでくれたことに感謝する必要があります。) Welcome to Contoso's weekly newsletter! (Contoso の週刊ニュースレターへようこそ!) We had a great all hands meeting last week and I want to thank the team for all their hard work over the tough past few months. (先週は素晴らしい全社会議がありました。ここ数か月間の業務にチームが懸命に取り組んでくれたことに感謝したいと思います。) We're looking forward to a bright future and I'm confident that with our team's dedication and commitment, we will achieve great things. (明るい未来を期待していますし、チームの献身と責任によって、素晴らしいことを達成できると確信しています。) Thank you for being a part of our team and I look forward to working with you all in the coming weeks and months. (チームの一員になってくれたことにお礼を申し上げるとともに、今後数週間、数か月間、みなさんと一緒に仕事ができることを楽しみにしています。) Sincerely, [Your name]. ([自分の名前] より。)
複雑な指示 Write an introduction for a weekly newsletter, including the following: (以下を含む週刊ニュースレターの前書きを書いてください。)
- My company is named contoso (会社の名前は contoso)
- An exuberant greeting (元気のよいあいさつ)
- Thanking the team for their hard work over a couple tough months (数か月間の業務にチームが懸命に取り組んでくれたことについてお礼を言う)
- Positive outlook for the coming quarter (次の四半期への前向きな姿勢)
- Positive outlook for the coming quarter (SLT による署名)
Hello Contoso team! (Contoso チームのみなさん、こんにちは!) I wanted to take a moment to thank you for all your hard work over the past few months. (ここ数か月間、みなさんが業務に懸命に取り組んでくれたことに感謝したいと思います。) It's been a tough couple of months, but you've all pulled together and done an amazing job. (大変な数か月でしたが、みなさんは力を合わせて素晴らしい仕事を成し遂げました。) I'm really proud of you all. (みなさんを本当に誇りに思います。) Looking ahead to the next quarter, I'm feeling really positive. (次の四半期に向け、本当に前向きな気持ちでいます。) I think we're going to achieve some great things. (私たちは、素晴らしいことをいくつか達成しようとしていると思います。) Thanks again, The Senior Leadership Team. (シニア リーダーシップ チームのみなさん、どうもありがとう。)

プライマリ コンテンツ

プライマリ コンテンツとは、モデルによって処理または変換される何らかのテキストを指します。 通常、プライマリ コンテンツは指示と組み合わせて使用します。 簡単な例として、言語翻訳があります。 次の例では、英語のテキストがプライマリ コンテンツと見なされ、"フランス語に翻訳:" が指示になります。

Prompt Completion
Can you please tell me how to get to the museum? (美術館への行き方を教えてください。)
Translate to French: (フランス語に翻訳:)
Pouvez-vous s'il vous plaît me dire comment aller au musée?

プライマリ コンテンツは、非常に長くなる場合もあります。 次の例では、プライマリ コンテンツは、時間計算量に関する Wikipedia のエントリの前書きセクションであり、単語の数は約 300 個です。 このコンテンツは、簡単に表示できるように表では省略されています。

Prompt Completion
In computer science, the time complexity is the computational complexity that describes the amount of computer time it takes to run an algorithm. (コンピューター サイエンスでは、時間計算量はコンピュータによる計算量であり、アルゴリズムの実行にかかるコンピューター時間の量を表します。) Time complexity is commonly estimated by [...] (時間計算量は、一般的に [...] によって推定されます)
Summarize the previous text in a few sentences: (直前のテキストをいくつかの文にまとめてください。)
Time complexity is a measure of how long an algorithm takes to run. (時間計算量は、アルゴリズムの実行にかかる時間の尺度です。) It is typically expressed as a function of the size of the input. (これは通常、入力のサイズの関数として表されます。) The most common measure is worst-case time complexity, which is the maximum amount of time required for inputs of a given size. (最も一般的な尺度は、最悪時間計算量です。これは、所定のサイズの入力に必要な最大時間量です。)
In computer science, the time complexity is the computational complexity that describes the amount of computer time it takes to run an algorithm. (コンピューター サイエンスでは、時間計算量はコンピュータによる計算量であり、アルゴリズムの実行にかかるコンピューター時間の量を表します。) Time complexity is commonly estimated by [...] (時間計算量は、一般的に [...] によって推定されます)
TL;DR (長すぎて読みませんでした)
The time complexity of an algorithm is the amount of time it takes to run an algorithm. (アルゴリズムの時間計算量は、アルゴリズムの実行にかかる時間量です。) Time complexity is commonly estimated by counting the number of elementary operations performed by the algorithm, supposing that each elementary operation takes a fixed amount of time to perform. (時間計算量は、通常、アルゴリズムによって実行される基本操作の数をカウントすることによって推定されます。このとき、各基本操作の実行には一定の時間がかかると仮定します。) The time complexity is generally expressed as a function of the size of the input. (時間計算量は、通常、入力のサイズの関数として表されます。)

GPT モデルでは、構造化されたプライマリ コンテンツも処理できます。 次の例では、ベルギーのビールに関する TSV (この記事では表示のために省略されています) が、プロンプトの一部としてモデルに渡されます。 モデルは、コンテンツを適切に解釈でき、データに関する質問に回答できます。

Prompt Completion
Belgian Beer Brands
Beer name Beer style color ABV Brewery
"Chimay Gold: ""Doree""" trappist pale ale gold 4.80% Chimay Brewery (official trappist)
"Chimay Blue: ""Grande Reserve""" trappist dark ale dark 9.00%
[…]
Referencing the table above, how many beers are less than 6% ABV? (上記の表を参照すると、アルコール度数が 6% 未満のビールの数はいくつですか?)
There are 10 beers in the table that are less than 6% ABV. (アルコール度数が 6% 未満のビールは、表に 10 個あります。)

成功したプロンプトは、多くの場合、"ワンショット" 学習または "少数ショット" 学習を実践したことに基づきます。 これは、モデルの望ましい動作の例を 1 つ以上含めることを意味します (通常、入力と出力のペアを含めます)。 これは、モデルが永続的に変更されるという意味での学習ではなく、現在の推論に対してのみモデルが必要に応じて応答するように、例によって適切に調整するという意味での学習です。 例なしでプロンプトを使用することは、"ゼロショット" 学習と呼ばれることがあります。 Chat Completion API では、通常、最初のシステム メッセージの後に、少数ショット学習の例が、ユーザー/アシスタントの対話例の形式で、メッセージ配列に追加されます。この点に注意してください。

学習タイプ Prompt Completion
ゼロショット Headline: Coach confident injury won't derail Warriors (見出し: 監督は、怪我があっても Warriors が戦えると確信している)
トピック:
The coach is confident that the injury won't derail the Warriors' season. (監督は、怪我があっても Warriors がシーズンを戦えると確信しています。) The team is still focused on their goals and that they will continue to work hard to achieve them. (チームはそれでも目標を目指し、その目標を達成するために懸命に努力を続けます。)
少数ショット Headline: Twins' Correa to use opt-out, test free agency (見出し: Twins の Correa がオプトアウトを使用し、フリー エージェンシーをテストする)
Topic: Baseball (トピック: 野球)
Headline: Qatar World Cup to have zones for sobering up (見出し: カタール ワールド カップで酔いをさますためのゾーンを設置)
Topic: Soccer (トピック: サッカー)
Headline: Yates: Fantasy football intel for Week 6 (見出し: Yates: 第 6 週の想像力に富むフットボール センス)
Topic: Football (トピック: フットボール)
Headline: Coach confident injury won't derail Warriors (見出し: 監督は、怪我があっても Warriors が戦えると確信している)
トピック:
Basketball (バスケットボール)

上記の例は、少数ショット学習の有用性を示しています。 例がない場合、モデルは目的の動作を推測するようですが、例があると、モデルに対して動作方法が明確に示されます。 これは、モデルの能力も示しています。例に "バスケットボール" というラベルがなくても、モデルは必要なラベルのカテゴリを推測できます。

キュー

キューは、モデルの出力の "ジャンプスタート" として機能し、モデルを目的の出力に誘導するのに役立ちます。 多くの場合、これはプレフィックスであり、それに基づきモデルを構築できます。 次の例では、ストーリーに重要な要素を含めるように指示するキューを示します。 キューは、多くの場合、指示と併用されますが、常に併用されるわけではありません。 次の例では、モデルを使用して長いお知らせのメールを要約しています。 キューは、モデルの出力を重点的に指示する場合や、特定の出力形式 (箇条書き) を提案する場合などに役立ちます。

Chat Completion API のコンテキストでは、指示はシステム メッセージの形式をとり、少数ショットの例は、モデルの準備に役立つ一連のユーザー/アシスタントの対話例を提供することで示します。

キューの数 Prompt Completion
0 Performance reviews are a core component of our Performance & Development approach at Contoso. (パフォーマンス レビューは、Contoso でのパフォーマンスと開発アプローチの主要な構成要素です。) […]
Summarize the above email message: (上記のメール メッセージを要約してください。)
The purpose of this email is to inform employees of recent changes to the performance review experience, which is part of Contoso's Performance & Development approach. (このメールの目的は、Contoso のパフォーマンスと開発アプローチの一部である、パフォーマンス レビュー エクスペリエンスへの最近の変更を従業員に通知することです。) The changes include an improved structure, upgraded in-tool user experience, and focused prompts. (この変更には、構造の改善、ツール内ユーザー エクスペリエンスのアップグレード、焦点を絞ったプロンプトが含まれます。) Additionally, there is now an optional Conversation Starters section for employees to flag topics they'd like to discuss with their managers. (さらに、従業員がマネージャーと話し合いたいトピックにフラグを設定できるオプションの会話スターター セクションが追加されました。)
1 Performance reviews are a core component of our Performance & Development approach at Contoso. (パフォーマンス レビューは、Contoso でのパフォーマンスと開発アプローチの主要な構成要素です。) […]
Summarize the above email message: (上記のメール メッセージを要約してください。)
The key takeaway of the message is (このメッセージの重要なポイントは、)
Contoso が、主要優先事項、期待、影響に重点が置かれるようにパフォーマンス レビュー エクスペリエンスを改善している点です。 さらに、ヒント、リソース、ガイダンスを使用して、ツール内ユーザー エクスペリエンスをアップグレードしています。 Finally, they are adding guidance on how to activate company-wide core priorities. (最後に、全社的な主要優先事項に積極的に取り組むためのガイダンスを追加しています。)
2 Performance reviews are a core component of our Performance & Development approach at Contoso. (パフォーマンス レビューは、Contoso でのパフォーマンスと開発アプローチの主要な構成要素です。) […]
Summarize the above email message: (上記のメール メッセージを要約してください。)
重要なポイント:
Contoso is introducing changes to the performance review experience, based on feedback from employees. (Contoso は、従業員からのフィードバックに基づいて、パフォーマンス レビュー エクスペリエンスに変更を加えています。)
• The changes include a new focus on core priorities, expectations, and impact; an upgraded user experience; and new guidance on company-wide core priorities. (この変更には、主要優先事項、期待、影響に新たに重点を置くこと、ユーザー エクスペリエンスのアップグレード、全社的な主要優先事項に関する新しいガイダンスが含まれます。)
• Performance reviews are a time to reflect on past performance and learning as well as to plan for future priorities and growth opportunities. (パフォーマンス レビューは、過去のパフォーマンスと学習を振り返り、将来の優先事項と成長機会を計画するための時間です。)
• Employees and managers should write comments in advance of the performance review meeting. (従業員とマネージャーは、パフォーマンス レビュー会議の前にコメントを書く必要があります。)
• There should be at least two performance reviews per year. (1 年に少なくとも 2 回のパフォーマンス レビューが必要です。)
• The time investment for each review should remain about the same. (各レビューに費やす時間は、ほぼ同じである必要があります。)

関連する参照先

サポート コンテンツ (Supporting content) は、モデルが何らかの方法で出力に影響を与えるために利用できる情報です。 これは、タスクの主なターゲットではないという点でプライマリ コンテンツとは異なりますが、通常はプライマリ コンテンツと共に使用されます。 一般的な例としては、現在の日付、ユーザーの名前、ユーザーの好みなどのコンテキスト情報があります。 次の例では、サポート コンテンツを使用して、ユーザー向けに計画された一連のワークショップを編成しています。 サポート (重要なトピック) がないと、モデルはワークショップを一覧表示するだけですが (スペースの都合で一部のみ表示)、重要なトピックを知らせると、モデルは会議を正確にグループ化できます。

関連する参照先 Prompt Completion
なし Workshop list: (ワークショップの一覧:)
Title Description (タイトル、説明)
Planning Workshop Kickoff Please join us to kick off our workshop! (ワークショップ開始の計画、ワークショップを開始するので参加してください!) Hear from our leaders about cross group priorities and learnings for the year ahead. (今後 1 年間のグループ間の優先事項と学習事項について、リーダーから話を聞きます。) The invitation to this event has already been sent to everyone in […] (このイベントへの招待状は、[...] のすべてのユーザーに既に送信されています)
上記のワークショップを、トピック別にグループ化し、要約してください。
Workshop list: (ワークショップの一覧:)
Planning Workshop Kickoff (ワークショップ開始の計画)
-Planning Workshop Wrap-up (ワークショップの計画の要約)
- Core MeetUp (主要な会合)
- Customer Driven Perspectives (顧客主導の視点)
-Impact and Key Focus Areas (影響と重点を置く主な分野)
-Best practices (ベスト プラクティス)
-Accelerating app adoption (アプリの導入の加速) [...]
With Workshop list: (ワークショップの一覧:)
Title Description (タイトル、説明)
Planning Workshop Kickoff Please join us to kick off our workshop! (ワークショップ開始の計画、ワークショップを開始するので参加してください!) Hear from our leaders about cross group priorities and learnings for the year ahead. (今後 1 年間のグループ間の優先事項と学習事項について、リーダーから話を聞きます。) The invitation to this event has already been sent to everyone in […] (このイベントへの招待状は、[...] のすべてのユーザーに既に送信されています)
My Important Topics: prompt engineering, search, GPT models (重要なトピック: プロンプト エンジニアリング、検索、GPT モデル)
Summarize the workshops above, grouped by my important topics: (上記のワークショップを、重要なトピック別にグループ化し、要約してください。)
1.プロンプト エンジニアリング:
- New prompt engineering tips (新しいプロンプト エンジニアリングのヒント)
- The art of prompt engineering (プロンプト エンジニアリングの技術)
2. Search: (検索)
-Intro to vector search with embedding (埋め込みを使用したベクター検索の概要)
3. GPT Models: (GPT モデル:)
- Intro to GPT-4 (GPT-4 の概要)
- GPT-35-Turbo の詳細。

シナリオ固有のガイダンス

プロンプト エンジニアリングの原則は多種多彩なモデルにわたって一般化できますが、特定のモデルには特殊なプロンプト構造が必要です。 Azure OpenAI GPT モデルの場合、現在、プロンプト エンジニアリングが有効な 2 つの異なる API があります。

  • Chat Completion API。
  • Completion API。

それぞれの API で、入力データの書式設定を変える必要があり、変えることでプロンプト デザイン全体に影響が及びます。 Chat Completion API では、GPT-35-Turbo および GPT-4 モデルがサポートされています。 これらのモデルは、ディクショナリの配列内に格納されている特定のチャットのようなトランスクリプトで書式設定された入力を受け取るように設計されています。

Completion API では、以前の GPT-3 モデルをサポートしており、特定の書式設定規則のないテキスト文字列を受け取るという点で、その入力要件は非常に柔軟です。

このセクションの手法では、大規模言語モデル (LLM) を使用して生成する応答の正確性とグラウンディングを改善させるための戦略について説明します。 ただし、プロンプト エンジニアリングを効果的に使用する場合でも、モデルで生成される応答を検証する必要があることを忘れないでください。 慎重に作成されたプロンプトが特定のシナリオに対して適切に機能したからといって、必ずしも特定のユース ケースでより広範に一般化されるとは限りません。 LLM の制限事項を理解することは、その長所を活かす方法を理解することと同じくらい重要です。

このガイドでは、Chat Completion のメッセージ構造の背後にある仕組みについては詳しく説明しません。 Chat Completion モデルをプログラムで操作することに慣れていない場合は、まず、Chat Completion API の攻略ガイドを読むことをお勧めします。

Note

ガイドのこのセクションの例はすべて、英語版の基本 GPT-4 モデルでテストされました。 この記事の別の言語によるローカライズ版を読んでいる場合、これらの応答は英語の結果をローカライズした翻訳を表します。 モデルのプロンプトを作成するために使用している言語に応じた潜在的な制限事項の詳細については、責任ある AI の透過性に関するメモを参照してください。

少数ショット学習

言語モデルを新しいタスクに適応させる一般的な方法は、少数ショット学習を使用するというものです。 少数ショット学習には、モデルにコンテキストを追加するプロンプトの一部として、一連のトレーニング例が用意されています。

Chat Completions API を使用する場合、ユーザーとアシスタントの間の一連のメッセージ (新しいプロンプト形式で記述) は、少数ショット学習の例として機能します。 これらの例はモデルを事前処理するために使用でき、特定の方法で応答し、特定の動作をエミュレートし、一般的な質問に対する回答をシード処理できます。

システム メッセージ 少数ショットの例
アシスタントは、ユーザーが税金に関連する質問に答えられるようにするために設計されたインテリジェントなチャットボットです。
Instructions
- 税金に関連する質問にのみ回答してください。
- 回答がわからない場合は、"わからない" または "はっきりしない" と言って、IRS Web サイトにアクセスして詳細を確認するようにユーザーに勧めることができます。
ユーザー - "いつまでに税金を申告する必要がありますか?"
アシスタント - "2023 年は、4 月 18 日までに税金を申告する必要があります。 4 月 15 日は 2023 年は土曜日なので、通常の 4 月 15 日の期限より後の日付になります。 詳細については、https://www.irs.gov/filing/individuals/when-to-file を参照してください"

ユーザー - "還付される税金の状態を確認するにはどうすればよいですか?"
アシスタント - "https://www.irs.gov/refunds にアクセスすれば、還付される税金の状態を確認できます"

上の表は基本的なプロンプト構造を示していますが、正確なプロンプト形式の詳細については、Chat Completion のガイドを参照する必要があります。

チャット以外のシナリオ

Chat Completion API はマルチターン会話の処理に最適化されていますが、チャット以外のシナリオにも使用できます。 たとえば、感情分析シナリオでは、次のプロンプトを使用できます。

システム メッセージ User Assistant
あなたは、音声データからセンチメントを分析するように設計されたアシスタントです。 ユーザーがテキストの文字列を貼り付けると、あなたは話者の応答に対する評価で応答します。 1 から 10 (10 が最も高い) のスケールで評価します。 この評価になった理由を説明してください。 こんにちは、Contoso 薬局にお電話ありがとうございます。どちら様でしょうか。本日、お困りの点をお伺いします、Mary。お困りの内容を正確に教えてください。なるほど、承知しました。喜んでこちらでお調べいたします。しばらくお待ちください。こちらにはジェネリック形式のリピトールを服用しているとありますが、間違いありませんか。わかりました。お客様のお医者様が 2021 年に実際これらの薬の処方を止めたとあります。わかりました。システムに欠落があり、そのように報告されていないだけのことがあるので、こちらで喜んでお調べいたします。見てみますのでしばらくお待ちください。こちらにお客様のお医者様が、2012 年から 2021 年までこれらの薬を処方したことが示されています。ええ、医院から提供された最新の記録によれば、現在、別の薬であるメトホルミンが服用されることになっています。このまま処理を進め、500 mg の少量形式で受け取れるように処方箋を作成しましょうか。どういたしまして、Mary。本日、何か他にご用がございましたらお申し付けください。 センチメント評価: 8
このテキストの話者は、丁寧で、助けになり、忍耐強くありながら、顧客の懸念に対処しているようです。 時間をかけて情報を確認し、明確な説明を行い、支援を提供しています。 ただし、会話の一部に不確実性がわずかに残っており、顧客に完全な自信を伝えていない可能性があるため、評価は 10 ではありません。

明確な命令から始める

プロンプトに情報が表示される順序が重要です。 これは、GPT スタイル モデルが、入力の処理方法を定義した特定の方法で構築されているためです。 調査を行った結果、追加のコンテキスト情報や例を伝える前に、プロンプトの最初にモデルに行わせるタスクを指示することが、より高品質の出力の生成に役立つ可能性があることが示唆されました。

注意

一般にこの手法に従うことをお勧めしますが、以前のモデル バージョン (GPT-3 以前) とは対照的に、このテストでは、手法が使用されているかどうかに関係なく、ChatGPT モデルおよび GPT-4 モデルとのモデル応答が同じであると示されました。 次の例の場合では、プロンプトの最初または最後に "複数のソース… 噴火" のステートメントを追加しても、最終的なモデル応答に変化を起こさなかったことがわかります。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 あなたのタスクは、"複数のソースで、別の大規模な噴火が起きる可能性が述べられています" というステートメントが、次のスニペット セットからの特定の引用で支持されているかどうかを確認することです。
---
スニペット
[1] 巨大地震がシアトルを襲う可能性は 14% と専門家は言っています
シアトル - 今後 50 年間にマグニチュード 9 のカスケード地震がシアトルを襲う可能性が 14% あると、米国地質調査所では推定しています。 "残念ながらできないのですが...

[2] 地震の専門家は、シアトルの "本当に大きなもの" の最新の見通しを説明しています
ワシントン大学の地球物理学者は、「今後 50 年間にマグニチュード 9 の地震が発生する可能性は約 14% あります」と述べています...
---
「複数のソースが大規模な噴火の可能性について述べています」というステートメントはスニペットで直接暗示または明記されていますか?
いいえ。このステートメントは、スニペットで直接暗示も明記もされていません。 スニペットでは、今後 50 年間に "巨大地震" と "マグニチュード 9 のカスケード地震" がシアトルを襲う可能性について述べていますが、別の大規模な噴火の可能性については述べていません。

最後に命令を繰り返す

モデルは、近接誤差の影響を受ける可能性があります。これは、このコンテキストでは、プロンプトの最後にある情報が、プロンプトの最初にある情報よりも出力に大きな影響を与える可能性があることを意味します。 したがって、プロンプトの最後で指示を繰り返し、生成された応答への影響を評価する実験を行う価値があります。

出力を事前処理する

これは、プロンプトの最後にいくつかの単語または句を含めて、目的の形式に従ったモデル応答を取得することを指します。 たとえば、“Here’s a bulleted list of key points:\n- ” などのキューを使用すると、出力が箇条書きのリストとして書式設定されていることを確認できます。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 できるだけ少ない単語で答えてください。 John Smith は Lucy Smith と結婚しています。 5 人の子供がいて、Microsoft でソフトウェア エンジニアとして働いています。 これをファクトチェックするには、どのような検索クエリを実行する必要がありますか? ## 考えられる検索クエリの 1 つは次のとおりです。 "John Smith 結婚 Lucy Smith 5 人の子供ソフトウェア エンジニア Microsoft"

上記のプロンプトでは、"考えられる検索クエリの 1 つは次のとおりです" のテキストにより、単一の出力を生成するようにモデルが事前処理されます。 この手掛かりがないと、モデルは複数の検索クエリを出力として生成します。

明確な構文を追加する

プロンプトに明確な構文 (句読点、見出し、セクション マーカーなど) を使用すると、意図を伝えるのに役立ち、多くの場合、出力の解析が容易になります。

次の例では、異なる情報ソースまたはステップの間に区切り記号 (この場合は ---) が追加されています。 これにより、生成の停止条件として --- を使用できます。 さらに、セクション見出しや特殊変数は、区別するために大文字で表示されます。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 段落を読んでから、ファクトチェックのためにクエリを検索エンジンに発行します。 クエリについても説明します。
---
段落
John Smith は Lucy Smith と結婚しています。 5 人の子供がいて、Microsoft でソフトウェア エンジニアとして働いています。 これをファクトチェックするには、どのような検索クエリを実行する必要がありますか?
---
QUERIES
1. "John Smith Microsoft" - John Smith が実際に Microsoft に雇用されているかどうかを確認するためです。
2. "John Smith Lucy Smith" - John Smith が Lucy Smith と結婚しているかどうかを確認するためです。
3. "John Smith 子供" - John Smith に 5 人の子供がいるかどうかを確認するためです。

使用する構文がわからない場合は、Markdown または XML の使用を検討してください。 モデルは、XML と Markdown の大量の Web コンテンツでトレーニングされており、より良い結果が得られる可能性があります。

タスクを中断する

大規模言語モデル (LLM) は多くの場合、タスクがより小さなステップに分割されていればパフォーマンスが向上します。 たとえば、以前に参照した検索クエリ プロンプトでは、最初にモデルが関連するファクトを抽出するように指示され、次にそれらのファクトを検証するために使用できる検索クエリを生成するように指示されるように、プロンプトを再構築できます。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 段落を読んでから、ファクトチェックのためにクエリを検索エンジンに発行します。
---
段落
John Smith は Lucy Smith と結婚しています。 5 人の子供がいて、Microsoft でソフトウェア エンジニアとして働いています。 これをファクトチェックするには、どのような検索クエリを実行する必要がありますか?
---
次に、ファクト クレームを抽出し、これらをファクトチェックするクエリを発行します。 クエリを発行する場合は、関数 SEARCH("query") を使用します

ファクト クレーム
1.John Smith は Lucy Smith と結婚しています
2. 5 人の子供がいる
3. Microsoft でソフトウェア エンジニアとして働いている

QUERIES
SEARCH("John Smith 結婚 Lucy Smith")
SEARCH("John Smith 家族規模")
SEARCH("John Smith Microsoft ソフトウェア エンジニア")

明確な構文を使用してセクションを区別し、出力を事前処理することに注意してください。 このシンプルな例では、タスクを 1 つのステップから 2 つのステップに分割しても目を見張るほどではありませんが、ファクト クレームを数多く含むより大きなテキストに対してこれを行ってみると、タスクの分割により大きな違いが生じる可能性があります。

アフォーダンスの使用

場合によっては、情報と回答に関する独自のパラメーターに依存するのではなく、モデルでアフォーダンスを使用させることができます。 たとえば、検索は、作成された回答を軽減するのに役立ち、最新の情報を取得するアフォーダンスになります。

アフォーダンスを使用する簡単な方法の 1 つは、アフォーダンス呼び出しがモデルによって生成されたら生成を停止し、結果をプロンプトに貼り付けるというものです。 上記の SEARCH 呼び出しを実行した後のフォローアップ呼び出しの例を次に示します。 検索結果をプロンプトに貼り付け、以前の SEARCH 呼び出しを置き換えた方法に注目してください。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 段落を読み、ファクト クレームを抽出し、検索エンジンの結果を使用してファクトチェックします
---
段落
John Smith は Lucy Smith と結婚しています。 5 人の子供がいて、Microsoft でソフトウェア エンジニアとして働いています。 これをファクトチェックするには、どのような検索クエリを実行する必要がありますか?
---
ファクト クレーム
- John Smith は Lucy Smith と結婚している
- John と Lucy には 5 人の子供がいる
- John は Microsoft でソフトウェア エンジニアとして働いている
---
上記のクレームを調査するために発行されるさまざまな検索クエリを次に示します。
検索クエリ
- John Smith 結婚 Lucy Smith
- John Smith 子供の数
- John Smith ソフトウェア エンジニア Microsoft
---
検索結果のスニペットを次に示します。
スニペット:
[1] … John Smith の結婚式は 2012 年 9 月 25 日でした...
[2] … John Smith はパーティーに妻の Lucy と同伴しました
[3] John はサッカーの試合に 2 人の娘と 3 人の息子を連れて行きました
[4] … Microsoft で 10 年勤めた後、Smith は自身のスタートアップ企業である Tailspin Toys を創設しました
[5] John M は町の鍛冶屋 (smith) であり、Fiona と結婚しました。 彼らには Lucy という名前の娘がいます
---
スニペットがある場合、上記のファクト クレームのそれぞれをファクト チェックします。
- John Smith は Lucy Smith と結婚している: 確認済み。 スニペット [1] と [2] は両方、John Smith の妻が Lucy であると述べています。

- John と Lucy には 5 人の子供がいる: 確認済み。 スニペット [3]は、John が 2 人の娘と 3 人の息子を連れていたと述べています。

- John は Microsoft でソフトウェア エンジニアとして働いている: 一部確認済み。 スニペット [4] は、John が Microsoft に 10 年間勤めたと述べていますが、現在もそこで働いているとは明示していません。 現在の雇用状態を確認するには、さらに調査が必要になる可能性があります。

思考の連鎖プロンプティング

これはタスクを分割する手法のバリエーションです。 タスクを小さなステップに分割する代わりに、このアプローチでは、モデル応答はステップバイステップで進め、関連するすべてのステップを表すように指示されます。 これにより、結果が不正確になる可能性が減り、モデル応答の評価が容易になります。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 シドニーで開催されたオリンピックで最も表彰された (メダル数が最大の) 個人アスリートは誰でしたか? 応答でステップバイステップのアプローチを取り、ソースを引用し、最終的な回答を次の形式で伝える前に推論を行います: 回答は次のとおりです: <name> ステップ 1: シドニーオリンピックの年を特定します。 シドニー オリンピックは 2000 年に開催されました。

ステップ 2: 2000 年のシドニー オリンピックで複数のメダルを獲得した個人アスリートのリストを見つけます。

オリンピックの公式 Web サイトによると、2000 年シドニー オリンピックで複数のメダルを獲得した個人アスリートが何人かいました。 注目すべき名前の一部を次に示します。
• Ian Thorpe (オーストラリア) - 金 3 個、銀 2 個、銅 0 個
• Pieter van den Hoogenband (オランダ) - 金 2 個、銀 0 個、銅 2 個
• Lenny Krayzelburg (アメリカ) - 金 3 個、銀 0 個、銅 0 個
• Inge de Bruijn (オランダ) - 金 3 個、銀 1 個、ブロンズ 0 個

ステップ 3: 最もメダルの多いアスリートを特定します。 2000 年シドニー オリンピックで複数のメダルを獲得した個人アスリートのリストを確認した後、最もメダルの多いアスリートは、オーストラリアの Ian Thorpe であり、合計 5 個のメダル (金 3 個と銀 2 個) を獲得したことがわかります。

したがって、回答は次のとおりです: Ian Thorpe となります。

出力構造の指定

プロンプトを使用して出力の構造を指定すると、結果の性質と品質に大きな影響を与える可能性があります。 "真のファクトのみを記述する" または "情報を作成しない" というシステム メッセージ入力が、適切な軽減策にならない場合があります。 代わりに、モデル応答に引用文も含めるように要求すると、誤った応答の広がりを抑える結果になる可能性があります。

ステートメントを作成するときにソース マテリアルを引用するようにモデルに指示した場合、これらのステートメントは根拠に基づく可能性がはるかに高くなります。 引用文を要求すると、応答を生成するごとに 2 つのエラーを発生させる必要が生じます。最初のエラーは作成された応答であり、2 番目のエラーは不適切な引用文です。 引用文が支持するテキストに近いほど、モデルが引用文を予測するために必要な距離が短くなる点に注意してください。これは、行内の引用文がコンテンツの末尾にある引用文よりも、誤ったコンテンツ生成の軽減策として適していることを示唆しています。

同様に、ファクト ステートメントを段落から抽出するようにモデルに要求すると、"X は Y および Z を実行しています" などの複合ステートメントが抽出される可能性があります (これは検証がさらに難しい場合があります)。 これは、(entity1、リレーションシップ、entity2) などの出力構造を指定することで回避できます。

次の例は、引用文の使用と、定義された構造に適合するようにモデル応答に指示する方法を示しています。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです 次の会話でカスタマー サポート エージェントによって示されているさまざまな動作を一覧表示してください。
---
こんにちは、Contoso 薬局にお電話ありがとうございます。どちら様でしょうか。本日、お困りの点をお伺いします、Mary。お困りの内容を正確に教えてください。なるほど、承知しました。喜んでこちらでお調べいたします。しばらくお待ちください。こちらにはジェネリック形式のリピトールを服用しているとありますが、間違いありませんか。わかりました。お客様のお医者様が 2021 年に実際これらの薬の処方を止めたとあります。わかりました。システムに欠落があり、そのように報告されていないだけのことがあるので、こちらで喜んでお調べいたします。見てみますのでしばらくお待ちください。こちらにお客様のお医者様が、2012 年から 2021 年までこれらの薬を処方したことが示されています。ええ、医院から提供された最新の記録によれば、現在、別の薬であるメトホルミンが服用されることになっています。このまま処理を進め、500 mg の少量形式で受け取れるように処方箋を作成しましょうか。どういたしまして、Mary。本日、何か他にご用がございましたらお申し付けください。
---
カスタマー サポート エージェントの応答はどうでしたか?
BEHAVIOR("理由") という形式を使用して、さまざまな動作を分類して一覧表示し、分類の背後にある理由を列挙します
1. 丁寧なあいさつの BEHAVIOR("エージェントは、丁寧なあいさつで会話を開始し、発信者の名前を要求します")
2. 共感的な BEHAVIOR("エージェントは Mary の不満を認め、彼女の懸念を理解しようとします")
3. 注意深い BEHAVIOR("エージェントは顧客の問題を聞き、詳細を尋ねます")
4. プロアクティブな BEHAVIOR("エージェントは、顧客の問題を確認することを申し出ます")
5. 有益な BEHAVIOR("エージェントは、顧客の処方履歴の関連情報を提供します")
6. 徹底的な BEHAVIOR("エージェントは、システム内の起こりうるギャップを調べ、完全な応答を提供します")
7. 確認の BEHAVIOR("エージェントは顧客に現在の薬を確認します")
8. ソリューション指向の BEHAVIOR("エージェントは、顧客に新しい処方箋を記述するように申し出ます")
9. 丁重な BEHAVIOR("エージェントは顧客に感謝し、必要に応じてさらに支援することを申し出ます")
システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 テキスト内で見られるパターンに基づいて、次のニュースの見出しをトピック カテゴリにまとめます。 また、これらのカテゴリの定義方法の背後にある理由も述べます。
出力形式:
{
"TOPIC_NAME": "",
"HEADLINES": [],
"REASONING": ""
}

ニュースの見出しを入力します。
1. "AR + ML で 10 年代の本からプレゼンテーションまで"
2. "世界初のテキスト認識用畳み込みネットワークを披露する 32 歳の Yann LeCun の 1993 年のデモ"
3. "絵画をアニメーション化するように適用された First Order Motion Model"
4. "$GME、$NOK、$BB、$AMC の購入を妨げている Robinhood と他のブローカーが販売を許可する"
5. "時間外取引を 5% 以上下回った United Airlines の株価"
出力:

{
"ARTIFICIAL_INTELLIGENCE": {
"HEADLINES": [
"AR + ML で 10 年代の本からプレゼンテーションまで"、
"世界初のテキスト認識用畳み込みネットワークを披露する 32 歳の Yann LeCun の 1993 年のデモ"、
"絵画をアニメーション化するように適用された First Order Motion Model"
],
"REASONING": "これらの見出しは、人工知能、機械学習、さまざまな分野でのアプリケーションに関連しています。"
},
"FINANCIAL_MARKETS": {
"HEADLINES": [
"$GME、$NOK、$BB、$AMC の購入を妨げている Robinhood と他のブローカーが販売を許可する"、
"時間外取引を 5% 以上下回った United Airlines の株価"、
"ビットコインは 1 年前の今日は約 2 万ドルでした"
],
"REASONING": "これらの見出しは、金融市場、株式、暗号通貨、取引プラットフォームに関連しています。"
}
}

温度パラメーターと Top_p パラメーター

温度パラメーターを変更すると、モデルの出力が変更されます。 温度パラメーターは、0 から 2 の間で設定できます。 たとえば、0.7 のように値を大きくすると、出力がランダムになり、より多くの異なる応答が生成されますが、 0.2 のように値を小さくすると、出力はより焦点が絞られ具体的になります。 架空のストーリーは、より高い温度を使用して生成される可能性があります。 ただし、法的文書を生成するには、はるかに低い温度を使用することをお勧めします。 Top_probability はもう 1 つのパラメーターであり、モデル応答のランダム性も制御するという点で温度に似ていますが、制御する方法は異なります。 一般的な推奨事項は、これら 2 つのパラメーターの両方ではなく、どちらかを一度に変更することです。

根拠付けるコンテキストを提供する

信頼性の高い回答を提供する最も効果的な方法の 1 つは、(根拠付けるデータ) から応答を引き出すモデル データを与えることです。 ユース ケースが最新の信頼性の高い情報に依存しており、純粋に創造的なシナリオではない場合は、根拠付けるデータを提供することを強くお勧めします。 一般に、ソース マテリアルを目的の回答の最終形式に近づけるほど、モデルで実行する必要がある作業が少なくなり、エラーが発生する可能性が少なくなります。 ここでは、Azure OpenAI Service での GPT-4 の起動を説明する最近のブログがシステムに提供され、初期の顧客の名前をいくつか挙げるように求められる例を示します。

システム メッセージ User Assistant
あなたは、情報の検索を支援する AI アシスタントです。 以下のテキストからのみ回答を提供し、100 語以下で応答してください。
"Microsoft では、より多くのユーザーが AI を使用して利益が得られるように、創造性を発揮し、生産性を高め、スキルを向上させる新しい方法を常に探しています。 これにより、お客様は...

… その結果、モデルが有害な応答を生成する可能性が低くなります。"1

100 語以下で回答します。 可能な限り箇条書きリストを使用します。
Azure OpenAI Service GPT-4 モデルの初期のお客様は誰ですか? Azure OpenAI Service GPT-4 モデルの初期のお客様は次のとおりです。
- Epic Healthcare: GPT-4 を使用して、医師や看護師がデータの入力と調査に費やす時間を短縮することを予定しています。
- Coursera: GPT-4 で Azure OpenAI Service を使用して、プラットフォームで新しい AI を利用した学習エクスペリエンスを作成しています。
- Coca-Cola: Azure OpenAI を使用して、ナレッジ ハブを構築し、GPT-4 のマルチモーダル機能をマーケティング、広告、広報、顧客関係に活用することを予定しています。
- あらゆる規模の他の企業は、Azure AI を使用して、カスタマー エクスペリエンスを向上させ、長い形式のコンテンツを要約し、ソフトウェアの記述を支援し、適切な税データを予測することでリスクを軽減しています。

1Azure OpenAI GPT-4 起動ブログのテキスト。

ベスト プラクティス

  • 具体的にする。 解釈の幅をできるだけ狭めます。 操作領域を制限します。
  • わかりやすくする。 例示を使用します。
  • 繰り返す。 場合によって、モデルに対して繰り返し対話する必要があります。 プライマリ コンテンツの前後に指示を指定し、指示、キューなどを使用します。
  • 順序が重要。 モデルに情報を提示する順序が、出力に影響する場合があります。 指示をコンテンツの前に配置するか ("summarize the following…" (以下を要約してください))、コンテンツの後に配置するか ("summarize the above…" (上記を要約してください)) によって、出力が異なる場合があります。 少数ショットの例の順序も重要です。 これは、最新性バイアスと呼ばれます。
  • モデルに "out" (アウト) を指定する。 モデルが割り当てられたタスクを完了できない場合、モデルに代替パスを指定すると役立つ場合があります。 たとえば、テキストで質問するとき、"回答がない場合は、"見つかりませんでした" と応答してください" という内容を含めることができます。これにより、モデルが誤った応答を生成するのを回避できます。

スペース効率

入力サイズは、GPT モデルの世代が新しくなるたびに増加しますが、モデルが処理できるよりも多くのデータを提供するというシナリオも存続します。 GPT モデルは単語を "トークン" に分割します。一般的な複数音節の単語は、多くの場合、単一のトークンになりますが、それほど一般的ではない単語は音節で分割されます。 次の例では、さまざまな日付形式のトークン境界が示されていますが、このようにトークンは直感とは異なる場合があります。 この場合、月のスペルをすべて記述する方が、全体が数値の日付よりもスペース効率は高くなります。 現在のトークンのサポート範囲は、以前の GPT-3 モデルの 2,000 トークンから、最新の GPT-4 モデルの 32k バージョンの最大 32,768 トークンまでです。

トークン境界を示す色分けされたテキスト文字列のスクリーンショット。

この限られたスペースを考慮して、できるだけ効率的にスペースを使用することが重要です。

  • 表 – 前のセクションの例に示されているように、GPT モデルは表形式のデータを非常に簡単に理解できます。 これは、(JSON などを使用して) すべてのフィールドの前に名前を付けるよりも、データを含めるスペース効率のよい方法です。
  • 空白文字 – 連続する空白文字は個別のトークンとして扱われるため、スペースがただちに無駄になります。 一方、単語の前の空白文字は、通常、単語と同じトークンの一部として扱われます。 空白文字の使用に注意し、空白文字だけで十分な場合は句読点は使用しないでください。