Recherche dans les fichiers avec OpenAI Assistants

· Fonctionnalités

À partir de sgcWebSockets 2024.10.0, tu peux utiliser les OpenAI Assistants pour effectuer des recherches dans tes propres fichiers au lieu d'utiliser le modèle générique.

File Search enrichit l'Assistant avec des connaissances issues de l'extérieur de son modèle, comme des informations produit propriétaires ou des documents fournis par tes utilisateurs. OpenAI analyse et découpe automatiquement tes documents, crée et stocke les embeddings, et utilise à la fois la recherche vectorielle et la recherche par mots-clés pour récupérer le contenu pertinent et répondre aux requêtes des utilisateurs.

Fichiers pris en charge

Fichiers pris en charge

Pour les types MIME text/, l'encodage doit être l'un de utf-8, utf-16 ou ascii.

Format de fichierType 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

Étape 1 : créer un nouvel Assistant avec File Search activé

Crée un nouvel assistant avec file_search activé dans le paramètre tools de l'Assistant. 

Une fois l'outil file_search activé, le modèle décide quand récupérer le contenu en fonction des messages utilisateur.

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;

Étape 2 : télécharger des fichiers et les ajouter à un Vector Store

Pour accéder à tes fichiers, l'outil file_search utilise l'objet Vector Store. Télécharge tes fichiers et crée un Vector Store pour les contenir. 

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; 

Étape 3 : créer un run et vérifier la sortie

Crée maintenant un Run et observe que le modèle utilise l'outil File Search pour fournir une réponse à la question de l'utilisateur. 

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;