ベクトルデータベース — sgcWebSockets | eSeGeCe

ベクトルデータベース

Delphi からベクトルデータベースに接続し、セマンティック検索、RAG、AI を活用したアプリケーションを構築できます。Pinecone などに対応しています。

Delphi でのセマンティック検索と RAG

テキストを高次元のエンベディングとして保存し、キーワードではなく意味によって最も関連性の高い文章を取得します。

ベクトルデータベースは、エンベディングモデルが生成する数値エンベディングを保存し、クエリベクトルに最も近いエントリを見つけられるようにします。これはセマンティック検索および検索拡張生成 (RAG) の基盤となるものであり、モデルが学習時に記憶した内容だけに頼るのではなく、独自のドキュメントから取り出した文章で大規模言語モデルをグラウンディングします。

sgcWebSockets は、同じベース コンポーネント TsgcAIDatabaseVector を共有する、相互に置き換え可能な 2 つのベクトルストアバックエンドを提供します。そのため、取り込みやクエリのコードを変更することなく、一方を他方に差し替えられます。いずれのバックエンドも TsgcAIOpenAIEmbeddings コンポーネントと組み合わせることで、生のテキストをベクトルに変換し、そのままストアへ投入できます。

  • TsgcAIDatabaseVectorFile — ローカルのファイルベースのストア。外部サービスは不要で、デスクトップアプリ、オフライン利用、小規模なコーパスに最適です。
  • TsgcAIDatabaseVectorPinecone — REST API を介したマネージドの Pinecone クラウドサービス。大規模、共有、または水平スケールするインデックス向けです。

どちらを使うべきか: インフラ不要でデータがマシンに十分収まる場合は、ファイルバックエンドを選びましょう。インデックスが大きい、複数のプロセスやユーザーで共有する必要がある、または単一ホストを超えてスケールさせる必要がある場合は、Pinecone を選択します。

  • 高次元ベクトルエンベディングの保存とクエリ
  • RAG アプリケーション向けのセマンティック類似検索
  • 複数のベクトルデータベースバックエンドに対応
  • メタデータフィルタリングとハイブリッド検索
  • バッチアップサートとクエリ操作

仕組み

ベクトルストアを TsgcAIOpenAIEmbeddings コンポーネントの Database プロパティに割り当て、CreateEmbeddingsFromFile を呼び出すと、ドキュメント全体を 1 つのバッチでエンベディングして取り込めます。内部的には、各チャンクはストアが TsgcAIDatabaseVector から継承する BeginAddData / AddData / EndAddData のシーケンスを通じて追加されるため、ファイルバックエンドと Pinecone バックエンドはコードの観点からは同一に動作します。

クエリ時には、ユーザーの質問を GetEmbedding でエンベディングし、得られたベクトルを QueryData に渡すと、コサイン類似度でランク付けされた最も近い一致が返されます。それらの文章をコンテキストとしてチャットモデルに戻せば、動作する RAG パイプラインの完成です。独自データに根ざした回答を、自分で管理できる引用付きで得られます。同じアプローチで、ナレッジベースに対するセマンティック検索、重複排除、レコメンデーション、クラスタリングを、Delphi や C++ Builder から離れることなく実現できます。

Delphi コード例

いずれのバックエンドでも、コーパスを取り込んで最近傍をクエリできます。

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;

ベクトルデータベースを使い始めますか?

体験版をダウンロードして、数分で構築を開始できます。