OpenAI Assistants Streaming

· Funkcje

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

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.