VSAG 1.0 版本日志
v1.0.0 于项目启动三周年当天(2026 年 7 月 12 日)发布。
- GitHub 官方 Release
- v0.18.0…v1.0.0 完整变更
- 标签对应提交:
efdaf17a10e96cdb5222baf558d50dfacbdc672e
版本概览
VSAG 1.0 是项目首个长期支持(LTS)大版本。截至该版本发布时,
公开的 0.x 历史包含从 v0.11 到 v0.18 的 81 个版本标签。
v1.0.0 汇总了这一阶段的主线成果,覆盖稠密向量、稀疏向量、结构化过滤、
层级检索和多向量检索。
v1.0.0 官方 Release 收录了 v0.18.0 以来的 375 项变化:
48 项新增功能、134 项改进、105 项缺陷修复和 88 项其他变化。
v0.11.0...v1.0.0 主线对比包含 1,252 个提交。
本文仅描述 v1.0.0 标签中可用的 API 与功能。
主要能力
索引体系
下图按职责展示 VSAG 1.0 的索引体系:Pyramid 和 LazyHGraph 提供组合与自适应能力, 下层展示 BruteForce、HGraph、IVF、SINDI 和 SIMQ 五个核心索引族。
组合与自适应索引:
- 分区索引 Pyramid:支持将同一条向量加入多个 Pyramid 路径, 并按指定路径限定检索范围,适合多租户与层级检索 (PR #2226)。
- 自伸缩图索引 LazyHGraph:在数据量较小时使用精确 BruteForce, 达到可配置阈值后转换为 HGraph,适合持续增长但初始规模较小的集合 (PR #2151)。
核心索引族:
- 暴力搜索索引 BruteForce:支持单向量和多向量精确检索,是精确检索基线,也是小规模集合的精确检索选项。
- 图索引 HGraph:面向高召回、低延迟的稠密向量检索。从最初的 HGraph 实现发展至今, 已支持量化、过滤、范围与迭代检索、更新、标记/强制删除、缓存导入导出、 诊断和内存+磁盘配置。
- 空间划分索引 IVF:面向大规模数据、批量查询和大
top-k场景,支持量化、 重排、属性过滤、并行构建/检索和磁盘分桶存储。参见最初的 IVF PR。 - 稀疏向量索引 SINDI:面向 BM25 风格和学习型稀疏表示, 支持词项 ID 重映射、索引分析、不可变读取、FP16 稀疏值、词项列表压缩和 低内存不可变构建。
- 多向量索引 SIMQ:面向 ColBERT 等 late-interaction 多向量检索, 先在聚类级别生成候选,再用精确 MaxSim 重排,以平衡召回率和延迟 (PR #2357)。
各索引的参数与使用说明参见索引。
量化、数据类型与硬件加速
VSAG 1.0 提供多种输入格式、量化方法、向量变换与硬件加速路径:
- FP32、INT8、FP16、BF16 稠密输入,以及稀疏与多向量数据集; FP16/BF16 可直接输入(PR #1731);
- SQ4/SQ8 及对应的均匀量化变体;
- Product Quantization 和 PQ FastScan (PR #626、 PR #691);
- RaBitQ、扩展位宽与 x+y split 的基础/重排布局、FHT/PCA 变换和专用 SIMD 内核;
- Transform Quantizer 链与 MRL-E 降维;
- x86_64 上的 SSE、AVX、AVX2、AVX-512 和部分 AMX 内核,以及 ARM NEON、SVE;
- SQ8U 内积和 KMeans BF16 GEMM 的 AMX 加速 (PR #2032)。
支持组合与调参建议参见量化。
检索、过滤与索引管理
- 基础检索:
KnnSearch提供 KNN 查询,RangeSearch提供可限制结果数量的范围查询。 - 统一请求接口:
SearchRequest与Index::SearchWithRequest使用一个请求对象选择 KNN 或范围检索,并传递索引专用 JSON 参数、受支持的过滤条件和诊断输入。v1.0 中 HGraph、IVF 和 BruteForce 实现了该接口,可用字段因索引而异。 - 过滤: 支持 ID 回调/
FilterPtr、bitset 和 SQL 风格属性表达式。HGraph、IVF 和 BruteForce 支持基于属性倒排索引的结构化过滤;HGraph 还支持迭代过滤,并可在有效数据比例不高于hgraph.brute_force_threshold时切换到暴力检索。 - 训练与模型复用:
Train、Clone、ExportModel和Tune分别用于独立训练、索引深拷贝、训练模型导出和索引调优。 - 数据维护与读取: 支持批量删除、标记/强制删除、ID/向量/属性更新、Source ID、
extra_info、索引详情读取和CalcDistanceById。 - 漏召回诊断:
SearchRequest::expected_labels_可在 HGraph、IVF 和 BruteForce 中分析目标向量未被召回的原因,推理报告随结果Dataset返回(PR #1838)。 - 统计与容量规划: 检索、I/O、内存和索引专用统计用于观测运行状态;内存估算、索引内省和分析工具用于容量评估与问题定位。
具体支持范围因索引而异;可通过 Index::CheckFeature(IndexFeature) 查询其中已声明的能力。
序列化与兼容性
VSAG 1.0 并行维护两套序列化接口:既有 Serialize/Deserialize 接口继续维护,
用于保持现有接入的兼容性;新的流式序列化接口
采用头部先行(header-first)、仅需顺序读取的格式,并扩展以下能力:
SerializeStreaming先写元数据,再写带类型的 TLV 数据块;DeserializeStreaming将数据恢复到已创建、为空且兼容的索引对象;Index::Load读取元数据、创建对应索引,并应用受支持的存储放置策略;- BruteForce、HGraph、IVF、可变 SINDI 和 Pyramid 已支持 v1.0 流式序列化; 不可变 SINDI 运行态在 v1.0 中暂不支持。
两套接口会并行保留,但两种格式不兼容,文件必须使用对应的接口读取。 既有用户可继续使用原接口;新接入建议优先使用流式序列化接口。 格式和数据块版本细节参见 新序列化格式。
跨版本索引测试样本和兼容性检查工具 可用于重复验证旧索引的升级过程。
平台、绑定与工具
- VSAG 核心 C++ 库支持 Linux 和 macOS,主要研发和完整验证链路以 Linux 为主。 Linux x86_64 与 AArch64 均通过 CI,macOS 当前验证 arm64 构建 (源码构建、 PR CI)。 预编译 C++ 发布包目前仅面向 Linux x86_64。
- Python 绑定的包名为
pyvsag;v1.0.0 声明支持 CPython 3.6-3.14,并为这一版本范围配置了 wheel 构建。 Python 构建已迁移到原生 CMake 集成 (PR #1599); 绑定还支持更多索引操作、FP16/BF16 输入、稀疏向量和稀疏 HDF5 辅助工具。 - VSAG 新增 C API 与 Node.js/TypeScript 绑定,并提供 快速入门示例。各语言绑定独立发布,使用时请确认对应包版本。
- 构建支持系统级 OpenBLAS/fmt、自定义依赖下载镜像和可安装的 CMake 包配置。
eval_performance支持稠密、稀疏和多向量数据集;analyze_index、check_compatibility、visualize_index和 HTTP 监控服务补齐了分析、兼容性验证、 序列化检查与监控工具。
稳定性与验证
功能与回归测试覆盖内存分配、泄漏与内存不足路径,以及多线程下的构建、写入、 检索、更新、删除和析构。CI 通过 ASan 持续检查内存安全,并通过 TSan 检查数据竞争; 兼容性测试样本用于验证历史索引的升级路径。
从 v0.18 升级的兼容性说明
VSAG 1.0 是大版本升级,包含源码级 API 变化。升级前请重点检查:
Remove返回删除数量并支持批量操作。 v0.18 的tl::expected<bool, Error> Remove(int64_t)调整为tl::expected<uint32_t, Error>,并增加批量重载和显式删除模式 (PR #1551)。 v1.0 最终提供RemoveMode::MARK_REMOVE和RemoveMode::FORCE_REMOVE; HGraph 强制删除由 PR #1810实现。- 不支持的操作通常改为返回错误。
许多返回
tl::expected的默认方法不再抛出std::runtime_error,而是返回带ErrorType::UNSUPPORTED_INDEX_OPERATION的tl::unexpected(PR #2141)。调用.value()前 应先检查tl::expected返回值。 - 内存统计接口签名发生变化。
GetMemoryUsage使用uint64_t,GetMemoryUsageDetail返回std::unordered_map<std::string, uint64_t>,GetEstimateBuildMemory更名为EstimateBuildMemory(PR #2388)。 - 检索接口可以渐进迁移。 新接入优先使用
SearchRequest和SearchWithRequest,既有检索重载在 v1.0 中仍然保留。 - 不要混用两套序列化格式。
旧格式输出必须使用旧反序列化接口;
流式序列化输出必须使用
DeserializeStreaming或Index::Load。 - SINDI 自动选择堆插入策略。 旧的
use_term_lists_heap_insert检索参数 会被忽略。SINDI 根据doc_prune_ratio和query_prune_ratio推导策略;依赖 强制指定旧路径的配置需要调整。 - Intel MKL 改为显式开启。 默认值为
OFF。通过 Makefile 构建时设置VSAG_ENABLE_INTEL_MKL=ON,直接使用 CMake 时设置-DENABLE_INTEL_MKL=ON。
对于持久化索引,建议在测试环境验证明确的源版本与目标版本组合。 序列化兼容性可能因索引类型、功能开关和格式家族而异。
从 v0.x 走向 1.0
v0.11.0 是 VSAG 开源后的首个正式发布版本。此前的版本号仅用于内部迭代,未作为 GitHub Release 对外发布,因此本节从 v0.11 开始回顾。
基础建设:v0.11-v0.14
- v0.11,2024 年 9 月: 建立 HNSW/DiskANN、C++/Python、预过滤、余弦距离、锁和序列化的初始基线。
- v0.12,2024 年 12 月:
引入 DataCell、I/O 与图抽象、HGraph、SQ4/SQ8/INT8、Engine/Factory 和
pyvsag打包。 - v0.13,2025 年 2 月:
新增 BruteForce,并扩展 Pyramid、内存估算、IndexFeature、过滤提示和
eval_performance。 - v0.14,2025 年 4 月:
引入 IVF、FP16/BF16、RaBitQ、异步/缓冲 I/O、稀疏数据、HGraph
extra_info、迭代过滤与系统化兼容性检查。
生产能力扩展:v0.15-v0.18
- v0.15,2025 年 6 月: 新增 Train/Clone/ExportModel、PQ/PQ FastScan、属性表达式、压缩图、HGraph 合并/标记删除,以及带兼容性 CI 的既有格式自描述序列化。
- v0.16,2025 年 8 月: 新增 mmap HGraph、SINDI、并行 IVF、属性更新、原始向量读取和参数兼容性检查,并 通过长期补丁线持续解决 ABI、并发和旧索引兼容问题。
- v0.17,2025 年 10 月:
扩展
SearchRequest以覆盖主要检索场景,并增加检索超时、 更广泛的extra_info、Transform Quantizer、HGraph 单查询并行、 数据导出与更完整的 SINDI 生命周期和统计能力。 - v0.18,2026 年 1 月: 新增 C API、自动构建 Python wheel、稀疏 Python 绑定、磁盘 IVF、索引详情/检索/I/O 统计、MRL-E 与 HGraph 调优、扩展 RaBitQ,并继续完善 SINDI 和 Pyramid。
完整提交历史参见 v0.11.0…v1.0.0 对比。
v1.0 补丁版本
- v1.0.0 (2026 年 7 月 12 日):首个长期支持大版本。
后续 v1.0.x 补丁版本会追加到本节。
完整 PR 清单和各版本贡献者名单继续维护在 GitHub Releases。
致谢
VSAG 1.0 是蚂蚁集团 VSAG 团队与开源社区共同贡献的成果。 感谢所有参与算法设计、功能实现、问题反馈、代码评审、 测试改进和文档建设的贡献者。
完整名单参见贡献者页面和 官方 Release。