OpenAI Assistants File Search

· Funzionalità

Da sgcWebSockets 2024.10.0 puoi usare OpenAI Assistants per cercare nei tuoi file invece di usare il modello generico.

File Search arricchisce l'Assistant con conoscenza esterna al suo modello, come informazioni di prodotto proprietarie o documenti forniti dai tuoi utenti. OpenAI esegue automaticamente parsing e chunking dei tuoi documenti, crea e memorizza gli embeddings, e usa sia ricerca vettoriale sia per parole chiave per recuperare contenuti rilevanti e rispondere alle query degli utenti.

File supportati

File supportati

Per i tipi MIME text/, la codifica deve essere una tra utf-8, utf-16 o ascii.

Formato fileTipo MIME
.ctext/x-c
.cpptext/x-c++
.cstext/x-csharp
.csstext/css
.docapplication/msword
.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document
.gotext/x-golang
.htmltext/html
.javatext/x-java
.jstext/javascript
.jsonapplication/json
.mdtext/markdown
.pdfapplication/pdf
.phptext/x-php
.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation
.pytext/x-python
.pytext/x-script.python
.rbtext/x-ruby
.shapplication/x-sh
.textext/x-tex
.tsapplication/typescript
.txttext/plain

Passo 1: creare un nuovo Assistant con File Search abilitato

Crea un nuovo assistant con file_search abilitato nel parametro tools dell'Assistant. 

Una volta abilitato il tool file_search, il modello decide quando recuperare contenuti in base ai messaggi utente.

Assistant := TsgcAIOpenAIAssistant.Create(nil);
Assistant.OpenAIOptions.ApiKey := 'sk-askdjfalskdjfl23kjkjasdefasdfj';
Assistant.AssistantOptions.Name := 'sgcWebSockets HelpDesk';
Assistant.AssistantOptions.Instructions.Text := 'You are a sgcWebSockets HelpDesk Agent. ' +
'Answer questions briefly, in a sentence or less. When asked a question,use the manual to answer the question.'
Assistant.AssistantOptions.Model := 'gpt-4o-mini';
Assistant.AssistantOptions.Tools.FileSearch.Enabled := True;
Assistant.AssistantOptions.Tools.CodeInterpreter.Enabled := False;

Passo 2: caricare file e aggiungerli a un Vector Store

Per accedere ai tuoi file, il tool file_search usa l'oggetto Vector Store. Carica i tuoi file e crea un Vector Store per contenerli. 

procedure UploadFile();
var
  oDialog: TOpenDialog;
begin
  oDialog := TOpenDialog.Create(nil);
  Try
    if oDialog.Execute then
    begin
      Screen.Cursor := crHourGlass;
      Try
        Assistant.UploadVectorStoreFile('sgcVectorStore', oDialog.FileName);
      Finally
        Screen.Cursor := crDefault;
      End;
    end;
  Finally
    oDialog.Free;
  End;
end; 

Passo 3: creare un run e verificare l'output

Ora crea un Run e osserva che il modello usa il tool File Search per fornire una risposta alla domanda dell'utente. 

procedure SendMessage()
var
  i: Integer;
  oMessage: TsgcOpenAIClass_Message;
  oMessages: TsgcOpenAIClass_Response_List_Messages;
  oRun: TsgcOpenAIClass_Run;
begin
  DoLog('[user]: ' + memoMessage.Lines.Text);
  Screen.Cursor := crHourGlass;
  Try
    oMessage := Assistant.CreateMessageText('thread_id', 'Create a WebSocket Client that connects to eSeGeCe WebSocket Server');
    if Assigned(oMessage) then
    begin
      oRun := Assistant.CreateRunAndWait('thread_id');
      if Assigned(oRun) then
      begin
        oMessages := Assistant.GetMessages('thread_id', oRun.Id);
        if Assigned(oMessages) and (Length(oMessages.Messages) > 0) then
        begin
          memoMessage.Lines.Text := '';
          for i := 0 to Length(oMessages.Messages) - 1 do
            DoLog('[assistant]: ' + DoFormatResponse(oMessages.Messages[i]
              .ContentText + #13#10));
        end;
      end;
    end;
  Finally
    Screen.Cursor := crDefault;
  End;
end;