이전 글에서 OpenAI Embeddings를 사용해 OpenAI 채팅 메서드에 맥락 정보를 추가하는 방법을 살펴봤어요.
이번에는 sgcWebSockets 패키지의 TsgcOpenAIEmbeddings 컴포넌트를 사용해 우리 자신의 데이터로 AI 애플리케이션을 만드는 방법을 알아볼게요.
이전 Delphi Voice ChatBot 글에서는 TsgcAIOpenAIChatBot 컴포넌트로 음성으로 동작하는 챗봇을 만들었는데, 이번에는 2021년까지 학습된 openAI 데이터만이 아니라 우리 자신의 데이터로 챗봇을 확장하여, 도움말 파일과 패키지의 인터페이스에서 얻은 데이터로 Q&A를 만들어 볼 거예요.
자체 데이터를 벡터로 변환하기
첫 번째 단계는 sgcWebSockets pdf 매뉴얼을 가져와 텍스트로 변환하는 거예요. 이 파일을 사용해 패키지 설정 방법, 컴포넌트 사용 방법 등에 관한 유용한 정보를 담은 embeddings를 만들고, 이 정보는 OpenAI에 질문할 때 사용할 거예요.
pdf 매뉴얼을 텍스트 형식으로 준비했다면 TsgcAIOpenAIEmbeddings 컴포넌트를 사용해 파일의 각 섹션에 대한 벡터를 OpenAI로부터 얻을 수 있고, 이 경우에는 텍스트 파일에 저장할 거예요(프로덕션에서는 Pinecone 같은 벡터 데이터베이스를 사용할 수 있어요).
procedure ConvertFileToVector;
var
oDialog: TOpenDialog;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
begin
oDialog := TOpenDialog.Create(nil);
Try
oDialog.Filter := 'TXT Files|*.txt';
if oDialog.Execute then
begin
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
oEmbeddings.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings.CreateEmbeddingsFromFile(oDialog.FileName);
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
end;
Finally
FreeAndNil(oDialog);
End;
end;
ChatBot & Embeddings
모든 데이터를 벡터로 변환했다면 자체 모델을 구축할 수 있어요. 그 뒤에 있는 아이디어는 아주 단순해요. 봇에게 질문할 때마다 먼저 질문을 벡터로 변환하고, 데이터베이스에서 질문과 가장 유사한 벡터를 검색한 다음, 질문과 가장 유사한 데이터를 맥락으로 추가하는 거예요.
procedure AskToChatGPT(const aQuestion: string);
var
oChatBot: TsgcAIOpenAIChatBot;
oEmbeddings: TsgcAIOpenAIEmbeddings;
oFile: TsgcAIDatabaseVectorFile;
vContext: string;
begin
oChatBot := TsgcAIOpenAIChatBot.Create(nil);
Try
oChatBot.OpenAIOptions.ApiKey := '<your api key>';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
Try
oChatBot.Embeddings := oEmbeddings;
oFile := TsgcAIDatabaseVectorFile.Create(nil);
Try
oEmbeddings.Database := oFile;
vContext := oChatBot.GetEmbedding(aQuestion);
oChatBot.ChatAsUser('Answer the question based on the context below.\n\nContext:\n' +
vContext + '\nQuestion:' + aQuestion + '\nAnswer:');
Finally
oFile.Free;
End;
Finally
oEmbeddings.Free;
End;
Finally
FreeAndNil(oDialog);
End;
end;
Delphi Windows 데모
아래는 sgcWebSockets AI 패키지를 사용한 Delphi 샘플로, 커스터마이징된 데이터로 Q&A 애플리케이션을 만드는 방법을 보여줘요. 데모에는 두 개의 프로젝트가 포함되어 있어요.
1. sgcCreateEmbeddings: 이 프로젝트는 텍스트 파일을 불러와 청크로 나누고, 각 청크를 벡터로 변환해 데이터베이스 파일에 저장해요. 데모에는 사용 편의를 위해 텍스트 파일 형식의 벡터 데이터베이스가 이미 포함되어 있어요.
2. sgcQuestionsAnswers: 이전에 만든 데이터베이스 레코드를 사용해, 사용자가 챗봇에게 질문할 때마다 애플리케이션은 먼저 데이터베이스에서 질문과 가장 유사한 맥락을 검색하고, 챗봇이 더 정확한 응답을 제공하도록 맥락 정보로 추가해요.
