Azure OpenAI のテキスト入力候補を使用する
GPT-35-Turbo モデルと GPT-4 モデルは、会話インターフェイス用に最適化された言語モデルです。 これらのモデルの動作は、以前の GPT-3 モデルとは異なります。 以前のモデルはテキスト入力とテキスト出力でした。つまり、先ほど説明したように、プロンプト文字列を受け入れ、プロンプトに追加する入力候補を返していました。
ただし、GPT-35-Turbo および GPT-4 モデルはカンバセーションインとメッセージアウトです。モデルは、チャットのような特定のトランスクリプト形式でフォーマットされた入力を想定し、チャット内のモデルで記述されたメッセージを表す入力候補を返します。
GPT-35-Turbo と GPT-4 は引き続きテキストを受け入れて、テキスト入力候補を生成できますが、力を発揮するのはチャットです。
Azure OpenAI には、これらの種類のモデルと対話するための次の 2 つの異なるオプションがあります。
- Chat Completion API。
- チャット マークアップ言語 (ChatML) を使用した Completion API。
チャット入力候補 API は、GPT-35-Turbo および GPT-4 モデルと対話するための新しい専用 API であり、ここではこれを使用して進めていきます。
チャット入力候補 API のロールについて
GPT-35-Turbo および GPT-4 モデルは、会話として書式設定された入力を受け入れるように OpenAI によってトレーニングされました。 モデルに送信されるすべての入力またはプロンプト、およびモデルから返されるすべての応答は、チャット入力候補 API の会話全体に追加されます。
チャット入力候補 API は、受信プロンプトと送信応答をメッセージとして参照します。
このモデルは、ロールごとに整理された会話を含むメッセージ オブジェクトの配列を受け入れます。 ロールには、システム、ユーザー、アシスタントの 3 種類があります。
システム ロール
システム ロールは、システム メッセージとも呼ばれ、配列の先頭に含まれます。 このメッセージは、モデルに最初の指示を与えます。 システム ロールには、次のようなさまざまな情報を指定できます。
- アシスタントの簡単な説明
- アシスタントの性格的な特性
- アシスタントに従ってもらいたい手順またはルール
- FAQ からの関連する質問など、モデルに必要なデータまたは情報
ユース ケースに合わせてシステム ロールをカスタマイズすることも、単に基本的な指示を含めることもできます。 システム ロールまたはメッセージは省略可能ですが、最適な結果を得るために、少なくとも基本的なものを含めることをお勧めします。
ユーザー ロールとアシスタント ロール
会話は、ユーザーとアシスタントの間で行われます。 ユーザーは、プロンプトを入力してモデルと対話するユーザーです。 モデルからの応答は、システム ロールによって表されます。
最高品質の応答を得るために、ユーザーがモデルに送信するメッセージは、プロンプトの設計に関するベスト プラクティスに従う必要があります。
メッセージ プロンプトの例
ここでは、GPT-35-Turbo および GPT-4 モデルで使用できるさまざまなスタイルのプロンプトの例をいくつか示します。 これらの例は出発点にすぎず、さまざまなプロンプトを試して動作をカスタマイズできます。
基本的な例
GPT-35-Turbo モデルを chat.openai.com と同様に動作させる場合、"アシスタントは OpenAI によってトレーニングされた大規模な言語モデルです" のような基本的なシステム メッセージを使用できます。
次のユニットでは、チャット入力候補 API の .NET SDK の使用方法を学習しますが、ここでは例として変数名を使用します。
string systemMessage = "Assistant is a large language model trained by OpenAI";
string userMessage = "Who were the founders of Microsoft?";
指示の例
一部のシナリオでは、モデルに追加の指示を与えて、モデルが実行できる内容に対するガードレールを定義できます。
string systemMessage = """
Assistant is an intelligent chatbot designed to help users answer their tax related questions.
Instructions:
- Only answer questions related to taxes.
- If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information.
""";
string userMessage = "When are my taxes due?";
会話の管理
モデルにはメモリがないため、新しい質問ごとに、すべての質問と回答でトランスクリプトを更新する必要があります。そうしなければ、コンテキストが失われます。
つまり、モデルと対話するたびに、更新された会話全体をモデルに送信する必要があり、各モデルのトークン制限に簡単に達してしまうおそれがあります。
gpt-35-turbo
のトークン制限は 4096 トークンですが、gpt-4
と gpt-4-32k
のトークン制限はそれぞれ 8192 と 32768 です。 これらの制限内に収める必要があります。そうしなければ、エラーが発生します。
トークン数を追跡し、モデルに送信された配列から最も古いメッセージを削除できます。 システム メッセージは必ず保持し、アシスタントまたはユーザーのメッセージのみを削除することをお勧めします。 ただし、この会話管理方法では、時間の経過とともに、会話の前半部分のコンテキストが失われるため、会話品質が低下するおそれがあります。
別の方法として、トークンの制限に達したら、ユーザーに新しい会話を開始するよう求めることができます。