OpenAI Assistants File Search

· Características
OpenAI Assistants File Search

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; 

Relacionado