TurboVec:比 FAISS 快 3.4 倍的 Rust 向量索引库
turbovec 是一个基于 Google Research TurboQuant 算法构建的 Rust 向量索引库,用纯 Rust 实现核心索引逻辑并通过 Python 绑定对外开放。与 FAISS 相比,它在同等召回率下实现 3.4–3.5 倍检索加速,1000 万文档语料从 31 GB float32 压缩到 4 GB,同时支持在线增量摄入、过滤搜索和增量持久化,无需任何训练步骤或重build。凭借极致性能和纯本地部署特性,它在 2026 年 6 月 GitHub trending 中空降前五,成为 RAG 基础设施层的当红项目。
功能与原则
turbovec 解决的是向量数据库在高召回率、低延迟、大规模数据场景下的三重挑战:压缩率、检索速度、增量更新。核心设计原则:
- 数据无关量化(Data-Oblivious Quantization):基于 TurboQuant 论文(ICLR 2026),无需码本训练,向量来了直接量化,免去 FAISS PQ 的离线训练阶段
- SIMD 级别手工优化:x86 AVX-512 VNNI/vpermb 和 ARM NEON SDOT/SMMLA 内核,手写汇编级优化,碾压 FAISS IndexPQFastScan
- 在线增量索引:add() 即索引,无需批量重建;sync() 增量持久化,崩溃安全
- 搜索时过滤:allowlist/bitmask 在 SIMD 内核层面直接短路不过的向量块,避免 over-fetch
- 纯本地/Air-gapped:无任何外部依赖,适合隐私敏感和内网 RAG 场景
认可度
- GitHub Star:约 16,678(截至 2026-09-07),Fork 1,442
- 2026 年 6 月 8 日 GitHub Trending 空降前五,单日 +66 星,同期最热基础设施项目
- 2026 年 8 月 18 日发布 v1.0.0 正式版,进入稳定生产阶段
- 已被 LangChain / LlamaIndex / Haystack / Agno 四大框架官方集成
链接
GitHub:https://github.com/RyanCodrai/turbovec
原作者
RyanCodrai(GitHub 个人开发者),专注于高性能向量检索基础设施,turbovec 是其核心作品,仓库采用 MIT 许可证。
介绍
当前向量数据库在处理大规模语料时面临根本性矛盾:FAISS 的 Product Quantization(PQ)需要离线训练码本,且压缩后检索精度与速度难以兼得;云服务方案则有数据隐私和成本问题。
turbovec 从 Google Research 的 TurboQuant 论文中找到答案。TurboQuant 是一种”数据无关”的量化器——它不依赖数据分布建模,而是通过数学上接近香农下限的分块量化实现压缩,在线量化即时生效,无需训练。这使得 1000 万文档的 float32 向量(原本 31 GB)可以压缩到 4 GB,同时搜索速度比 FAISS 快 3.4 倍。
除了核心检索,turbovec 还支持:稳定外部 ID(IdMapIndex,删除 O(1))、增量持久化(sync() 只写变化的部分)、混合检索(先 SQL/BM25 缩小候选集,再 dense rerank)、多框架适配器(替换 LangChain/LlamaIndex 等框架的内置向量存储)。
特点
- 极致压缩:1000 万文档 31 GB → 4 GB(4-bit 量化),内存占用仅为 FAISS 的 1/8
- 检索加速 3.4 倍:SIMD 内核在 ARM 领先 FAISS 12–20%,x86 持平或领先
- 零训练、零调参:在线量化,向量来了直接加,无需 build 阶段
- 增量安全:sync() 增量持久化,单次 fsync,崩溃恢复粒度到字节级
- 过滤内嵌 SIMD:allowlist 在 32 向量块粒度短路,不浪费计算资源
- 框架即插即用:LangChain / LlamaIndex / Haystack / Agno 替换同一行 import 即可
- 支持 CRUD:IdMapIndex 支持 O(1) 按 ID 删除,无需重建整个索引
使用方法
安装
# Python(推荐)
pip install turbovec
# Rust(直接集成)
cargo add turbovec
基础检索
from turbovec import TurboQuantIndex
import numpy as np
# 创建索引(dim=向量维度,bit_width=量化位数)
index = TurboQuantIndex(dim=1536, bit_width=4)
# 添加向量
vectors = np.random.rand(10000, 1536).astype(np.float32)
index.add(vectors)
# 检索 Top-10
query = np.random.rand(1536).astype(np.float32)
scores, indices = index.search(query, k=10)
# 持久化
index.write("my_index.tv")
loaded = TurboQuantIndex.load("my_index.tv")
带稳定 ID 的索引
from turbovec import IdMapIndex
import numpy as np
index = IdMapIndex(dim=1536, bit_width=4)
ids = np.array([1001, 1002, 1003], dtype=np.uint64)
index.add_with_ids(vectors, ids)
# 搜索结果直接返回业务 ID
scores, ids = index.search(query, k=10)
# O(1) 删除
index.remove(1002)
过滤搜索(混合检索)
# 第一步:外部系统缩小候选集(如 SQL 查询)
allowed = np.array(db.execute("SELECT id FROM docs WHERE tenant=?", (t,)).fetchall(), dtype=np.uint64)
# 第二步:turbovec 在允许集合内 dense rerank
scores, ids = idx.search(query, k=10, allowlist=allowed)
使用场景与人群
适用场景:
– 隐私敏感型 RAG(医疗、法务、金融)——数据不出本机
– 大规模知识库(千万级文档)——压缩内存占用,降低成本
– 实时增量知识库(持续摄入文档)——无需重建索引
– 边缘/端侧部署(低内存设备)——4 GB 压缩到 4 GB 向量检索
– 推荐系统/相似内容匹配——毫秒级插入延迟
目标用户:
– AI 应用工程师(构建 RAG pipeline)
– 向量数据库运维(需要低成本高性能方案)
– 研究者(需要本地可复现的检索基准)
输入与输出案例
案例 1:大规模语料压缩
输入:1,000 万条 1536 维 float32 向量(31 GB 内存)
处理:turbovec 4-bit 量化,压缩率 87%
输出:索引文件约 4 GB,搜索延迟从 FAISS 的 ~50ms 降至 ~15ms(单次查询)
案例 2:混合检索过滤
输入:查询向量 + SQL 候选集(1,000 个允许的文档 ID)
处理:allowlist 过滤 + SIMD 内核 dense rerank
输出:Top-10 相关文档(来自允许集),无 over-fetch,无 recall 损失
GitHub:https://github.com/RyanCodrai/turbovec
评论区
登录后可评论。