OpenAI Assistants: Busca em arquivos

· Recursos

A partir do sgcWebSockets 2024.10.0, você pode usar os OpenAI Assistants para buscar em seus próprios arquivos em vez de usar o modelo genérico.

A Busca em arquivos amplia o Assistant com conhecimento externo ao modelo, como informações proprietárias do produto ou documentos fornecidos pelos seus usuários. O OpenAI analisa e fragmenta seus documentos automaticamente, cria e armazena os embeddings e usa tanto busca vetorial quanto por palavras-chave para recuperar conteúdo relevante e responder às consultas dos usuários.

Arquivos suportados

Arquivos suportados

Para tipos MIME text/, a codificação deve ser utf-8, utf-16 ou ascii.

Formato de arquivoTipo 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: Criar um novo Assistant com busca em arquivos ativada

Crie um novo assistant com file_search habilitado no parâmetro tools do Assistant.

Com a ferramenta file_search ativada, o modelo decide quando recuperar conteúdo com base nas mensagens do usuário.

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: Carregar arquivos e adicioná-los a um Vector Store

Para acessar seus arquivos, a ferramenta file_search usa o objeto Vector Store. Faça upload dos seus arquivos e crie um Vector Store para contê-los.

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: Criar uma execução e verificar a saída

Agora, crie uma execução (Run) e observe que o modelo usa a ferramenta File Search para fornecer uma resposta à pergunta do usuário.

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;