OpenAI 助手客户端已改进,在调用运行线程时支持流式响应。此前需要轮询运行对象状态直到完成。现在您可以使用新的流式事件来处理流式消息。
流式事件
无需等待助手的完整响应,您可以使用 Server-Sent Events 来流式传输响应。只需在使用 CreateRun 函数时传入参数 Stream = True,响应即会使用流式传输。
以下事件用于处理流式响应:
- OnStreamRun:当运行对象有更新时触发该事件。
- OnStreamMessage:当消息对象有更新时触发该事件:已创建、进行中、已完成……
- OnStreamMessageDelta:当消息的部分内容正在流式传输时触发。
- 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:创建线程
线程代表用户与一个或多个助手之间的对话。当用户(或您的 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 读取服务器推送的流式消息。
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 构建的助手示例源代码。
