当前位置: 首页 > article >正文

sqlite-vec:谁说SQLite不是向量数据库?

sqlite-vec 是一个 SQLite 向量搜索插件,具有以零依赖、轻量级、跨平台和高效 KNN 搜索等优势,是本地化向量检索(例如 RAG)、轻量级 AI 应用以及边缘计算等场景的理想工具。

sqlite-vec 使用纯 C 语言实现,零外部依赖,体积小巧,适用于各种 SQLite 运行环境(Linux、MacOS、Windows、WASM、Android、iOS、Raspberry Pi 等)。

sqlite-vec 基于 vec0 虚拟表实现了 float、int8 以及二进制向量的存储与相似查询,所有操作都基于 SQL 完成。

sqlite-vec 提供了多种编程语言(Python、Ruby、Node.js、Deno、Bun、Go、Rust 等)驱动,以下命令用于安装 Python 模块:

pip install sqlite-vec

接下来是一个在 Python 代码中使用 sqlite-vec 的简单示例:

import sqlite3
import sqlite_vecfrom typing import List
import structdef serialize_f32(vector: List[float]) -> bytes:"""serializes a list of floats into a compact "raw bytes" format"""return struct.pack("%sf" % len(vector), *vector)db = sqlite3.connect(":memory:")
db.enable_load_extension(True)
sqlite_vec.load(db)
db.enable_load_extension(False)sqlite_version, vec_version = db.execute("select sqlite_version(), vec_version()"
).fetchone()
print(f"sqlite_version={sqlite_version}, vec_version={vec_version}")items = [(1, [0.1, 0.1, 0.1, 0.1]),(2, [0.2, 0.2, 0.2, 0.2]),(3, [0.3, 0.3, 0.3, 0.3]),(4, [0.4, 0.4, 0.4, 0.4]),(5, [0.5, 0.5, 0.5, 0.5]),
]
query = [0.3, 0.3, 0.3, 0.3]db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])")with db:for item in items:db.execute("INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)",[item[0], serialize_f32(item[1])],)rows = db.execute("""SELECTrowid,distanceFROM vec_itemsWHERE embedding MATCH ?ORDER BY distanceLIMIT 3""",[serialize_f32(query)],
).fetchall()print(rows)

代码运行的结果如下:

sqlite_version=3.45.3, vec_version=v0.1.6
[(3, 0.0), (4, 0.19999998807907104), (2, 0.20000001788139343)]

更多的介绍和示例可以参考网址:

https://alexgarcia.xyz/sqlite-vec/

另外,这个开源项目的作者还提供了两个用于生成文本嵌入(Text Embedding)的项目,配合 sqlite-vec 使用更加方便:

  • sqlite-rembed,基于远程 API(OpenAI、Nomic、Ollama 等)生成文本嵌入;
  • sqlite-lembed,基于 .gguf 格式的本地嵌入模型生成文本嵌入。
http://www.lryc.cn/news/2397836.html

相关文章:

  • Redis最佳实践——性能优化技巧之监控与告警详解
  • R3GAN训练自己的数据集
  • MATLAB实战:Arduino硬件交互项目方案
  • bert扩充或者缩小词表
  • 什么是 TOML?
  • git怎么合并两个分支
  • 1.文件操作相关的库
  • Pytorch中一些重要的经典操作和简单讲解
  • 【容器docker】启动容器kibana报错:“message“:“Error: Cannot find module ‘./logs‘
  • 基于bp神经网络的adp算法
  • C#里与嵌入式系统W5500网络通讯(4)
  • Spring boot集成milvus(spring ai)
  • Visual Studio+SQL Server数据挖掘
  • maven项目编译时复制xml到classes目录方案
  • 通过阿里云服务发送邮件
  • Vad-R1:通过从感知到认知的思维链进行视频异常推理
  • 黑马Java面试笔记之MySQL篇(事务)
  • 群辉(synology)NAS老机器连接出现网页端可以进入,但是本地访问输入一样的账号密码是出现错误时解决方案
  • C++多重继承详解与实战解析
  • 【深度学习】实验四 卷积神经网络CNN
  • 实现一个免费可用的文生图的MCP Server
  • 无公网ip远程桌面连接不了怎么办?内网计算机让外网访问方法和问题分析
  • 【手搓一个原生全局loading组件解决页面闪烁问题】
  • CSS基础巩固-基础-选择
  • 一种在SQL Server中传递多行数据的方法
  • 【Docker 从入门到实战全攻略(一):核心概念 + 命令详解 + 部署案例】
  • github 提交失败,连接不上
  • 系统架构设计师(一):计算机系统基础知识
  • VMware安装Ubuntu全攻略
  • 清理 pycharm 无效解释器