벡터 데이터베이스 — sgcWebSockets | eSeGeCe

벡터 데이터베이스

Delphi에서 벡터 데이터베이스에 연결하여 의미 검색, RAG, AI 기반 애플리케이션을 구축해 보세요. Pinecone 등을 지원해요.

Delphi에서의 의미 검색 및 RAG

텍스트를 고차원 임베딩으로 저장하고, 키워드가 아닌 의미를 기준으로 가장 관련성 높은 구절을 검색해 보세요.

벡터 데이터베이스는 임베딩 모델이 생성한 수치 임베딩을 저장하고, 쿼리 벡터에 가장 가까운 항목을 찾을 수 있게 해줘요. 이는 의미 검색과 검색 증강 생성(RAG)의 기반이에요. RAG에서는 모델이 학습 중에 암기한 내용에만 의존하는 대신, 사용자의 문서에서 가져온 구절로 대규모 언어 모델을 보강해요.

sgcWebSockets는 동일한 기본 컴포넌트인 TsgcAIDatabaseVector를 공유하는 두 가지 교체 가능한 벡터 저장소 백엔드를 제공해요. 따라서 적재 또는 쿼리 코드를 변경하지 않고도 한 백엔드를 다른 백엔드로 교체할 수 있어요. 두 백엔드 중 어느 쪽이든 TsgcAIOpenAIEmbeddings 컴포넌트와 함께 사용하면 원시 텍스트를 벡터로 변환하여 저장소에 곧바로 넣을 수 있어요.

  • TsgcAIDatabaseVectorFile — 로컬 파일 기반 저장소예요. 외부 서비스가 필요 없어 데스크톱 앱, 오프라인 사용, 소규모 코퍼스에 이상적이에요.
  • TsgcAIDatabaseVectorPinecone — REST API를 통한 관리형 Pinecone 클라우드 서비스로, 크고 공유되거나 수평 확장된 인덱스에 적합해요.

어느 쪽을 언제 사용할까요: 인프라가 전혀 필요 없고 데이터가 한 머신에 충분히 들어갈 때는 파일 백엔드를 선택하세요. 인덱스가 크거나, 여러 프로세스 또는 사용자 간에 공유해야 하거나, 단일 호스트를 넘어 확장해야 할 때는 Pinecone을 선택하세요.

  • 고차원 벡터 embeddings 저장 및 쿼리
  • RAG 애플리케이션을 위한 의미 유사도 검색
  • 다양한 벡터 데이터베이스 백엔드 지원
  • 메타데이터 필터링 및 하이브리드 검색
  • 배치 upsert 및 쿼리 작업

작동 방식

TsgcAIOpenAIEmbeddings 컴포넌트의 Database 속성에 벡터 저장소를 할당한 다음, CreateEmbeddingsFromFile을 호출하면 문서 전체를 한 번의 배치로 임베딩하여 적재할 수 있어요. 내부적으로 각 청크는 저장소가 TsgcAIDatabaseVector로부터 상속받은 BeginAddData / AddData / EndAddData 시퀀스를 통해 추가돼요. 따라서 파일 백엔드와 Pinecone 백엔드는 코드 관점에서 동일하게 동작해요.

쿼리 시점에는 GetEmbedding으로 사용자의 질문을 임베딩하고, 그 결과 벡터를 QueryData에 전달하면 코사인 유사도 순으로 정렬된 최근접 일치 결과를 반환해요. 이 구절들을 채팅 모델에 컨텍스트로 다시 전달하면 동작하는 RAG 파이프라인이 완성돼요. 자체 데이터에 근거하고 직접 제어하는 인용이 포함된 답변을 얻을 수 있어요. 동일한 방식으로 지식 베이스에 대한 의미 검색, 중복 제거, 추천, 클러스터링까지 모두 Delphi나 C++ Builder를 벗어나지 않고 구현할 수 있어요.

Delphi Example

코퍼스를 적재하고 두 백엔드 중 어느 쪽으로든 최근접 이웃을 쿼리해 보세요.

uses
  sgcAI, sgcAI_OpenAI_Embeddings,
  sgcAI_DB_Vector, sgcAI_DB_Vector_File, sgcAI_DB_Vector_Pinecone;

var
  Embeddings: TsgcAIOpenAIEmbeddings;
  DBFile: TsgcAIDatabaseVectorFile;
  DBPinecone: TsgcAIDatabaseVectorPinecone;
begin
  Embeddings := TsgcAIOpenAIEmbeddings.Create(nil);
  Embeddings.OpenAIOptions.ApiKey := 'sk-...';

  // Local file-based vector store
  DBFile := TsgcAIDatabaseVectorFile.Create(nil);
  DBFile.VectorFileOptions.InputFilename  := 'corpus.sgcif';
  DBFile.VectorFileOptions.VectorFilename := 'corpus.sgcvf';
  Embeddings.Database := DBFile;
  Embeddings.CreateEmbeddingsFromFile('docs.txt');

  // Or push to the Pinecone cloud index
  DBPinecone := TsgcAIDatabaseVectorPinecone.Create(nil);
  DBPinecone.PineconeOptions.ApiKey         := 'pc-...';
  DBPinecone.PineconeIndexOptions.IndexName := 'sgc-embeddings';
  Embeddings.Database := DBPinecone;

  // Query the nearest neighbour for an arbitrary text
  Results := Embeddings.Database.QueryData(
    Embeddings.GetEmbedding('what is sgcWebSockets?', ''));
end;

Ready to Use Vector Databases?

무료 체험판을 다운로드하고 몇 분 안에 개발을 시작해 보세요.