OpenAI Assistants voor Delphi

· Componenten

Met de Assistants-API bouw je AI-assistenten in je eigen toepassingen. Een Assistant heeft instructies en kan modellen, tools en bestanden inzetten om gebruikersvragen te beantwoorden. De Assistants-API ondersteunt momenteel drie soorten tools: Code Interpreter, File Search en Function calling.


Overzicht

Een typische integratie van de Assistants-API heeft het volgende verloop:

Stap 1: Een Assistant aanmaken

Een Assistant vertegenwoordigt een entiteit die geconfigureerd kan worden om te reageren op berichten van een gebruiker met behulp van diverse parameters zoals model, instructies en 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(); 

Stap 2: Een Thread aanmaken

Een Thread vertegenwoordigt een gesprek tussen een gebruiker en een of meer Assistants. Je kunt een Thread aanmaken zodra een gebruiker (of je AI-toepassing) een gesprek start met je Assistant. 

oThread := oAssistant.CreateThread; 

Stap 3: Een Message toevoegen aan de Thread en uitvoeren

De inhoud van de berichten die je gebruikers of toepassingen aanmaken, wordt als Message-object toegevoegd aan de Thread. Messages kunnen zowel tekst als bestanden bevatten. Er is geen limiet aan het aantal Messages dat je aan Threads kunt toevoegen — we kappen elke context die niet in het contextvenster van het model past op slimme wijze af.

Zodra alle gebruikers-Messages aan de Thread zijn toegevoegd, kun je de Thread uitvoeren met elke Assistant. Het aanmaken van een Run gebruikt het model en de tools die aan de Assistant zijn gekoppeld om een antwoord te genereren. Deze antwoorden worden als assistant-Messages aan de Thread toegevoegd.

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; 

Delphi-demo

Hieronder vind je een gecompileerde demo van OpenAI Assistants met sgcWebSockets Enterprise voor Windows.