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:
- OnStreamRun: het event wordt aangeroepen wanneer er een update is in het run-object.
- OnStreamMessage: het event wordt aangeroepen wanneer er een update is in het message-object: created, in-progress, completed...
- OnStreamMessageDelta: wordt geactiveerd wanneer delen van een Message worden gestreamd.
- OnStreamDone: wordt geactiveerd wanneer een stream eindigt.
- OnStreamError: wordt geactiveerd wanneer er een fout optreedt. Dit kan gebeuren door een interne serverfout of een timeout.
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.
