Klient asystenta OpenAI został ulepszony o implementację odpowiedzi strumieniowych przy wywołaniu wątku uruchomienia. Przed tą nową funkcją wymagało to odpytywania statusu obiektu uruchomienia, aż się zakończy. Teraz możesz użyć nowych zdarzeń Stream do obsługi strumieniowanych wiadomości.
Zdarzenia strumieniowania
Zamiast czekać na pełną odpowiedź od asystenta, możesz strumieniować odpowiedź za pomocą Server-Sent Events. Po prostu przekaż parametr Stream = True podczas używania funkcji CreateRun , a odpowiedź będzie strumieniowana.
Do obsługi odpowiedzi strumieniowych używane są następujące zdarzenia
- OnStreamRun: zdarzenie wywoływane przy aktualizacji obiektu uruchomienia.
- OnStreamMessage: zdarzenie wywoływane przy aktualizacji obiektu wiadomości: utworzona, w trakcie, ukończona...
- OnStreamMessageDelta: występuje, gdy części wiadomości są strumieniowane.
- OnStreamDone: występuje, gdy wystąpi błąd. Może się tak zdarzyć z powodu wewnętrznego błędu serwera lub timeoutu.
- OnStreamError: występuje, gdy strumień się kończy.
Krok 1: Utwórz asystenta
Asystent reprezentuje encję, którą można skonfigurować, aby odpowiadała na wiadomości użytkownika, używając kilku parametrów takich jak model, instrukcje i narzędzia.
// ... 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();
Krok 2: Utwórz wątek
Wątek reprezentuje rozmowę między użytkownikiem a jednym lub wieloma asystentami. Możesz utworzyć wątek, gdy użytkownik (lub twoja aplikacja SI) rozpoczyna rozmowę z asystentem.
oThread := oAssistant.CreateThread;
Krok 3: Dodaj wiadomość do wątku i uruchom ze strumieniowaniem
Wprowadź swój tekst tutaj...
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;
Krok 4: Obsłuż odpowiedź
Użyj zdarzenia OnStreamMessageDelta, aby odczytać strumieniowaną wiadomość od serwera.
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;
Przykład OpenAI dla Delphi
Poniższy spakowany plik zawiera kod źródłowy demo Asystentów zbudowanego dla Windows przy użyciu biblioteki sgcWebSockets.
