Il client OpenAI Assistant è stato migliorato per implementare le risposte in streaming quando si chiama un run thread. Prima di questa nuova funzionalità era necessario fare polling dello stato dell'oggetto run finché non era completato. Ora puoi usare i nuovi eventi Stream per gestire i messaggi in streaming.
Eventi di streaming
Invece di attendere la risposta completa dall'assistant, puoi inviare la risposta in streaming usando Server-Sent Events. Basta passare il parametro Stream = True quando usi la funzione CreateRun e la risposta userà lo streaming.
I seguenti eventi sono usati per gestire le risposte in streaming
- OnStreamRun: l'evento viene chiamato quando c'è un aggiornamento nell'oggetto run.
- OnStreamMessage: l'evento viene chiamato quando c'è un aggiornamento nell'oggetto message: created, in-progress, completed...
- OnStreamMessageDelta: si verifica quando parti di un Message vengono inviate in streaming.
- OnStreamDone: si verifica quando lo stream termina.
- OnStreamError: si verifica quando c'è un errore. Può accadere per un errore interno del server o per un timeout.
Passo 1: creare un Assistant
Un Assistant rappresenta un'entità che può essere configurata per rispondere ai messaggi di un utente usando diversi parametri come model, instructions e tools.
// ... create a new assistant oAssistant := TsgcAIOpenAIAssistant.Create(nil); // ... set your api key oAssistant.OpenAIOptions.ApiKey := txtAPIKey.Text; // ... assistant options 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'; // ... create the assistant oAssistant.CreateAssistant();
Passo 2: creare un Thread
Un Thread rappresenta una conversazione tra un utente e uno o più Assistant. Puoi creare un Thread quando un utente (o la tua applicazione AI) avvia una conversazione con il tuo Assistant.
oThread := oAssistant.CreateThread;
Passo 3: aggiungere un Message al Thread ed eseguirlo in streaming
Inserisci qui il tuo testo...
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;
Passo 4: gestire la risposta
Usa l'evento OnStreamMessageDelta per leggere il messaggio di stream inviato dal server.
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;
Sample Delphi OpenAI
Il file compresso seguente contiene il codice sorgente della demo Assistants costruita per Windows usando la libreria sgcWebSockets.
