O cliente OpenAI Assistant foi aprimorado para implementar respostas em streaming ao chamar uma thread de execução. Antes desse novo recurso, era necessário verificar repetidamente o status do objeto run até sua conclusão. Agora você pode usar os novos eventos Stream para tratar as mensagens em streaming.
Eventos de Streaming
Em vez de aguardar a resposta completa do assistente, você pode receber a resposta em streaming usando Server-Sent Events. Basta passar o parâmetro Stream = True ao usar a função CreateRun e a resposta será entregue em streaming.
Os seguintes eventos são usados para tratar as respostas em streaming:
- OnStreamRun: o evento é chamado quando há uma atualização no objeto run.
- OnStreamMessage: o evento é chamado quando há uma atualização no objeto message: criado, em andamento, concluído...
- OnStreamMessageDelta: ocorre quando partes de uma mensagem estão sendo transmitidas em streaming.
- OnStreamDone: ocorre quando ocorre um erro. Isso pode acontecer devido a um erro interno do servidor ou a um timeout.
- OnStreamError: ocorre quando um stream é encerrado.
Passo 1: Criar um Assistente
Um assistente representa uma entidade que pode ser configurada para responder às mensagens do usuário usando vários parâmetros como modelo, instruções e ferramentas.
// ... 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();
Passo 2: Criar uma Thread
Uma Thread representa uma conversa entre um usuário e um ou mais Assistentes. Você pode criar uma Thread quando um usuário (ou sua aplicação de IA) inicia uma conversa com seu Assistente.
oThread := oAssistant.CreateThread;
Passo 3: Adicionar uma Mensagem à Thread e Executar com Streaming
Adicione aqui o seu 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;
Passo 4: Tratar a Resposta
Use o evento OnStreamMessageDelta para ler a mensagem de stream enviada pelo 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;
Exemplo Delphi OpenAI
O arquivo comprimido a seguir contém o código-fonte do demo de Assistentes construído para Windows usando a biblioteca sgcWebSockets.
