OpenAI Assistants File Search

· Características

Desde sgcWebSockets 2024.10.0 puedes usar los OpenAI Assistants para buscar en tus propios archivos en lugar de usar el modelo genérico.

File Search amplía el Assistant con conocimiento externo a su modelo, como información propia de producto o documentos proporcionados por tus usuarios. OpenAI parsea y trocea automáticamente tus documentos, crea y almacena los embeddings y usa tanto búsqueda vectorial como por palabra clave para recuperar el contenido relevante con el que responder a las consultas del usuario.

Archivos soportados

Archivos soportados

Para los tipos MIME text/, la codificación debe ser utf-8, utf-16 o ascii.

Formato de archivoTipo 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

Paso 1: crear un nuevo Assistant con File Search habilitado

Crea un nuevo assistant con file_search habilitado en el parámetro tools del Assistant. 

Una vez habilitada la herramienta file_search, el modelo decide cuándo recuperar contenido en función de los mensajes del usuario.

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;

Paso 2: subir archivos y añadirlos a un Vector Store

Para acceder a tus archivos, la herramienta file_search usa el objeto Vector Store. Sube tus archivos y crea un Vector Store que los contenga. 

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; 

Paso 3: crear un run y comprobar la salida

Ahora, crea un Run y observa que el modelo usa la herramienta File Search para responder a la pregunta del usuario. 

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;