在浏览器中做向量检索,一直是个麻烦事。原生的IndexDB并不支持向量。之前笔者使用过pglite方案,完成浏览器内的向量检索及问答。我已经将它做为一款书签/桌面/资讯于一体的chrome插件,感兴趣的朋友可以下载使用。

https://chromewebstore.google.com/detail/memwink/mpklgnebhehdpdpddabokaocemmalijn?hl=zh-CN&utm_source=ext_sidebar
今天,我要再介绍一个原生解决浏览器向量检索的开源产品EdgeVec。它是一个完全运行在浏览器中的向量数据库,通过WebAssembly实现,导入即用,无需任何外部依赖。

EdgeVec把完整的向量数据库能力直接搬到浏览器里。所有计算在本地完成,数据不出设备,同时提供企业级的功能特性。
像使用普通npm包一样简单,无需Docker、服务器或任何配置文件。一行import,立即可用。
通过二值量化技术,将向量存储空间压缩32倍。100万个768维向量从300MB压缩到10MB,让浏览器也能处理大规模数据。
利用WebAssembly SIMD指令,向量运算速度提升2-8倍。在支持SIMD的浏览器中(Chrome 91+、Firefox 89+、Safari 16.4+),汉明距离计算可达8.75倍加速。
768维向量搜索测试(M1 MacBook):
规模 | 搜索延迟 | 内存占用 |
|---|---|---|
1万向量 | 380µs | 30MB |
10万向量 | 938µs | 300MB |
二值量化模式 | <500µs | 10MB |
距离计算性能:
npm install edgevecimport init, { EdgeVec } from 'edgevec';
import { pipeline } from '@xenova/transformers';
// 初始化
await init();
const embedder = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');
const db = new EdgeVec({ dimensions: 384 });
// 添加向量
const embedding = await embedder(text, { pooling: 'mean', normalize: true });
db.insertWithMetadata(new Float32Array(embedding.data), {
category: "document",
timestamp: Date.now()
});
// 搜索
const results = db.searchWithFilter(
queryVector,
'category = "document"',
10
);
// 持久化
await db.save("my-vector-db");方案 | EdgeVec | PGlite+pgvector | hnswlib-wasm | Pinecone |
|---|---|---|---|---|
部署复杂度 | 零配置 | 需要配置 | 零配置 | 需要API |
二值量化 | ✓(32x) | ✗ | ✗ | ✗ |
元数据过滤 | ✓ | ✓ | ✗ | ✓ |
离线运行 | ✓ | ✓ | ✓ | ✗ |
包体积 | 217KB | ~3MB | ~100KB | N/A |
数据隐私 | 完全本地 | 完全本地 | 完全本地 | 云端处理 |
EdgeVec专为向量搜索场景优化,在保持轻量级的同时提供企业级功能。
相关地址: