OpenAI Assistants per Delphi

· Componenti

L'API Assistants ti permette di costruire assistenti AI all'interno delle tue applicazioni. Un Assistant ha istruzioni e può sfruttare modelli, tool e file per rispondere alle query degli utenti. L'API Assistants supporta attualmente tre tipi di tool: Code Interpreter, File Search e Function calling.


Panoramica

Una tipica integrazione dell'API Assistants segue questo flusso:

Passo 1: creare un Assistant

Un Assistant rappresenta un'entità che può essere configurata per rispondere ai messaggi di un utente usando diversi parametri come model, instructions e tools. 

// ... 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: creare un Thread

Un Thread rappresenta una conversazione tra un utente e uno o più Assistant. Puoi creare un Thread quando un utente (o la tua applicazione AI) avvia una conversazione con il tuo Assistant. 

oThread := oAssistant.CreateThread; 

Passo 3: aggiungere un Message al Thread ed eseguirlo

I contenuti dei messaggi che i tuoi utenti o applicazioni creano vengono aggiunti al Thread come oggetti Message. I Message possono contenere sia testo sia file. Non c'è limite al numero di Message che puoi aggiungere ai Thread: tronchiamo in modo intelligente qualsiasi contesto che non entra nella context window del modello.

Una volta aggiunti tutti i Message dell'utente al Thread, puoi eseguire il Thread con un qualsiasi Assistant. La creazione di un Run usa il modello e i tool associati all'Assistant per generare una risposta. Queste risposte vengono aggiunte al Thread come Message dell'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

Qui sotto trovi una demo compilata di OpenAI Assistants che usa sgcWebSockets Enterprise per Windows.