client-vector-search
浏览器端向量检索库:嵌入、搜索、缓存全在本地运行,零网络延迟
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
浏览器端向量检索库:嵌入、搜索、缓存全在本地运行,零网络延迟
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你有没有想过,当你打开一个产品页面,底部弹出"相似推荐"时,系统是怎么知道这些商品和你正在看的商品"相似"的?答案藏在一种叫向量检索(Vector Search)的技术里。
传统数据库像一本按字母顺序排列的电话簿,查找"和王思聪同龄的人"需要扫描每一页。但向量数据库把每条数据变成一串数字(数学上叫"向量"),然后用"距离公式"判断相似度——数字越接近,语义越相近。Google 用它做搜索排名,Netflix 用它推荐电影,而 OpenAI 的 Assistants API 背后,也是向量检索在做知识召回。
向量搜索的瓶颈:服务端延迟
然而,大多数向量数据库(如 Pinecone、Weaviate、Milvus)都运行在云端服务器上。客户端要先发送请求到服务器,服务器完成检索,再返回结果。这个过程存在网络往返延迟(通常 50-200ms),在用户体验上会造成明显的等待感。此外,数据必须上传到第三方服务器,带来隐私风险。
browser-native 的新思路:把搜索引擎跑在你的设备里
client-vector-search 正是来解决这个问题的。它是一个纯客户端(Client-side)的向量搜索库,可以直接在浏览器或 Node.js 环境中运行——不需要任何服务器,不需要安装任何数据库。
它的核心原理很简单:你输入一段文本,库调用 @xenova/transformers 在浏览器本地将文本转化为向量(即 embedding),然后用余弦相似度(Cosine Similarity)在本地向量集合中搜索相似内容。搜索过程完全在本地完成,网络延迟降为零。
有趣的是,它默认使用 gte-small 模型(体积约 30MB),性能号称超越 OpenAI 的 text-embedding-ada-002,同时速度远快于 Pinecone 等远程向量数据库。这个对比声明大胆而具体,值得在实际业务中验证。
技术架构:五层模块化设计
源码结构清晰,分为五个核心模块:
| 模块 | 文件 | 职责 |
|---|---|---|
| 嵌入生成 | src/index.ts | 调用 @xenova/transformers 本地生成向量,精度 7 位小数 |
| 缓存层 | src/cache.ts | LRU 缓存(默认 10000 条,10 分钟过期),避免重复 embedding |
| 存储层 | src/indexedDB.ts | IndexedDB 持久化存储向量索引,支持浏览器本地保存 |
| 相似度 | src/utils.ts | 余弦相似度计算,精度 6 位小数 |
| 检索算法 | src/hnsw.ts | 实验性 HNSW(层次可导航小世界图)实现,目标突破暴力搜索瓶颈 |
特别值得关注的是 ExperimentalHNSWIndex——这是作者正在自研的 HNSW 近似最近邻算法,不依赖任何第三方 bindings 库,实现了纯 TypeScript 原生实现。当前代码中已有优先队列、欧氏距离、层插入等核心逻辑,但官方标注为 "bare bones"(刚刚可用),性能测试和参数调优尚未完成。
存储层面,库同时支持 IndexedDB 和 localStorage 两种浏览器本地存储方案,并用 @msgpack/msgpack 进行序列化压缩。这意味着一个完整的产品搜索索引可以永久保存在用户浏览器中,下次访问时直接加载,无需重新 embedding。
上手体验:npm 装上就能用
安装只需一行命令:
npm i client-vector-search
嵌入一条文本和构建搜索索引的完整流程不超过 20 行代码。相比需要部署 Docker 容器、配置 API Key、管理向量数据库实例的传统方案,这个门槛几乎为零。
有一点需要特别注意:如果在 Next.js 项目中使用,需要在 next.config.js 中关闭 sharp 和 onnxruntime-node 的 webpack 别名,否则打包会报错。作者在 README 中提供了完整的配置示例。
局限与边界:它不是万能药
client-vector-search 的定位是中小规模向量搜索(~1k 向量/用户)。在以下场景中,它并不适用:
此外,HNSW 算法目前处于实验阶段(ExperimentalHNSWIndex),生产环境使用前建议充分测试召回率和性能。
它代表了什么趋势?
近年来,AI 基础设施正在经历从"中心化云服务"向"端侧智能"的迁移。LLM 有 llama.cpp 在本地运行,Whisper 有 whisper.cpp 跑在浏览器里,而向量搜索也在走向客户端。苹果的 ONNX Runtime、Google 的 WebLLM 都在验证同一个方向:在用户设备上运行 AI 模型。client-vector-search 正是这个趋势在向量检索领域的一个轻量实践。
对于前端和全栈工程师而言,这意味着 RAG(检索增强生成)不再需要搭建复杂的后端服务——直接在浏览器里就能构建一个本地知识库问答系统。这种开发范式的变化,可能会在未来几年重塑很多 AI 应用的技术架构。