Da sgcWebSockets 2024.10.0 puoi usare OpenAI Assistants per cercare nei tuoi file invece di usare il modello generico.
File Search arricchisce l'Assistant con conoscenza esterna al suo modello, come informazioni di prodotto proprietarie o documenti forniti dai tuoi utenti. OpenAI esegue automaticamente parsing e chunking dei tuoi documenti, crea e memorizza gli embeddings, e usa sia ricerca vettoriale sia per parole chiave per recuperare contenuti rilevanti e rispondere alle query degli utenti.
File supportati
File supportati
Per i tipi MIME text/, la codifica deve essere una tra utf-8, utf-16 o ascii.
| Formato file | Tipo 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 |
Passo 1: creare un nuovo Assistant con File Search abilitato
Crea un nuovo assistant con file_search abilitato nel parametro tools dell'Assistant.
Una volta abilitato il tool file_search, il modello decide quando recuperare contenuti in base ai messaggi utente.
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;
Passo 2: caricare file e aggiungerli a un Vector Store
Per accedere ai tuoi file, il tool file_search usa l'oggetto Vector Store. Carica i tuoi file e crea un Vector Store per contenerli.
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;
Passo 3: creare un run e verificare l'output
Ora crea un Run e osserva che il modello usa il tool File Search per fornire una risposta alla domanda dell'utente.
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;
