OpenAI Embeddings
TsgcAIOpenAIEmbeddings는 검색 증강 생성의 색인과 조회를 담당합니다. 말뭉치를 청크로 나누고 청크마다 임베딩 벡터를 요청해 지정한 벡터 저장소에 기록하며, 어떤 질의에도 가장 가까운 저장 텍스트를 돌려줍니다.
TsgcAIOpenAIEmbeddings는 검색 증강 생성의 색인과 조회를 담당합니다. 말뭉치를 청크로 나누고 청크마다 임베딩 벡터를 요청해 지정한 벡터 저장소에 기록하며, 어떤 질의에도 가장 가까운 저장 텍스트를 돌려줍니다.
저장소를 자유롭게 교체할 수 있는 임베딩 생성 컴포넌트입니다. Database에 벡터 데이터베이스 컴포넌트를 지정하면 청킹과 임베딩, 일괄 처리, 기록까지 색인 파이프라인 전체가 호출 한 번으로 실행됩니다.
sgcAI는 자체 완결형 제품입니다. 이 컴포넌트는 기반이 되는 sgcWebSockets Core 런타임과 함께 sgcAI에 포함되어 제공되므로, 별도로 구매해야 할 기본 라이선스가 없습니다.
벡터 저장소를 지정하고 CreateEmbeddingsFromFile을 한 번 호출한 다음, 사용자 질문마다 컨텍스트를 조회하세요.
uses
sgcAI, sgcAI_OpenAI_Embeddings, sgcAI_DB_Vector_File;
var
oEmbeddings: TsgcAIOpenAIEmbeddings;
oDB: TsgcAIDatabaseVectorFile;
vContext: string;
begin
oDB := TsgcAIDatabaseVectorFile.Create(nil);
oDB.VectorFileOptions.InputFilename := 'corpus.sgcif';
oDB.VectorFileOptions.VectorFilename := 'corpus.sgcvf';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
oEmbeddings.OpenAIOptions.ApiKey := 'sk-...';
oEmbeddings.EmbeddingsOptions.Model := 'text-embedding-3-small';
oEmbeddings.EmbeddingsOptions.ChunkSize := 4096;
oEmbeddings.Database := oDB;
oEmbeddings.OnCreateEmbeddingsProgress := EmbeddingsProgress;
// One pass over the corpus, done once.
oEmbeddings.CreateEmbeddingsFromFile('manual.txt');
// Then, per question, retrieve the nearest chunk.
vContext := oEmbeddings.GetEmbedding('How do I reset the device?', '');
end;
procedure TForm1.EmbeddingsProgress(Sender: TObject;
aPosition: Int64; var aContinue: Boolean);
begin
ProgressBar1.Position := aPosition;
aContinue := not CancelRequested;
end;
// includes: sgcAI.hpp, sgcAI_OpenAI_Embeddings.hpp, sgcAI_DB_Vector_File.hpp
TsgcAIDatabaseVectorFile *oDB = new TsgcAIDatabaseVectorFile(NULL);
oDB->VectorFileOptions->InputFilename = "corpus.sgcif";
oDB->VectorFileOptions->VectorFilename = "corpus.sgcvf";
TsgcAIOpenAIEmbeddings *oEmbeddings = new TsgcAIOpenAIEmbeddings(NULL);
oEmbeddings->OpenAIOptions->ApiKey = "sk-...";
oEmbeddings->Database = oDB;
oEmbeddings->CreateEmbeddingsFromFile("manual.txt");
String vContext = oEmbeddings->GetEmbedding("How do I reset the device?", "");
가장 자주 사용하게 되는 멤버들입니다.
Database에는 어떤 벡터 저장소 컴포넌트든 지정할 수 있습니다. 로컬 파일에는 TsgcAIDatabaseVectorFile을, 관리형 인덱스에는 TsgcAIDatabaseVectorPinecone을 사용하세요. 색인 코드는 달라지지 않습니다.
Model의 기본값은 text-embedding-3-small입니다. ChunkSize는 말뭉치를 나누는 방식을 정하고, WaitStoringData는 저장소에 기록하는 속도를 조절하며, User는 요청에 태그를 붙입니다.
CreateEmbeddings는 문자열을, CreateEmbeddingsFromFile은 파일 전체를 색인합니다. 두 메서드 모두 저장소에 배치를 열고 청크마다 벡터 하나를 넣은 다음 배치를 닫습니다.
GetEmbedding은 질의를 임베딩해 가장 가까운 저장 텍스트를 반환합니다. 이 문자열을 프롬프트에 컨텍스트로 넣으면 됩니다.
OnCreateEmbeddingsStart는 전체 크기를 알려 주고, OnCreateEmbeddingsProgress는 진행 위치와 함께 계속 여부 플래그를 제공해 오래 걸리는 색인 작업을 취소할 수 있게 하며, OnCreateEmbeddingsStop이 작업을 마무리합니다.
OnBeforeCreateEmbedding으로 개별 요청을 확인하고 거부할 수 있으며, OnAfterCreateEmbedding은 요청과 응답을 함께 전달하므로 토큰 사용량을 점검하는 데 유용합니다.
이 컴포넌트가 사용하는 서비스와 프로토콜의 공식 자료입니다.