チャット補完Beta
ChatGPTは、OpenAI の最先端の言語モデルgpt-3.5-turbo
に基づいています。
OpenAI の API を使用すると、gpt-3.5-turbo
を利用して独自のアプリケーションを構築して次のことを行う。
- メールまたはその他のテキスト コンテンツの下書き
- Python コードを書く
- 一連のドキュメントに関する質問に答える
- 会話型エージェントを作成する
- ソフトウェアに自然言語インターフェースを提供する
- さまざまな科目の個別指導
- 言語翻訳
- ゲームやその他のコンテンツのキャラクターになりすますこと
このガイドでは、チャットベースの音声モデル API を呼び出す方法を説明し、より良い結果を得るためのヒントを共有します。新しいOpenAI オンライン エディターのチャット形式を試すこともできます。
序章
チャット モデルは、一連のチャット会話を入力として受け取り、モデルによって生成されたメッセージを出力として返します。
チャット形式は、複数ターンの対話を容易にするように設計されていますが、対話のない単一ターンのタスク (以前は text-davinci-003
のような命令遵守モデルによって提供されたミッション)にも有効。
以下は、API 呼び出しの例です。
# ヒント:OpenAI Python v0.27.0バージョンを使って以下のコードを実行する必要があります。
import openai
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "あなたは有能な助手です。"},
{"role": "user", "content": "誰が2020年の世界プロ野球大会で優勝しましたか?"},
{"role": "assistant", "content": "ロサンゼルス・ドジャースは2020年に世界プロ野球大会で優勝しました。"},
{"role": "user", "content": "それはどこで開催されましたか?"}
]
)
Messages パラメータが主な入力です。Messagesはメッセージオブジェクト(message object)の配列でなければならず、各オブジェクトは役割(「system」、「user」、または「assistant」)とコンテンツを持っています。(メッセージの内容)。会話は1つのメッセージが減るか、または多くのメッセージがある。
通常、セッションはまずシステムメッセージ(「system」)でフォーマットし、その後ユーザーメッセージ(「user」)とアシスタントメッセージ(「assistant」)を交互に使用します。
システムメッセージはアシスタントの行動を設定するのに役立つ。上の例で、助手は「あなたは有能な助手だ」と説明された。
ユーザーメッセージヘルプ指示アシスタント。それらはアプリケーションのユーザーによって生成されることもできるし、開発者によって命令に設定されることもできる。
アシスタントメッセージは以前のレスポンスを保存するために使用されます。それらは開発者が望む反応を得るために書いた例でもいい。
ユーザーの指示が以前のメッセージに関する場合、チャット履歴を含めると役に立ちます。前の例では、ユーザーの最後の質問は「どこで開催しますか?」前述の世界プロ野球大会に関する文脈でのみ意味があります。モデルは前の要請を覚えられないため、すべての関連情報は会話で提供しなければならない。セッションに含まれるトークンがモデルの限界を超えた場合、いくつかの方法でセッションを縮小する必要があります。
レスポンスフォーマット
以下はAPIレスポンスのフォーマットの例です。
{
'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
'object': 'chat.completion',
'created': 1677649420,
'model': 'gpt-3.5-turbo',
'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
'choices': [
{
'message': {
'role': 'assistant',
'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
'finish_reason': 'stop',
'index': 0
}
]
}
Pythonでは、アシスタントのリターンは response['choices'][0]['message']['content']
で値を取ることができる。
各リターンにはfinish_reason
が含まれている。finish_reason
の値は:
stop
:APIは完全なモデル出力を返します。length
:max_tokens
パラメータやtoken制限のため、不完全なモデル出力を引き起こす。content_filter
:私たちのコンテンツフィルタリングのマークのため、内容を削除しました。null
:APIレスポンスはまだ進行中または未完成です。
tokensを管理する
言語モデルはテキストをブロックに分けて読み、これらのブロックを記と呼びます。英語では、トークンは短く、一つの文字だけでもいいし、長いし、一つの単語(例えば、a
やapple
)でもいいです。一部の言語では、一つのトークンは一つの文字より短く、一つの単語より短いこともできます。
例えば、文字列 「ChatGPT is great!」
六つのメモに解かれた [「Chat」、「G」、「PT」、「is」、「great」、「!」]
。
APIで呼び出したトークン数は、以下の方面の影響を受けます。あなたが使用しているAPIの価格は、あなたが記録数によって支払うからです。APIの呼び出し時間の長さは、より多くの記録を書くのに時間がかかるからです。API呼び出しが正常に動作するかどうか、総記録数はモデルに最も多くなければならないからです。大きな制限(例えばgpt-3.5-tur-0301は4096個の制限)。
APIで呼び出すトークンの数はこれらの影響が生じます。APIを呼び出すのにかかる金額に影響します。なぜなら、あなたは各トークンにお金を払わなければならないからです。APIを呼び出すのにかかる時間に影響を及ぼします。なぜなら、より多くの内容を書くのにより多くの時間がかかるからです。APIコールが正常に動作できるかどうか、トークンの総数はモデルの最大制限より小さくなければならない(例えば、gpt-3.5-tur-0301
の制限は4096個のトークン)
入力と出力のトークン数が集計されます。例えば、もしあなたのAPIがメッセージで10 tokensを使用し、20 tokensのレスポンス出力を受け取ったら、あなたの請求書は30 tokensにカウントされます。
APIコールで使用したトークンの数を調べるには、レスポンス体のusage
フィールドから取得できます(例えば、response['usage']['total_tokens']
)。
APIを呼び出さずに、テキスト文字列にどれだけ多くのトークンがあるかを調べるには、OpenAIのtiktoken Pythonライブラリーを使用してください。OpenAIのCookbookの案内tiktokenを使ってトークン数を計算する方法でサンプルコードを見つけます。
APIに送る各メッセージは、content
、role
、その他のフィールドのトークンの数と、暗黙フォーマットのための追加トークンを消費します。この状況は未来に若干変わるかもしれない。
もし一つの会話にあまりにも多くのトークンがあり、モデルの最大制限を満たすことができない場合(例えば、gpt-3.5-turbo
で4096個以上のトークン)、あなたはカット、省略、または他の方法で、モデルに合うまで、あなたのテキストを縮小しなければなりません。未知です。注意しなければならないのは、もしメッセージがモデルの入力から削除されると、モデルはこれらのメッセージの内容を把握できないということです。
また、入力が長すぎるセッションは受信のレスポンスが不完全になる可能性があることに注意してください。例えば、gpt-3.5-turbo
モデル入力のセッションが4090個のトークンの場合、レスポンスは6個のトークンの時に切断されます。
### チャットモデルに説明ガイドをする。
モデルのバージョンが変わるにつれて、モデルに説明指針を与えるベストプラクティスも変わる。以下のgpt-3.5-turbo-0301モデルに適用される提案は、将来のモデルには適用されない可能性があります。
多くの会話はシステムメッセージ(system message)で始まり、アシスタント( assistant)を暗黙的に指示する。例えば、ここはChatGPTを指示するためのシステムメッセージです。
You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible. Knowledge cutoff: {knowledge_cutoff} Current date: {current_date}
一般的に、gpt-3.5-turbo-0301
はシステムメッセージにあまり注意を払う必要がないので、より重要な説明指示メッセージは通常ユーザーメッセージ(user message)に置かれます。
もしモデルがあなたが望む結果でなければ、あなたは自由に反復して潜在的な改善を行うことができます。あなたはこのように処理してみてください。
-あなたの説明をもっと詳しく説明します。
-答えの中で欲しいフォーマットを指定してください。
-モデルに一歩ずつ考えさせるか、答えを決める前に正反対の両面を議論する。
より多くの工学アイデアを得たいなら、OpenAI Cookbookの信頼性を高める技術ガイドを読んでください。Echniques_to_improve_reliability.md)。
システムメッセージを除いて、temperature
とmax_tokens
は多くの設定で開発者がチャットモデルの出力に影響を与える2つ。temperature
に対して、0.8のようなより高い値は結果をよりランダムにし、0.2のようなより低い値は結果をより集中して明確にします。max_tokens
の場合、レスポンスをある長さに制限したい場合は、max_tokens
をある値に設定することができます。例えば、max_tokens
の値を5に設定すると、出力の値が切断され、結果はユーザーにとって意味がありません。
チャットモデル vs 補完モデル
gpt-3.5-turbo
とtext-davinci-003
の2つのモデルは似たような能力を持っていますが、前者の価格は後者の10分の1に過ぎません。ほとんどの場合、私たちはgpt-3.5-turbo
をおすすめします。
多くの開発者にとって、変換はprompt
の書き換えと再テストと同じくらい簡単です。
例えば、以下の補完promptを使って英語をフランス語に変換するとします。
次の英語のテキストをフランス語に翻訳します。: “{text}”
対応する会話はこうです:
[ {“role”: “system”, “content”: “あなたは英語をフランス語に翻訳するのが得意な人工知能アシスタントです。”}, {“role”: “user”, “content”: ‘次の英語のテキストをフランス語に翻訳します。: “{text}”’}]
あるいは、ユーザーメッセージさえあれば:
[ {“role”: “user”, “content”: ‘次の英語のテキストをフランス語に翻訳します。: “{text}”’}]
よくある質問
Gpt-3.5-turboモデルは微調整(fine-tuning)をサポートしていますか?
サポートしません。2023年3月1日から、GPT-3.5に基づいたモデルだけを微調整することができます。微細調整モデルの使い方の詳細については、微調整ガイドを参照してください。
あなたたちはAPIを通じて得たデータを保存しますか?
2023 年 3 月 1 日から、API 経由で送信されたデータを 30 日間保持しますが、モデルの改善には使用しません。データ利用規約の詳細をご覧ください。
レイヤーの調整
チャット API の出力にモデレーション レイヤーを追加する場合は、モデレーション ガイドラインに従って、OpenAI の使用ポリシーに違反するコンテンツを表示しないようにすることができます。