Streaming des OpenAI Assistants

· Fonctionnalités

Le client OpenAI Assistant a été amélioré pour implémenter les réponses en streaming lors de l'appel d'un run de thread. Avant cette nouvelle fonctionnalité, il fallait interroger le statut de l'objet run jusqu'à ce qu'il soit terminé. Désormais tu peux utiliser les nouveaux événements de streaming pour gérer les messages diffusés.


Événements de streaming

Au lieu d'attendre la réponse complète de l'assistant, tu peux diffuser la réponse via Server-Sent Events. Passe simplement le paramètre Stream = True à la fonction CreateRun et la réponse sera diffusée en streaming.

Les événements suivants sont utilisés pour gérer les réponses en streaming :

Étape 1 : créer un Assistant

Un Assistant représente une entité qui peut être configurée pour répondre aux messages d'un utilisateur via plusieurs paramètres comme le modèle, les instructions et les outils. 

// ... créer un nouvel assistant
oAssistant := TsgcAIOpenAIAssistant.Create(nil);
// ... définir ta clé api
oAssistant.OpenAIOptions.ApiKey := txtAPIKey.Text;
// ... options de l'assistant
oAssistant.AssistantOptions.Name := 'Math Tutor';
oAssistant.AssistantOptions.Instructions.Text := 'You are a personal math tutor. Write and run code to answer math questions.';
oAssistant.AssistantOptions.Model := 'gpt-4o';
// ... créer l'assistant
oAssistant.CreateAssistant(); 

Étape 2 : créer un Thread

Un Thread représente une conversation entre un utilisateur et un ou plusieurs Assistants. Tu peux créer un Thread lorsqu'un utilisateur (ou ton application IA) démarre une conversation avec ton Assistant. 

oThread := oAssistant.CreateThread; 

Étape 3 : ajouter un Message au Thread et exécuter avec le streaming

Voici un exemple de code pour gérer la réponse en streaming :

procedure SendMessage(const oAssistant: TsgcAIOpenAIAssistant; const oThread: TsgcAIClass_Thread; const aMessage: string);
var
  i: Integer;
  oMessage: TsgcOpenAIClass_Message;
  oMessages: TsgcOpenAIClass_Response_List_Messages;
  oRun: TsgcOpenAIClass_Run;
begin
  DoLog('[user]: ' + aMessage);
  oMessage := oAssistant.CreateMessageText(oThread.Id, aMessage);
  if Assigned(oMessage) then
    oRun := oAssistant.CreateRun(oThread.Id, True);
end; 

Étape 4 : gérer la réponse

Utilise l'événement OnStreamMessageDelta pour lire le message du flux server-sent. 

procedure OnStreamMessageDelta(Sender: TObject; const aMessageDelta: TsgcOpenAIClass_MessageDelta; const aRaw: string);
var
  i: Integer;
  vResponse: string;
  vType: string;
begin
  for i := Low(aMessageDelta.Content) to High(aMessageDelta.Content) do
  begin
    vType := aMessageDelta.Content[i]._Type;
    if vType = 'text' then
    begin
      vResponse := TsgcOpenAIClass_MessageDeltaContent_Text
        (aMessageDelta.Content[i]).Value;
    end;
  end;
end; 

Exemple OpenAI Delphi

Le fichier compressé suivant contient le code source de la démo Assistants conçue pour Windows avec la bibliothèque sgcWebSockets.