轻量级向量搜索 SQLite 扩展:sqlite-vec

想要在你的数据库中进行高效的向量搜索吗? sqlite-vec 是一个超小巧、速度够用的 SQLite 扩展,让你可以轻松实现!它完全用 C 写成,没有依赖项,可以在任何SQLite支持的环境下运行(Linux/MacOS/Windows、浏览器 (WASM)、Raspberry Pi 等)。

sqlite-vec 的优势:

  • 轻量级: 体积非常小巧,对资源占用极低。
  • 快速: 虽然不是最快的向量搜索引擎,但速度足够满足大多数应用需求。
  • 无依赖: 纯 C 实现,无需任何额外库或工具。
  • 平台无关: 在任何支持 SQLite 的环境中运行。

使用场景:

sqlite-vec 最适合于需要快速、高效地进行小型到中等规模的向量搜索的任务,例如:

  • 文本相似性搜索
  • 图像识别
  • 音频分析
  • 推荐系统

关键特性:

  • 支持存储和查询 float、int8 和二进制向量。
  • 使用 vec0 虚拟表进行高效存储和查询。
  • 可使用 rowid IN (...) 子查询进行预筛选向量,提高查询效率。

安装:

sqlite-vec 的安装非常简单,支持多种编程语言:

  • Python: pip install sqlite-vec
  • Node.js: npm install sqlite-vec
  • Ruby: gem install sqlite-vec
  • Go: go get -u github.com/asg017/sqlite-vec/bindings/go
  • Rust: cargo add sqlite-vec

示例:

-- 创建一个名为 vec_examples 的虚拟表,存储浮点型向量
CREATE VIRTUAL TABLE vec_examples USING vec0(sample_embedding float[8]);

-- 插入一些示例向量数据
INSERT INTO vec_examples (rowid, sample_embedding) VALUES 
  (1, '[-0.200, 0.250, 0.341, -0.211, 0.645, 0.935, -0.316, -0.924]'),
  (2, '[0.443, -0.501, 0.355, -0.771, 0.707, -0.708, -0.185, 0.362]'),
  -- ...

-- 执行 KNN 查询,查找与给定向量的最相似的两个向量
SELECT rowid, distance FROM vec_examples WHERE sample_embedding MATCH '[0.890, 0.544, 0.825, 0.961, 0.358, 0.0196, 0.521, 0.175]' ORDER BY distance LIMIT 2;

贡献者:

sqlite-vec 是 Mozilla Builders 项目,并得到了 Fly.io、Turso 和 SQLite Cloud 的赞助。

更多信息: