Client Delphi ChatGPT (2 / 5)

· Fonctionnalités

L'API OpenAI permet de construire tes propres chats IA avec ChatGPT Turbo. Avec la bibliothèque sgcWebSockets, c'est très facile d'interagir avec l'API : pour une conversation donnée, le modèle retourne une réponse de chat completion. 

Exemple ChatGPT Delphi

OpenAI nécessite de construire une requête où tu passes les messages à envoyer à ChatGPT Turbo, la température (pour obtenir une sortie plus ou moins aléatoire... voici la liste des paramètres disponibles.

- model : (requis) ID du modèle à utiliser. Consulte la table de compatibilité des endpoints pour savoir quels modèles fonctionnent avec l'API Chat.
- messages : (requis) les messages pour lesquels générer les chat completions, au format chat.
- temperature : température d'échantillonnage à utiliser, entre 0 et 2. Des valeurs plus élevées comme 0,8 rendront la sortie plus aléatoire, tandis que des valeurs plus basses comme 0,2 la rendront plus focalisée et déterministe.
- top_p : une alternative à l'échantillonnage par température, appelée nucleus sampling, où le modèle considère les résultats des tokens avec une masse de probabilité top_p. Donc 0,1 signifie que seuls les tokens représentant les 10 % de masse de probabilité sont considérés.
- n : nombre de choix de chat completion à générer pour chaque message d'entrée.
- stream : si défini, des deltas de message partiels seront envoyés, comme dans ChatGPT. Les tokens seront envoyés en tant qu'événements server-sent uniquement-données au fur et à mesure qu'ils deviennent disponibles, avec le stream terminé par un message data: [DONE]. Voir l'OpenAI Cookbook pour un exemple de code.
- stop : jusqu'à 4 séquences où l'API arrêtera de générer d'autres tokens.
- max_tokens : nombre maximum de tokens à générer dans la chat completion. La longueur totale des tokens d'entrée et générés est limitée par la longueur de contexte du modèle.
- presence_penalty : nombre entre -2,0 et 2,0. Des valeurs positives pénalisent les nouveaux tokens selon leur apparition dans le texte jusqu'à présent, augmentant la probabilité que le modèle parle de nouveaux sujets.
- frequency_penalty : nombre entre -2,0 et 2,0. Des valeurs positives pénalisent les nouveaux tokens selon leur fréquence existante dans le texte jusqu'à présent, diminuant la probabilité que le modèle répète la même ligne mot pour mot.
- logit_bias : modifie la probabilité que des tokens spécifiés apparaissent dans la completion. Accepte un objet JSON qui mappe les tokens (spécifiés par leur token ID dans le tokenizer) à une valeur de biais associée de -100 à 100. Mathématiquement, le biais est ajouté aux logits générés par le modèle avant l'échantillonnage. L'effet exact variera selon le modèle, mais des valeurs entre -1 et 1 devraient diminuer ou augmenter la probabilité de sélection ; des valeurs comme -100 ou 100 devraient entraîner un bannissement ou une sélection exclusive du token concerné.
- user : un identifiant unique représentant ton utilisateur final, qui peut aider OpenAI à surveiller et détecter les abus.



Tu trouveras ci-dessous un exemple simple d'envoi d'un message à 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
    // ... modèle
    oRequest.Model := 'gpt-3.5-turbo';
    // ... créer le message
    oMessage := TsgcOpenAIClass_Request_Completion_Message.Create;
    oMessage.Content := aMessage;
    oMessages := oRequest.Messages;
    SetLength(oMessages, 1);
    oMessages[0] := oMessage;
    oRequest.Messages := oMessages;
    // ... envoyer le message
    oResponse := OpenAI.CreateChatCompletion(oRequest);
    // ... traiter la réponse
    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; 

Tu trouveras ci-dessous la démo compilée pour Windows utilisant la bibliothèque Delphi OpenAI sgcWebSockets.