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 的伟大工作之上。版权所有。