ChatGPT Delphi Client (2 / 5)

· 機能

OpenAI API を使用すると ChatGPT Turbo で独自の AI チャットを構築できます。sgcWebSockets ライブラリを使用すると API との連携が非常に簡単で、チャット会話を与えるとモデルはチャット補完レスポンスを返します。

ChatGPT Delphi 使用例

OpenAI ではメッセージを ChatGPT Turbo に送信するためのリクエストを構築する必要があります。temperature(出力のランダム性を制御)など、利用可能なパラメーターの一覧を以下に示します。

- model:(必須)使用するモデルの ID。Chat API で動作するモデルの詳細については、モデルエンドポイント互換性テーブルを参照してください。
- messages:(必須)チャット形式でチャット補完を生成するためのメッセージ。
- temperature:使用するサンプリング温度。0 から 2 の間。0.8 などの高い値は出力をよりランダムにし、0.2 などの低い値はより集中的で決定論的にします。
- top_p:温度によるサンプリングの代替(核サンプリング)。モデルは top_p 確率質量を持つトークンの結果を考慮します。0.1 は上位 10% の確率質量を構成するトークンのみが考慮されることを意味します。
- n:各入力メッセージに対して生成するチャット補完の選択肢の数。
- stream:設定した場合、ChatGPT のように部分的なメッセージデルタが送信されます。トークンは利用可能になり次第データのみのサーバー送信イベントとして送信され、ストリームは data: [DONE] メッセージで終了します。
- stop:API がさらなるトークン生成を停止する最大 4 つのシーケンス。
- max_tokens:チャット補完で生成するトークンの最大数。入力トークンと生成トークンの合計長はモデルのコンテキスト長によって制限されます。
- presence_penalty:-2.0 から 2.0 の数値。正の値は、これまでのテキストに出現するかどうかに基づいて新しいトークンにペナルティを与え、新しいトピックについて話す可能性を高めます。
- frequency_penalty:-2.0 から 2.0 の数値。正の値は、これまでのテキストにおける既存の頻度に基づいて新しいトークンにペナルティを与え、同じ行を逐語的に繰り返す可能性を低減します。
- logit_bias:補完に特定のトークンが出現する可能性を変更します。トークン(トークナイザーのトークン ID で指定)を -100 から 100 の関連バイアス値にマッピングする JSON オブジェクトを受け取ります。
- user:エンドユーザーを表す一意の識別子。OpenAI が不正使用を監視・検出するのに役立ちます。



以下は ChatGPT Turbo にメッセージを送信するシンプルな例です。

procedure SendMessageChatGPT(const aMessage: string);
var
  i: Integer;
  oMessages: TsgcOpenAIArray_Request_Completion_Messages;
  oMessage: TsgcOpenAIClass_Request_Completion_Message;
  oRequest: TsgcOpenAIClass_Request_ChatCompletion;
  oResponse: TsgcOpenAIClass_Response_ChatCompletion;
begin  
  oRequest := TsgcOpenAIClass_Request_ChatCompletion.Create;
  Try
    // ... model
    oRequest.Model := 'gpt-3.5-turbo';
    // ... create message
    oMessage := TsgcOpenAIClass_Request_Completion_Message.Create;
    oMessage.Content := aMessage;
    oMessages := oRequest.Messages;
    SetLength(oMessages, 1);
    oMessages[0] := oMessage;
    oRequest.Messages := oMessages;
    // ... send message
    oResponse := OpenAI.CreateChatCompletion(oRequest);
    // ... process response
    for i := 0 to Length(oResponse.Choices) - 1 do
      DoLog('[' + oResponse.Choices[i]._Message.Role + '] ' + oResponse.Choices[i]._Message.Content);    
  Finally
    oRequest.Free
  End;
End; 

以下は sgcWebSockets OpenAI Delphi ライブラリを使用した Windows 向けコンパイル済みデモです。