OpenAI Assistants のストリーミング

· 機能

OpenAI Assistant クライアントは改善され、run スレッドを呼び出す際に ストリーミング応答 を実装するようになりました。この新機能の前は、run オブジェクトのステータスが完了になるまでポーリングする必要がありました。現在は、新しい Stream イベントを使用してストリーミングメッセージを処理できます。


ストリーミングイベント

アシスタントからの応答全体を待つ代わりに、Server-Sent Events を使用して応答をストリーミングできます。CreateRun 関数を使用する際に Stream = True パラメーターを渡すだけで、応答はストリーミングを使用します。

以下のイベントは、ストリーミング応答を処理するために使用されます。

ステップ 1: アシスタントの作成

アシスタントは、モデル、指示、ツールなどの複数のパラメーターを使用して、ユーザーのメッセージに応答するように構成可能なエンティティを表します。

// ... 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(); 

ステップ 2: スレッドの作成

スレッドは、ユーザーと 1 つまたは複数のアシスタントとの会話を表します。ユーザー (または AI アプリケーション) がアシスタントとの会話を開始するときに、スレッドを作成できます。

oThread := oAssistant.CreateThread; 

ステップ 3: メッセージをスレッドに追加してストリーミングで実行

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; 

ステップ 4: 応答の処理

イベント OnStreamMessageDelta を使用して、Server-Sent Events のストリームメッセージを読み取ります。

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 サンプル

以下の圧縮ファイルには、sgcWebSockets ライブラリを使用して Windows 向けに構築された Assistants デモのソースコードが含まれています。