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 :
- OnStreamRun : appelé lorsqu'il y a une mise à jour de l'objet run.
- OnStreamMessage : appelé lorsqu'il y a une mise à jour de l'objet message : created, in-progress, completed...
- OnStreamMessageDelta : se déclenche lorsque des parties d'un Message sont diffusées.
- OnStreamDone : se déclenche en cas d'erreur. Cela peut arriver à cause d'une erreur interne du serveur ou d'un timeout.
- OnStreamError : se déclenche lorsqu'un flux se termine.
É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.
