OpenAI Assistants para Delphi

· Componentes

La Assistants API te permite construir asistentes de IA dentro de tus propias aplicaciones. Un Assistant tiene instrucciones y puede aprovechar modelos, herramientas y archivos para responder a las consultas de los usuarios. La Assistants API admite actualmente tres tipos de herramientas: Code Interpreter, File Search y Function calling.


Visión general

Una integración típica de la Assistants API sigue este flujo:

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

El contenido de los mensajes que crean tus usuarios o aplicaciones se añade como objetos Message al Thread. Los Messages pueden contener tanto texto como archivos. No hay límite en el número de Messages que puedes añadir a un Thread — truncamos inteligentemente cualquier contexto que no encaje en la ventana de contexto del modelo.

Una vez añadidos todos los Messages del usuario al Thread, puedes ejecutar (Run) el Thread con cualquier Assistant. Crear un Run usa el modelo y las herramientas asociadas al Assistant para generar una respuesta. Estas respuestas se añaden al Thread como Messages del 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

A continuación encontrarás una demo compilada de OpenAI Assistants usando sgcWebSockets Enterprise para Windows.