OpenAI Assistants Streaming

· Funzionalità

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

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.