ベクトルデータベース(ファイル)
TsgcAIDatabaseVectorFile は、埋め込みベクトルと元のテキストを 2 つのローカルファイルに保存します。埋め込みコンポーネントに割り当てれば、アプリケーションに同梱できる検索可能なコーパスが手に入ります。サーバーもクエリごとの費用も不要です。
TsgcAIDatabaseVectorFile は、埋め込みベクトルと元のテキストを 2 つのローカルファイルに保存します。埋め込みコンポーネントに割り当てれば、アプリケーションに同梱できる検索可能なコーパスが手に入ります。サーバーもクエリごとの費用も不要です。
依存関係のないベクトルストアです。ベクトルと元のテキストはメモリ上に保持され、バッチが閉じられるときにディスクへ書き出され、クエリ時には最も近い一致がスキャンで検索されます。
sgcAI は単体で完結しています。このコンポーネントは、土台となる sgcWebSockets Core ランタイムとともに sgcAI に同梱されているため、基本ライセンスを購入する必要はありません。
入力ファイルとベクトルファイルを指定し、埋め込みコンポーネントに割り当てれば、あとはコンポーネントが処理します。
uses
sgcAI, sgcAI_DB_Vector_File, sgcAI_OpenAI_Embeddings;
var
oDB: TsgcAIDatabaseVectorFile;
oEmbeddings: TsgcAIOpenAIEmbeddings;
begin
oDB := TsgcAIDatabaseVectorFile.Create(nil);
oDB.VectorFileOptions.InputFilename := 'corpus.sgcif';
oDB.VectorFileOptions.VectorFilename := 'corpus.sgcvf';
oEmbeddings := TsgcAIOpenAIEmbeddings.Create(nil);
oEmbeddings.OpenAIOptions.ApiKey := 'sk-...';
oEmbeddings.Database := oDB;
oEmbeddings.CreateEmbeddingsFromFile('manual.txt');
// The store can also be driven directly.
oDB.BeginAddData;
oDB.AddData('Reset procedure: hold the button for 10 seconds.', vVector);
oDB.EndAddData;
Memo1.Text := oDB.QueryData(vQueryVector);
end;
// includes: sgcAI.hpp, sgcAI_DB_Vector_File.hpp
TsgcAIDatabaseVectorFile *oDB = new TsgcAIDatabaseVectorFile(NULL);
oDB->VectorFileOptions->InputFilename = "corpus.sgcif";
oDB->VectorFileOptions->VectorFilename = "corpus.sgcvf";
oDB->BeginAddData();
oDB->AddData("Reset procedure: hold the button for 10 seconds.", vVector);
oDB->EndAddData();
String vBest = oDB->QueryData(vQueryVector);
最もよく使うメンバーです。
InputFilename は id をキーとする元テキストを、VectorFilename は対応するベクトルを保持します。両方のファイルをアプリケーションに同梱すれば、コーパスはオフラインでも利用できます。
BeginAddData がバッチを開き、AddData がテキストとそのベクトルを 1 件追加し、EndAddData がバッチを閉じて両方のファイルをディスクに書き出します。
QueryData はクエリベクトルを受け取り、保存済みベクトルから最も近いものを走査して、その元テキストを返します。
OnBeginAddData でバッチの開始 id と id ラベルを設定できるため、2 回目以降の取り込みで既存のコーパスを上書きせずに追記できます。
メモリに無理なく収まるコーパスや、ネットワーク接続なしで動作する必要があるデスクトップアプリケーションに最適です。大規模なインデックスや共有インデックスには Pinecone ストアを使ってください。
TsgcAIDatabaseVectorPinecone と同じインターフェースを実装しているため、ローカルファイルからマネージドインデックスへの移行はコンポーネントの差し替えだけで済み、コードの変更は不要です。