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 | |
Node.js | npm install sqlite-vec |
使用 Node.js 安装 sqlite-vec | |
Ruby | gem install sqlite-vec |
使用 Ruby 的 sqlite-vec | |
Go | go get -u github.com/asg017/sqlite-vec/bindings/go |
使用 Go 的 sqlite-vec | |
Rust | cargo add sqlite-vec |
使用 Rust 的 sqlite-vec | |
Datasette | datasette install datasette-sqlite-vec |
Sqlite-vec 与 Datasette | |
rqlite | rqlited -extensions-path=sqlite-vec.tar.gz |
Sqlite-vec 与 rqlite | |
sqlite-utils | sqlite-utils install sqlite-utils-sqlite-vec |
Sqlite-vec 与 sqlite-utils 配合使用 | |
GitHub 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
最后编辑:Jeebiz 更新时间:2025-10-19 01:25