OpenAI Assistants para Delphi

· Componentes

A Assistants API permite criar assistentes de IA dentro dos seus próprios aplicativos. Um Assistant possui instruções e pode usar modelos, ferramentas e arquivos para responder às perguntas dos usuários. Atualmente, a Assistants API suporta três tipos de ferramentas: Code Interpreter, File Search e Function calling.


Visão geral

Uma integração típica da Assistants API tem o seguinte fluxo:

Passo 1: Criar um Assistant

Um Assistant 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 vários Assistants. Você pode criar uma Thread quando um usuário (ou seu aplicativo de IA) iniciar uma conversa com seu Assistant. 

oThread := oAssistant.CreateThread; 

Passo 3: Adicionar uma Message à Thread e Executar

O conteúdo das mensagens criadas pelos seus usuários ou aplicativos é adicionado como objetos Message à Thread. As Messages podem conter texto e arquivos. Não há limite para a quantidade de Messages que você pode adicionar às Threads — o contexto que não couber na janela de contexto do modelo é truncado de forma inteligente.

Depois que todas as Messages do usuário forem adicionadas à Thread, você pode executar a Thread com qualquer Assistant. Criar um Run usa o modelo e as ferramentas associadas ao Assistant para gerar uma resposta. Essas respostas são adicionadas à Thread como Messages do assistant.

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
  begin
    oRun := oAssistant.CreateRunAndWait(oThread.Id);
    if Assigned(oRun) then
    begin
      oMessages := oAssistant.GetMessages(oThread.Id, oRun.Id);
      if Assigned(oMessages) and (Length(oMessages.Messages) > 0) then
      begin
        for i := 0 to Length(oMessages.Messages) - 1 do
          DoLog('[assistant]: ' + DoFormatResponse(oMessages.Messages[i].ContentText + #13#10));
      end;
    end;
  end;
end; 

Demo Delphi

Veja abaixo uma demo compilada dos OpenAI Assistants usando sgcWebSockets Enterprise para Windows.