OpenAI Assistants File Search

· 기능

sgcWebSockets 2024.10.0부터 일반 모델 대신 OpenAI Assistants를 사용해 자체 파일에서 검색할 수 있어요.

File Search는 독점 제품 정보나 사용자가 제공한 문서 같은 모델 외부의 지식으로 Assistant를 보강해요. OpenAI는 문서를 자동으로 파싱하고 청크로 분할하며, 임베딩을 생성해 저장하고, 벡터와 키워드 검색을 모두 사용해 사용자 질의에 답하기 위한 관련 콘텐츠를 검색해요.

지원되는 파일

지원되는 파일

text/ MIME 타입의 경우, 인코딩은 utf-8, utf-16, ascii 중 하나여야 해요.

파일 형식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

1단계: File Search가 활성화된 새 Assistant 만들기

Assistant의 tools 매개변수에서 file_search가 활성화된 새 어시스턴트를 만드세요. 

file_search 도구가 활성화되면, 모델이 사용자 메시지를 기반으로 콘텐츠를 검색할 시점을 결정해요.

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;

2단계: 파일 업로드 후 Vector Store에 추가하기

파일에 접근하기 위해 file_search 도구는 Vector Store 객체를 사용해요. 파일을 업로드하고 이를 담을 Vector Store를 만드세요. 

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; 

3단계: run을 만들고 출력 확인하기

이제 Run을 만들어 모델이 사용자 질문에 응답하기 위해 File Search 도구를 사용하는 것을 확인하세요. 

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;