Web Vector Storage (WVS) 是一個輕量級且高效的向量資料庫,它將文件向量儲存在瀏覽器的 IndexedDB 中。該套件允許您使用向量嵌入對文字文件執行語義相似性搜尋。語意搜尋是指理解文字文件和查詢的含義和上下文的能力,從而實現更準確和相關的搜尋結果。
Web Vector Storage 支援各種嵌入提供者和模型來產生嵌入以將文字文件轉換為向量,並提供基於餘弦相似度搜尋相似文件的介面。
向量儲存是使用大型語言模型 (LLM) 建立檢索增強生成 (RAG) 來產生 AI 應用程式的核心元件。當在邊緣(即瀏覽器內)運行法學碩士時,擁有網頁瀏覽器本機向量儲存可能會很有用。這使得能夠本地儲存用戶資料並利用用戶設備內的本地運算能力,從而減輕開銷和成本。
餘弦相似度是內積空間中兩個非零向量之間相似度的量測。它被定義為兩個向量之間的角度的餘弦。餘弦相似度取值範圍為-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 :嵌入器(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 許可證的許可。請參閱許可證文件以取得完整的許可證文字。
Web 向量儲存建立在 Nitai Aharoni 的偉大工作之上。版權所有。