OpenAI Assistants streaming

· Functies

De OpenAI Assistant-client is verbeterd met streaming-antwoorden bij het aanroepen van een run thread. Voor deze nieuwe functie moest je de runobject-status pollen totdat deze voltooid was. Nu kun je de nieuwe Stream-events gebruiken om de streaming-berichten af te handelen.


Streaming-events

In plaats van te wachten op het volledige antwoord van de assistant kun je het antwoord streamen met Server-Sent Events. Geef gewoon de parameter Stream = True mee bij het gebruik van de functie CreateRun en het antwoord wordt gestreamd.

De volgende events worden gebruikt om de streaming-antwoorden af te handelen:

Stap 1: Een Assistant aanmaken

Een Assistant vertegenwoordigt een entiteit die geconfigureerd kan worden om te reageren op berichten van een gebruiker met behulp van diverse parameters zoals model, instructies en 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(); 

Stap 2: Een Thread aanmaken

Een Thread vertegenwoordigt een gesprek tussen een gebruiker en een of meer Assistants. Je kunt een Thread aanmaken zodra een gebruiker (of je AI-toepassing) een gesprek start met je Assistant. 

oThread := oAssistant.CreateThread; 

Stap 3: Een Message toevoegen aan de Thread en uitvoeren met streaming

Voer hier je tekst in ...

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; 

Stap 4: Het antwoord afhandelen

Gebruik het event OnStreamMessageDelta om het server-sent streambericht te lezen. 

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; 

OpenAI Delphi-voorbeeld

Het volgende gecomprimeerde bestand bevat de broncode van de Assistants-demo gebouwd voor Windows met de sgcWebSockets-bibliotheek.