🚲

【まとめ】ChatGPT、GPT-4のAPIリクエストパラメータ

2023/04/09に公開

はじめに

ChatGPT、GPT-4のAPIがリリースされてから、多くのAIサービスが一気に登場してきました。
みなさんも仕事や趣味でAPI利用されている人が多いのではないでしょうか?

デフォルトでもChatGPT、GPT-4は精度のよい回答をしてくれますが、リクエストパラメータとしていろいろオプションがありますので、これらを利用することでチャットのやり取りをコントロールすることが可能です。

OpenAIの公式ガイドにも載ってますが、いまいちわかりにくいので備忘としてまとめてみました。

リクエストパラメータ

リクエストにパラメータを指定することにより、チャットの回答の挙動をコントロールすることができます。

以下はリクエストボディのパラメータについて記述します。

  • model: 必須
    • 使用するモデルの名前を指定します。
    • ChatGPT相当はgpt-3.5-turboを指定します。
    • GPT-4はgpt-4を指定します。
  • messages: 必須
    • チャットを生成するメッセージを記述します。
  • temperature:
    • 値の範囲:0~2
    • デフォルト:1
    • 高い値ほど出力をよりランダムにしますが、低い値はより確定的な出力にします。
    • top_pと両方を変更することは推奨されていません。
    • 0にすると、回答はほぼ固定で毎回同じ文章を回答します。
    • 高くするほどランダム性が高くなり、意味が分かりにくくなります。
    • ほどよく高めに設定すると、アイデアが広がります。
  • top_p:
    • 値の範囲:0~1
    • デフォルト:1
    • 例えば0.1だと上位10%の確率を構成するトークンのみが考慮されます。(多様性がなくなる)
    • 逆に数字が大きいほど多彩な単語が出力されます。(上位ではない単語も選択される)
  • max_tokens:
    • 値の範囲:整数
    • トークンの長さを指定できます。
    • 指定したトークンの上限に達すると回答が打ち切られ、会話の途中でも切れます。
    • プログラムからAPIを呼び出す場合は、意図せずに膨大なトークンを消費する可能性もありますので、動作に影響なければ設定することをお勧めします。
  • stream:
    • 値: bool
    • デフォルト:False
    • ChatGPTをブラウザで利用しているときのように部分的にメッセージが送信されます。トークンは、利用可能になるとデータのみのサーバー送信イベントとして送信され、ストリームはdata: [DONE]メッセージで終了します。
    • 指定しない場合はAPIでリクエストした全体の回答が最後にまとめてレスポンスがあります。
  • presence_penalty:
    • 値の範囲:-2.0~2.0
    • デフォルト:0
    • 正の値は、それまでのテキストに出現するかどうかに基づいて新しいトークンにペナルティを課し、モデルが新しいトピックについて話す可能性を高めます。
    • 今回、残念ながら検証はできていませんが、正の値で数字を大きくすると新しいネタを披露してくれる可能性が高まります。
    • おそらく一度でも使うとペナルティが課されるのが、frequency_penaltyとの違いだと推測しています。
  • frequency_penalty:
    • 値の範囲:-2.0~2.0
    • デフォルト:0
    • このパラメータも残念ながら検証はできていませんが、正の値になるとこれまでのテキスト内の既存の頻度に基づいて新しいトークンにペナルティを課し、モデルが同じ行を逐語的に繰り返す可能性を減らします。つまり正の値が大きいほど同じトークン(単語)が出現する確率が減ります。
    • おそらく、使った回数に対してペナルティを課すのがpresence_penaltyとの違いだと推測しています。
  • logit_bias:
    • 値の範囲: トークンを-100~100の関連するバイアス値にマップするjsonオブジェクト
    • デフォルト:null
    • 指定したトークンが回答文章に出現する可能性を変更します。
    • トークン (トークナイザーのトークン ID で指定) を -100 から 100 の関連するバイアス値にマップする json オブジェクトを受け入れます。数学的には、サンプリングの前にモデルによって生成されたロジットにバイアスが追加されます。
    • 効果はモデルごとに異なりますが、-1 から 1 の間の値では、選択の可能性が減少または増加します。-100 や 100 などの値を指定すると、関連するトークンが禁止または排他的に選択されます。
    • 例えば「dog」を1にするとdogに関連する文章が多くなる。「dog」を-1にするとdogに関連する文章が少なくなります。
    • つまり、好ましい単語や好ましくない単語の出現確率をコントロールできます。
    • トークンのIDはtiktokenとかで調べる必要があります。(なぜか単語ではなくトークンIDで記述する必要があります)
  • stop:
    • 値: 文字列 or 配列
    • デフォルト:null
    • トークンの生成を停止する最大 4 つのシーケンスを指定できます。
    • 指定した文字にマッチした場合に回答の出力をストップします。
    • 返されるテキストには停止シーケンスは含まれません。
      • "stop": ["Google"," AI"] →回答文章の途中でGoogleかAIにマッチした文字があった場合にストップ
  • n:
    • 値の範囲: 整数
    • デフォルト:1
    • プロンプトごとに生成するチャットの数を指定できます。
    • 数字の数だけ回答案を出力します。
    • 注: このパラメーターは多くの完了を生成するため、トークン クォータをすぐに消費する可能性があります。使い過ぎ防止のためにmax_tokensを使用し、最大トークンを設定しておきましょう。
  • user:
    • エンドユーザーを表す一意の識別子です。これは、OpenAI が不正行為を監視および検出するために利用します。
    • リクエストでエンドユーザー ID を送信することは、OpenAI が不正行為を監視および検出するのに役立つ便利なツールです。これにより、OpenAI は、アプリケーションでポリシー違反が検出された場合に、フィードバックをチームに提供できます。
    • ID は、各ユーザーを一意に識別する文字列である必要があります。識別情報の送信を避けるために、ユーザー名または電子メール アドレスをハッシュ化することをお勧めします。ログインしていないユーザーに製品のプレビューを提供する場合は、代わりにセッション ID を送信できます。

参考文献

https://platform.openai.com/docs/api-reference

その他

https://www.amazon.co.jp/dp/B0C1VWSPV8

Discussion