Web Vector Storage (WVS) は、ブラウザの IndexedDB にドキュメント ベクトルを保存する軽量で効率的なベクトル データベースです。このパッケージを使用すると、ベクトル埋め込みを使用してテキスト ドキュメントに対してセマンティック類似性検索を実行できます。セマンティック検索とは、テキスト ドキュメントとクエリの意味とコンテキストを理解し、より正確で関連性の高い検索結果を実現する機能を指します。
Web Vector Storage は、テキスト ドキュメントをベクトルに変換するための埋め込みを生成するためのさまざまな埋め込みプロバイダーとモデルをサポートし、コサイン類似性に基づいて類似したドキュメントを検索するためのインターフェイスを提供します。
ベクトル ストアは、大規模言語モデル (LLM) を使用して検索拡張生成 (RAG) 生成 AI アプリケーションを構築する際のコア コンポーネントです。 LLM をエッジ (つまりブラウザ内) で実行する場合、Web ブラウザのネイティブ ベクトル ストアがあると便利です。これにより、ユーザー データのローカル ストレージが可能になるだけでなく、ユーザーのデバイス内のローカル コンピューティング能力を活用できるため、オーバーヘッドとコストが軽減されます。
コサイン類似度は、内積空間における 2 つの非ゼロ ベクトル間の類似性の尺度です。これは、2 つのベクトル間の角度の余弦として定義されます。コサイン類似度の値の範囲は -1 ~ 1 で、1 は完全な類似性を示し、0 は類似性がないことを示し、-1 は完全な非類似性を示します。
このパッケージでは、コサイン類似度を使用して、ドキュメント ベクトルとクエリ ベクトル間の類似性を測定します。コサイン類似性スコアは、ベクトルのドット積をそれらの大きさの積で割ったものを使用して計算されます。
最も最近使用されていない (LRU) メカニズムは、ストレージ サイズを管理し、ストレージ サイズが指定された制限を超えた場合にドキュメントを自動的に削除するために使用されます。ドキュメントはヒット カウンタ (昇順) で並べ替えられ、次にタイムスタンプ (昇順) で並べ替えられます。ストレージ サイズが制限を下回るまで、ヒット カウントが最も低くタイムスタンプが最も古いドキュメントが最初に削除されます。
npm を使用してパッケージをインストールします。
npm i web-vector-storage
VectorStorage クラスの基本的な使用例を次に示します。
import { VectorStorage } from "web-vector-storage" ;
import { OpenAIEmbedder } from "web-vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( new OpenAIEmbedder ( { apiKey : "your-openai-api-key" } ) ) ;
// Add a text document to the store
await vectorStore . addText ( "The quick brown fox jumps over the lazy dog." , {
category : "example" ,
} ) ;
// Perform a similarity search
const results = await vectorStore . similaritySearch ( {
query : "A fast fox leaps over a sleepy hound." ,
} ) ;
// Display the search results
console . log ( results ) ;
VectorStorage クラスの基本的な使用例を次に示します。
import { VectorStorage } from "web-vector-storage" ;
import { OllamaEmbedder } from "web-vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( new OllamaEmbedder ( { embeddingModel : "your-favorite-ollama-embedding-model" } ) ) ;
// Add a text document to the store
await vectorStore . addText ( "The quick brown fox jumps over the lazy dog." , {
category : "example" ,
} ) ;
// Perform a similarity search
const results = await vectorStore . similaritySearch ( {
query : "A fast fox leaps over a sleepy hound." ,
} ) ;
// Display the search results
console . log ( results ) ;
VectorStorage クラスの基本的な使用例を次に示します。
import { VectorStorage } from "web-vector-storage" ;
import { HFTransformerEmbedder } from "web-vector-storage" ;
// Create an instance of VectorStorage
const vectorStore = new VectorStorage ( new HFTransformerEmbedder ( { embeddingModel : "your-favorite-hf-transformer-embedding-model" } ) ) ;
// Add a text document to the store
await vectorStore . addText ( "The quick brown fox jumps over the lazy dog." , {
category : "example" ,
} ) ;
// Perform a similarity search
const results = await vectorStore . similaritySearch ( {
query : "A fast fox leaps over a sleepy hound." ,
} ) ;
// Display the search results
console . log ( results ) ;
IndexedDB でドキュメント ベクトルを管理するためのメイン クラス。
VectorStorage の新しいインスタンスを作成します。
embedder : embedder (OpenAIEmbedder、OllamaEmbedder、HFTransformerEmbedder) クラスのインスタンス
interface IEmbedderOptions {
apiKey ?: string ; // The API key to use. Only applicable to OpenAIEmbedder.
baseUrl ?: string ; // The base URL to use to connect to remote service. Only applicable to OllamaEmbedder and defaults to http://localhost:11434
embeddingModel ?: string ; // The specific embedding model to use. Each embedder has a default if none is specified.
}
options : 次のプロパティを含むオブジェクト:
interface IWVSOptions {
maxSizeInMB ?: number ; // The maximum size of the storage in megabytes. Defaults to 2GB
debounceTime ?: number ; // The debounce time in milliseconds for saving to IndexedDB. Defaults to 0.
}
テキストドキュメントをストアに追加し、作成されたドキュメントを返します。
複数のテキスト ドキュメントをストアに追加し、作成されたドキュメントの配列を返します。
保存されたドキュメントに対して類似性検索を実行し、一致するドキュメントの配列を返します。
params : 次のプロパティを含むオブジェクト:
IWVSDocument インターフェイスは、ベクトル データベースに格納されているドキュメント オブジェクトを表します。これには次のプロパティが含まれます。
interface IWVSDocument {
hits ?: number ; // The number of hits (accesses) for the document. Omit if the value is 0.
metadata : object ; // The metadata associated with the document for filtering.
text : string ; // The text content of the document.
timestamp : number ; // The timestamp indicating when the document was added to the store.
vectorMag : number ; // The magnitude of the document vector.
vector : number [ ] ; // The vector representation of the document.
}
このプロジェクトへの貢献は大歓迎です!貢献したい場合は、次の手順に従ってください。
プル リクエストを送信する前に、コードがプロジェクトのコーディング スタイルに従っていること、およびすべてのテストに合格していることを確認してください。バグを見つけた場合、または改善の提案がある場合は、お気軽に GitHub で問題を開いてください。
このプロジェクトは MIT ライセンスに基づいてライセンスされています。ライセンスの全文については、LICENSE ファイルを参照してください。
Web Vector Storage は、Nitai Aharoni による素晴らしい成果に基づいて構築されています。無断転載を禁じます。