sgcWebSockets 2024.10.0부터 일반 모델 대신 OpenAI Assistants를 사용해 자체 파일에서 검색할 수 있어요.
File Search는 독점 제품 정보나 사용자가 제공한 문서 같은 모델 외부의 지식으로 Assistant를 보강해요. OpenAI는 문서를 자동으로 파싱하고 청크로 분할하며, 임베딩을 생성해 저장하고, 벡터와 키워드 검색을 모두 사용해 사용자 질의에 답하기 위한 관련 콘텐츠를 검색해요.
지원되는 파일
지원되는 파일
text/ MIME 타입의 경우, 인코딩은 utf-8, utf-16, ascii 중 하나여야 해요.
| 파일 형식 | MIME 타입 |
|---|---|
.c | text/x-c |
.cpp | text/x-c++ |
.cs | text/x-csharp |
.css | text/css |
.doc | application/msword |
.docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
.go | text/x-golang |
.html | text/html |
.java | text/x-java |
.js | text/javascript |
.json | application/json |
.md | text/markdown |
.pdf | application/pdf |
.php | text/x-php |
.pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
.py | text/x-python |
.py | text/x-script.python |
.rb | text/x-ruby |
.sh | application/x-sh |
.tex | text/x-tex |
.ts | application/typescript |
.txt | text/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;
