sqlite-vec

一个极小的、“足够快” 的 vector 搜索 SQLite 扩展,可以在任何地方运行!sqlite-vss 的后继者!

重要信息
Sqlite-vec 是一个 pre-v1, 所以请期待突破性的变化!

  • 在 vec0 虚拟表中存储和查询 float、int8 和二进制 vector
  • 用纯 C 语言编写,没有依赖关系,可以在 SQLite 运行的任何地方运行 (Linux/MacOS/Windows、使用 WASM 的浏览器、Raspberry Pis 等)。
  • 将非向量数据存储在元数据、辅助数据或分区键列中

Sqlite-vec 是 Mozilla Builders 的一个项目,还获得了 fly.io、Turso、SQLite Cloud 和 Shinkai 的额外赞助。有关更多详细信息,请参阅 “赞助商” 部分。

安装

有关更多详细信息,请参阅安装 sqlite-vec。

语言 安装 更多信息 版本徽章
Python pip install sqlite-vec 使用 Python 的 sqlite-vec PyPI
Node.js npm install sqlite-vec 使用 Node.js 安装 sqlite-vec npm
Ruby gem install sqlite-vec 使用 Ruby 的 sqlite-vec Gem
Go go get -u github.com/asg017/sqlite-vec/bindings/go 使用 Go 的 sqlite-vec Go Reference
Rust cargo add sqlite-vec 使用 Rust 的 sqlite-vec Crates.io
Datasette datasette install datasette-sqlite-vec Sqlite-vec 与 Datasette Datasette
rqlite rqlited -extensions-path=sqlite-vec.tar.gz Sqlite-vec 与 rqlite rqlite
sqlite-utils sqlite-utils install sqlite-utils-sqlite-vec Sqlite-vec 与 sqlite-utils 配合使用 sqlite-utils
GitHub Release GitHub tag (latest SemVer pre-release)

使用示例

.load ./vec0

示例-1

create virtual table vec_examples using vec0(
  sample_embedding float[8]
);

-- vectors can be provided as JSON or in a compact binary format
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]'),
    (3, '[0.716, -0.927, 0.134, 0.052, -0.669, 0.793, -0.634, -0.162]'),
    (4, '[-0.710, 0.330, 0.656, 0.041, -0.990, 0.726, 0.385, -0.958]');


-- KNN style query
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;
/*
┌───────┬──────────────────┐
│ rowid │     distance     │
├───────┼──────────────────┤
│ 2     │ 2.38687372207642 │
│ 1     │ 2.38978505134583 │
└───────┴──────────────────┘
*/

示例-2

-- store 768-dimensional vectors in a vec0 virtual table
create virtual table vec_movies using vec0(
  synopsis_embedding float[768]
);

-- insert vectors into the table, as JSON or compact BLOBs
insert into vec_movies(rowid, synopsis_embedding)
  select
    rowid,
    embed(synopsis) as synopsis_embedding
  from movies;

-- KNN search!
select
  rowid,
  distance
from vec_movies
where synopsis_embedding match embed('scary futuristic movies')
order by distance
limit 20;

sqlite-vec Java集成是指通过JDBC驱动在Java应用中使用SQLite向量扩展(sqlite-vec),实现嵌入式向量存储与搜索能力。核心步骤包括:

编译扩展:手动编译sqlite-vec共享库(如.so/.dll)并配置到项目资源目录[^1]。
环境配置:添加SQLite JDBC依赖(如xerial/sqlite-jdbc),通过JDBC连接字符串启用扩展加载(enable_load_extension=true)[^1]。
核心操作:加载扩展后创建向量虚拟表(支持float32类型及L2/余弦相似度度量),通过SQL语句完成向量插入与KNN查询[^1][^3]。
注意:需处理类型兼容性(如real类型与Java float的映射)及版本兼容性(建议使用v0.0.1-alpha.19+修复断言错误)[^2][^4]。

作者:Jeebiz  创建时间:2025-10-19 01:14
最后编辑:Jeebiz  更新时间:2025-10-19 01:25