El OpenAI Assistant Client se ha mejorado para implementar las respuestas en streaming al llamar a un run thread. Antes de esta nueva funcionalidad, era necesario hacer polling del estado del objeto run hasta que se completara. Ahora puedes usar los nuevos eventos Stream para gestionar los mensajes en streaming.
Eventos de streaming
En lugar de esperar la respuesta completa del assistant, puedes recibir la respuesta en streaming usando Server-Sent Events. Solo tienes que pasar el parámetro Stream = True al usar la función CreateRun y la respuesta se devolverá en streaming.
Los siguientes eventos se usan para gestionar las respuestas en streaming
- OnStreamRun: el evento se llama cuando hay una actualización en el objeto run.
- OnStreamMessage: el evento se llama cuando hay una actualización en el objeto message: creado, en progreso, completado...
- OnStreamMessageDelta: ocurre cuando se están transmitiendo partes de un Message.
- OnStreamDone: ocurre cuando se produce un error. Esto puede deberse a un error interno del servidor o a un timeout.
- OnStreamError: ocurre cuando termina un stream.
Paso 1: crear un Assistant
Un Assistant representa una entidad que se puede configurar para responder a los mensajes de un usuario usando varios parámetros como modelo, instrucciones y herramientas.
// ... 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();
Paso 2: crear un Thread
Un Thread representa una conversación entre un usuario y uno o varios Assistants. Puedes crear un Thread cuando un usuario (o tu aplicación de IA) inicia una conversación con tu Assistant.
oThread := oAssistant.CreateThread;
Paso 3: añadir un Message al Thread y ejecutarlo usando streaming
Introduce aquí tu texto ...
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;
Paso 4: gestionar la respuesta
Usa el evento OnStreamMessageDelta para leer el mensaje en streaming enviado por el servidor.
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;
Ejemplo OpenAI en Delphi
El siguiente archivo comprimido contiene el código fuente de la demo de Assistants compilada para Windows usando la librería sgcWebSockets.
