プロンプト エンジニアリングの概要

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

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

プロンプトの構築は難しい場合があります。 実際には、プロンプトは目的のタスクを完了するためにモデルの重みを構成するように機能しますが、これは科学というより芸術であり、多くの場合、成功するプロンプトを作成するには経験と直感が必要になります。 この記事の目標は、この学習プロセスを開始できるようにすることです。 説明するのは、すべての 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 の詳細。

ベスト プラクティス

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

スペース効率

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

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

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

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

次のステップ

Azure OpenAI の詳細についてご覧ください