OpenAI Assistants File Search

· Funkcje

Od sgcWebSockets 2024.10.0 możesz używać asystentów OpenAI do wyszukiwania we własnych plikach zamiast korzystania z modelu ogólnego.

File Search wzbogaca asystenta o wiedzę spoza jego modelu, taką jak zastrzeżone informacje o produkcie lub dokumenty dostarczane przez użytkowników. OpenAI automatycznie parsuje i dzieli twoje dokumenty na fragmenty, tworzy i przechowuje embeddingi oraz używa zarówno wyszukiwania wektorowego, jak i słów kluczowych, aby pobrać odpowiednią treść do odpowiedzi na zapytania użytkownika.

Obsługiwane pliki

Obsługiwane pliki

Dla typów MIME text/ kodowanie musi być jednym z utf-8, utf-16 lub ascii.

Format plikuTyp 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

Utwórz nowego asystenta z włączoną opcją file_search w parametrze tools asystenta. 

Gdy narzędzie file_search jest włączone, model sam decyduje, kiedy pobrać treść na podstawie wiadomości użytkownika.

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;

Krok 2: Prześlij pliki i dodaj je do Vector Store

Aby uzyskać dostęp do twoich plików, narzędzie file_search używa obiektu Vector Store. Prześlij swoje pliki i utwórz Vector Store, aby je zawierał. 

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; 

Krok 3: Utwórz uruchomienie i sprawdź wynik

Teraz utwórz uruchomienie i obserwuj, jak model używa narzędzia File Search do udzielenia odpowiedzi na pytanie użytkownika. 

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;