这个项目能做什么

turbovec 是一个用 Rust 实现的向量索引,并通过绑定暴露给 Python。它基于 Google Research 的 TurboQuant 算法构建,这是一种数据无关的量化方法,使用归一化、固定随机旋转、基于分布的 Lloyd-Max 标量量化、位打包和长度重归一化内积评分。该项目针对内存受限、低延迟的本地向量搜索,且不需要托管服务。 主要类 TurboQuantIndex 通过维度和位宽创建,文档中记录了 2 位和 4 位索引。向量可以增量添加,无需单独的训练步骤、参数调整阶段或索引重建。Python 输入使用 float32 NumPy 数组;其他数据类型会被拒绝,而不是静默转换。API 提供添加、搜索、写入、加载和同步操作。搜索返回请求的 k 个最近邻结果的分数和索引。 IdMapIndex 添加稳定的 uint64 外部 ID、add_with_ids 以及根据文档按 ID 进行 O(1) 删除。它支持相同的整文件写入/加载工作流和增量同步持久化。sync 方法被描述为仅持久化自上次同步以来的更改,每次调用使用一次 fsync,并允许小规模追加或删除,而无需重写整个索引。write 和 load 仍可用于完整快照。 通过传递给搜索的 ID 允许列表或槽位位掩码支持过滤或混合检索。允许列表可以来自外部系统,如 SQL、BM25、访问控制逻辑或时间过滤器。README 说明过滤在 SIMD 搜索内核内应用,跳过没有允许向量的块,结果计数为 min(k, 不同允许向量的数量)。 搜索使用手写 SIMD 内核,并具有运行时特性选择。文档中记录的目标包括 ARM NEON SDOT/SMMLA、x86 AVX-512 VNNI 和 vpermb,以及 AVX2 和标量回退。Rust 构建使用 x86-64-v2 基线,同时在支持的硬件上启用更新的内核。在描述的基准测试配置中,通过 Rayon 提供多线程支持。 可选的 TQ+ 校准步骤可以在索引前从代表性样本中拟合每个坐标的偏移和缩放值。README 描述这可以提高有限维度或低位设置中的召回率,特别是 GloVe 风格的嵌入,同时保持对后续添加的可重用性。未校准的索引使用普通 TurboQuant。 Python 安装可通过 pip 获得,Rust 使用可通过 cargo add turbovec。项目文档了 LangChain、LlamaIndex、Haystack 和 Agno 的可选集成,定位为其内存或参考向量存储的直接替代品。这些集成通过可选的包额外功能安装。 仓库包含项目运行的基准测试,将 turbovec 与 FAISS IndexPQFastScan 和 IndexPQ 配置进行比较。README 报告了在测试的 ARM 和 x86 配置中更低的内存使用、更快的测量搜索、插入和删除延迟测量、召回率图表、压缩结果以及保存/加载时间。这些是提供的基准测试结果,而非独立的第三方测量。基准测试目录中包含下载 GloVe 和 OpenAI 嵌入数据集、运行召回率/速度/压缩套件、保存 JSON 结果以及重新生成图表的脚本。