Klient ChatGPT dla Delphi (2 / 5)

· Funkcje

OpenAI API umożliwia budowanie własnych czatów AI z użyciem ChatGPT Turbo. Korzystając z biblioteki sgcWebSockets, bardzo łatwo jest interagować z API — dla danej rozmowy czatowej model zwróci odpowiedź w formie uzupełnienia czatu.

ChatGPT Delphi Example

OpenAI wymaga zbudowania żądania, w którym przekazujesz wiadomości do wysłania do ChatGPT Turbo, temperaturę (określającą losowość wyników) itd. Poniżej znajdziesz listę dostępnych parametrów.

- model: (wymagany) identyfikator modelu do użycia. Sprawdź tabelę zgodności punktów końcowych modeli, aby dowiedzieć się, które modele działają z Chat API.
- messages: (wymagane) wiadomości, dla których mają być generowane uzupełnienia czatu, w formacie czatu.
- temperature: temperatura próbkowania, od 0 do 2. Wyższe wartości (np. 0,8) czynią wyniki bardziej losowymi, niższe (np. 0,2) — bardziej skupionymi i deterministycznymi.
- top_p: alternatywa dla temperature — tzw. próbkowanie jądrowe, w którym model bierze pod uwagę tokeny o skumulowanym prawdopodobieństwie top_p. Wartość 0,1 oznacza, że rozważane są tylko tokeny z górnych 10% masy prawdopodobieństwa.
- n: liczba wariantów uzupełnienia czatu generowanych dla każdej wiadomości wejściowej.
- stream: jeśli ustawione, częściowe delty wiadomości będą wysyłane na bieżąco, podobnie jak w ChatGPT. Tokeny są przesyłane jako zdarzenia SSE (data-only), a strumień kończy się komunikatem data: [DONE]. Zobacz OpenAI Cookbook, aby zobaczyć przykładowy kod.
- stop: do 4 sekwencji, przy których API przestaje generować kolejne tokeny.
- max_tokens: maksymalna liczba tokenów do wygenerowania w uzupełnieniu czatu. Łączna długość tokenów wejściowych i wygenerowanych jest ograniczona długością kontekstu modelu.
- presence_penalty: liczba od -2,0 do 2,0. Wartości dodatnie penalizują nowe tokeny na podstawie tego, czy już pojawiły się w tekście, zwiększając skłonność modelu do poruszania nowych tematów.
- frequency_penalty: liczba od -2,0 do 2,0. Wartości dodatnie penalizują nowe tokeny na podstawie ich częstości w dotychczasowym tekście, zmniejszając skłonność modelu do dosłownego powtarzania tych samych zdań.
- logit_bias: modyfikuje prawdopodobieństwo pojawienia się wskazanych tokenów w uzupełnieniu. Przyjmuje obiekt JSON mapujący tokeny (podane przez ich ID w tokenizerze) na wartość obciążenia od -100 do 100. Matematycznie obciążenie jest dodawane do logitów modelu przed próbkowaniem. Dokładny efekt zależy od modelu; wartości od -1 do 1 zwiększają lub zmniejszają szansę wyboru, wartości -100 lub 100 odpowiednio blokują lub wymuszają wybór danego tokenu.
- user: unikalny identyfikator reprezentujący użytkownika końcowego, który pomaga OpenAI monitorować i wykrywać nadużycia.



Poniżej znajdziesz prosty przykład wysyłania wiadomości do 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; 

Poniżej znajdziesz skompilowane demo dla Windows z użyciem biblioteki sgcWebSockets OpenAI Delphi.