OpenAI Assistant クライアントは改善され、run スレッドを呼び出す際に ストリーミング応答 を実装するようになりました。この新機能の前は、run オブジェクトのステータスが完了になるまでポーリングする必要がありました。現在は、新しい Stream イベントを使用してストリーミングメッセージを処理できます。
ストリーミングイベント
アシスタントからの応答全体を待つ代わりに、Server-Sent Events を使用して応答をストリーミングできます。CreateRun 関数を使用する際に Stream = True パラメーターを渡すだけで、応答はストリーミングを使用します。
以下のイベントは、ストリーミング応答を処理するために使用されます。
- OnStreamRun: run オブジェクトに更新があった場合に呼び出されるイベントです。
- OnStreamMessage: message オブジェクトに更新があった場合に呼び出されるイベントです (作成、進行中、完了など)。
- OnStreamMessageDelta: Message の一部がストリーミングされている際に発生します。
- OnStreamDone: エラーが発生した際に発生します。これは内部サーバーエラーまたはタイムアウトが原因で発生する可能性があります。
- OnStreamError: ストリームが終了した際に発生します。
ステップ 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 デモのソースコードが含まれています。
