Der OpenAI-Assistant-Client wurde verbessert und unterstützt jetzt gestreamte Antworten beim Aufruf eines Run-Threads. Vor dieser neuen Funktion musste der Status des Run-Objekts gepollt werden, bis er abgeschlossen war. Jetzt kannst du die neuen Stream-Ereignisse nutzen, um die gestreamten Nachrichten zu verarbeiten.
Streaming-Ereignisse
Statt auf die vollständige Antwort des Assistants zu warten, kannst du die Antwort per Server-Sent Events streamen. Übergib einfach den Parameter Stream = True an die Funktion CreateRun und die Antwort wird gestreamt.
Die folgenden Ereignisse werden zur Verarbeitung der gestreamten Antworten verwendet
- OnStreamRun: Das Ereignis wird aufgerufen, sobald es ein Update am Run-Objekt gibt.
- OnStreamMessage: Das Ereignis wird aufgerufen, sobald es ein Update am Message-Objekt gibt: created, in-progess, completed ...
- OnStreamMessageDelta: Wird ausgelöst, wenn Teile einer Nachricht gestreamt werden.
- OnStreamDone: Wird ausgelöst, wenn ein Fehler auftritt. Das kann durch einen internen Serverfehler oder ein Timeout passieren.
- OnStreamError: Wird ausgelöst, wenn ein Stream endet.
Schritt 1: Einen Assistant erstellen
Ein Assistant ist eine Entität, die so konfiguriert werden kann, dass sie mit verschiedenen Parametern wie Modell, Anweisungen und Werkzeugen auf die Nachrichten eines Nutzers antwortet.
// ... 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();
Schritt 2: Einen Thread erstellen
Ein Thread repräsentiert ein Gespräch zwischen einem Nutzer und einem oder mehreren Assistants. Du kannst einen Thread erstellen, sobald ein Nutzer (oder deine KI-Anwendung) ein Gespräch mit deinem Assistant beginnt.
oThread := oAssistant.CreateThread;
Schritt 3: Nachricht zum Thread hinzufügen und mit Streaming ausführen
Gib hier deinen Text ein ...
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;
Schritt 4: Antwort verarbeiten
Verwende das Ereignis OnStreamMessageDelta, um die per Server-Sent-Stream übermittelte Nachricht zu lesen.
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-Beispiel
Die folgende komprimierte Datei enthält den Quellcode der Assistants-Demo, gebaut für Windows mit der sgcWebSockets-Bibliothek.
