Client ChatGPT per Delphi (2 / 5)

· Funzionalità

L'API OpenAI permette di costruire le tue chat IA usando ChatGPT Turbo. Con la libreria sgcWebSockets è molto facile interagire con l'API: data una conversazione, il modello restituisce una risposta di chat completion. 

Esempio ChatGPT in Delphi

OpenAI richiede di costruire una richiesta in cui passi i messaggi da inviare a ChatGPT Turbo, la temperatura (per ottenere un output più o meno casuale)... trovi qui sotto un elenco dei parametri disponibili.

- model: (obbligatorio) ID del modello da usare. Consulta la tabella di compatibilità degli endpoint dei modelli per i dettagli sui modelli che funzionano con l'API Chat.
- messages: (obbligatorio) I messaggi per cui generare i completamenti di chat, nel formato chat.
- temperature: Quale temperatura di campionamento usare, tra 0 e 2. Valori più alti come 0.8 rendono l'output più casuale, mentre valori più bassi come 0.2 lo rendono più focalizzato e deterministico.
- top_p: Un'alternativa al campionamento con temperatura, chiamata nucleus sampling, in cui il modello considera i risultati dei token con massa di probabilità top_p. Quindi 0.1 significa che vengono considerati solo i token che compongono il 10% superiore della massa di probabilità.
- n: Quante scelte di chat completion generare per ciascun messaggio di input.
- stream: Se impostato, verranno inviati delta parziali del messaggio, come in ChatGPT. I token verranno inviati come eventi server-sent solo dati man mano che diventano disponibili, con lo stream terminato da un messaggio data: [DONE]. Consulta l'OpenAI Cookbook per il codice di esempio.
- stop: Fino a 4 sequenze in cui l'API smetterà di generare ulteriori token.
- max_tokens: Il numero massimo di token da generare nel chat completion. La lunghezza totale dei token di input e dei token generati è limitata dalla lunghezza del contesto del modello.
- presence_penalty: Numero tra -2.0 e 2.0. Valori positivi penalizzano i nuovi token in base al fatto che appaiano nel testo finora, aumentando la probabilità che il modello parli di nuovi argomenti.
- frequency_penalty: Numero tra -2.0 e 2.0. Valori positivi penalizzano i nuovi token in base alla loro frequenza esistente nel testo finora, diminuendo la probabilità che il modello ripeta la stessa riga alla lettera.
- logit_bias: Modifica la probabilità che i token specificati appaiano nel completion. Accetta un oggetto json che mappa i token (specificati dal loro token ID nel tokenizer) a un valore di bias associato da -100 a 100. Matematicamente, il bias viene aggiunto ai logit generati dal modello prima del campionamento. L'effetto esatto varierà per modello, ma valori tra -1 e 1 dovrebbero diminuire o aumentare la probabilità di selezione; valori come -100 o 100 dovrebbero comportare un divieto o una selezione esclusiva del token in questione.
- user: Un identificatore univoco che rappresenta l'utente finale, utile a OpenAI per monitorare e rilevare abusi.



Trovi qui sotto un semplice esempio che invia un messaggio a 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; 

Trovi qui sotto la Demo compilata per Windows che utilizza la libreria OpenAI di sgcWebSockets per Delphi.