turbovec:基于 Google TurboQuant 的高性能 Rust 向量索引,比 FAISS 更快更省内存

在构建 RAG(检索增强生成)应用时,向量索引的内存占用和搜索速度一直是困扰开发者的两大痛点。最近 GitHub Trending 上出现了一个新项目 turbovec —— 它基于 Google Research 的 TurboQuant 算法,用 Rust 实现核心引擎,提供 Python 绑定,在多项基准测试中表现亮眼。

核心亮点

一个 1000 万文档的语料库,用 float32 存储需要 31 GB 内存,turbovec 压缩到 4 GB —— 而且搜索速度比 FAISS 更快。

turbovec 的核心优势可以概括为四点:

  • 在线实时索引:不需要训练步骤,不需要调参,添加向量即索引完成,随着语料库增长无需重建
  • SIMD 加速搜索:手写的 NEON(ARM)和 AVX-512BW(x86)内核,在 ARM 平台上比 FAISS IndexPQFastScan 快 10-19%
  • 搜索时过滤:支持 ID 白名单过滤,过滤逻辑直接内嵌在 SIMD 内核中,避免了”先查后过滤”的浪费
  • 纯本地运行:无需托管服务,数据不离开你的机器,可配合任何开源 Embedding 模型构建完整离线 RAG 方案

技术原理

turbovec 背后的 TurboQuant 算法思路非常巧妙:

  1. 归一化:剥离向量的长度(norm),单独存储为一个浮点数,剩下的方向向量落在高维超球面上
  2. 随机旋转:对所有向量乘以同一个随机正交矩阵,旋转后每个坐标独立服从 Beta 分布,且在高维时收敛于高斯分布 N(0, 1/d)——这一点与输入数据无关
  3. Lloyd-Max 标量量化:既然分布已知,可以预计算最优的量化区间,2-bit 对应 4 个桶,4-bit 对应 16 个桶,均方误差最小化
  4. 数据无关:整个过程不依赖输入数据分布,不需要 k-means 聚类训练,这就是为什么 turbovec 不需要训练阶段

此外,turbovec 还提供了 TQ+ 校准模式,针对低维度(如 GloVe d=200)和词向量场景,对每个坐标拟合偏移+缩放参数,进一步提升召回率,最高可提升 1.4pp @R1。

快速上手

安装

pip install turbovec

基础用法

from turbovec import TurboQuantIndex

# 创建索引:1536维,4-bit量化
index = TurboQuantIndex(dim=1536, bit_width=4)

# 添加向量
index.add(vectors)
index.add(more_vectors)

# 搜索
scores, indices = index.search(query, k=10)

# 持久化
index.write("my_index.tv")
loaded = TurboQuantIndex.load("my_index.tv")

带 ID 管理

import numpy as np
from turbovec import IdMapIndex

index = IdMapIndex(dim=1536, bit_width=4)
index.add_with_ids(vectors, np.array([1001, 1002, 1003], dtype=np.uint64))

scores, ids = index.search(query, k=10)  # 返回你的 uint64 外部 ID
index.remove(1002)  # O(1) 删除

index.write("my_index.tvim")
loaded = IdMapIndex.load("my_index.tvim")

混合检索(过滤搜索)

idx = IdMapIndex(dim=1536, bit_width=4)
idx.add_with_ids(vectors, ids)

# 第一阶段:用 SQL/BM25 等外部系统缩小候选集
allowed = np.array(
    db.execute("SELECT id FROM docs WHERE tenant=?", (t,)).fetchall(),
    dtype=np.uint64
)

# 第二阶段:在候选集内做密集重排
scores, ids = idx.search(query, k=10, allowlist=allowed)

过滤逻辑内置在 SIMD 内核中,以 32 向量块粒度执行。没有允许槽位的块在 LUT 查找或评分之前就被短路跳过,大幅减少了无效计算。

框架集成

turbovec 提供了主流 RAG 框架的即插即用集成,只需替换 import 就能无缝切换:

框架 安装命令 替换对象
LangChain pip install turbovec[langchain] InMemoryVectorStore
LlamaIndex pip install turbovec[llama-index] SimpleVectorStore
Haystack pip install turbovec[haystack] InMemoryDocumentStore
Agno pip install turbovec[agno] LanceDb

适用场景

  • 隐私敏感的 RAG 应用:医疗、金融、法律等场景,数据不能上云
  • 边缘设备部署:ARM 平台优势明显,适合端侧 AI 应用
  • 大规模文档检索:千万级文档只需 GB 级内存
  • 混合检索架构:配合 Elasticsearch/PostgreSQL 做 keyword+vector 两阶段检索
  • Agent 工具的本地知识库:轻量级、零依赖,嵌入任何 Python 项目

小结

turbovec 解决了向量检索三个核心矛盾:内存 vs 精度、速度 vs 灵活性、本地化 vs 性能。对需要离线运行、数据敏感、内存受限的 RAG 场景来说,是一个值得关注的选择。截至发文,项目使用 MIT 协议开源,支持 Python 和 Rust,PyPI 和 crates.io 均可安装。

GitHub 地址:https://github.com/RyanCodrai/turbovec

论文:TurboQuant: A Data-Oblivious Quantizer with Near-Optimal Distortion (arXiv)

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享