news 2026/6/20 11:52:25

高效索引之HNSW_SQ:如何同时兼顾RAG的速度、召回率与成本

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高效索引之HNSW_SQ:如何同时兼顾RAG的速度、召回率与成本

在RAG在内的高维向量检索场景里,我们常常会陷入一个不可能三角:

硬件不变的情况下,想要更快的查询速度,就得牺牲一部分召回率;如果想要召回率与速度同时兼顾,就得增加硬件预算……

那么,有没有一种方法能打破这个僵局?最新的Milvus能力升级中,给出了答案:HNSW_SQ索引。

通过把HNSW的高效检索能力,和标量量化(SQ)的极致压缩特性结合,做到了性能、速度与成本的同时兼顾。

而与标准HNSW相比,HNSW_SQ最大的不足可能就是保证召回率的同时,索引构建时间会略有增加。

01

HNSW与SQ是什么

解读HNSW_SQ之前,我们需要先对HNSW与SQ这两个底层技术有一个基础的认知。

先说说HNSW。它的核心是构建一个多层图结构,数据集中的每个向量对应图里的一个节点。节点之间会根据向量相似度建立连接,搜索的时候,算法可以从上层稀疏的图快速定位到下层密集的图中的区域,大大缩小需要遍历的范围,这也是它能实现高速检索、高召回的关键。

但光有HNSW还不够,面对海量高维向量,内存开销依然是个大问题。这时候就轮到标量量化(SQ)登场了。

SQ的原理很简单,就是用更少的比特数来表示向量里的浮点数值,从而实现数据压缩。

比如常见的SQ8用8比特,能把数值映射到256个等级;SQ6用6比特,对应64个等级。压缩后的向量体积大幅减小,不仅能降低内存占用,还能加快数据传输和计算的速度。

当然,压缩会带来一点精度损失,但只要控制得当,这种损失完全在可接受范围内。

此外,对于那些追求极致速度和极小内存的场景,Milvus 2.6.8及以上版本还推出了更极致的量化技术SQ4U。它是一种4比特的均匀标量量化方案,将每个维度的浮点值压缩成一个4 位无符号整数,其中“U”代表Uniform,也就是均匀量化。

和传统的按维度独立计算极值的非均匀标量量化(逐维量化)方式不同,SQ4U采用的是全局均匀量化策略:它会为整个向量或向量段计算一个统一的最小值 vmin 和数值范围 vdiff,然后把这个范围平均分成16个区间,所有维度的浮点数值都用这一套参数映射成0-15的4比特整数。

这种设计带来了三大优势:

一是压缩比直接拉满,相比FP32能实现8倍压缩,比SQ8也能再压缩2倍,极大缓解了内存带宽的瓶颈;

二是能充分发挥现代CPU的SIMD指令优势,AVX2/AVX-512这些指令集可以在一个周期内处理更多维度的数据,而且全局参数的设计避免了计算距离时反复加载不同的缩放和偏移值,让指令流水线始终处于饱和状态;

三是更小的向量体积意味着更多数据能塞进CPU缓存,减少了频繁访问内存带来的延迟。

不过要注意,SQ4U“因为是全局均匀”,所以在数据经过归一化,或者各维度数值分布比较一致的数据集上效果会更好。

02

HNSW_SQ 是怎么工作的?

说了这么多,HNSW和SQ到底是怎么联手工作的?一共分三个步骤:

第一步是数据压缩。根据我们设定的 sq_type,比如SQ6或者SQ8,把原始向量压缩成低比特的形式。压缩后的向量虽然精度略有下降,但胜在体积小,能让系统处理更大规模的数据集。

第二步是构建HNSW图。用压缩后的向量来构建多层图,因为数据体积变小了,整个图的规模也会跟着缩小,后续的检索速度自然就更快了。

第三步是候选向量检索。当有查询向量进来时,算法会基于压缩后的图数据,快速筛选出一批可能的相似候选向量。

如果对查询精度有更高要求,还可以开启第四步——结果优化。这一步的核心是几个关键参数:

refine 控制是否开启优化,开启后系统会用更高精度的数据重新计算距离;

refine_type 决定优化时用的数据精度,比如SQ8、BF16甚至FP32,精度越高结果越准,但内存开销也越大,而且它的精度必须高于之前设定的 sq_type;

refine_k 是个放大系数,比如你要取Top100的结果,refine_k 设为2,系统就会先选出Top200的候选,再重新排序得到最准的Top100。

03

如何用好HNSW_SQ

理论讲完,我们直接上手实操。

第一步:构建HNSW_SQ索引

首先准备好索引参数,指定向量字段名add_index()、索引类型(index_type)为HNSW_SQ,再根据需求设置距离度量方式(metric_type)和其他关键参数(params)。

from pymilvus import MilvusClient初始化客户端client = MilvusClient("your_milvus_uri")准备索引参数index_params = client.prepare_index_params()index_params.add_index(field_name="your_vector_field_name",index_type="HNSW_SQ",index_name="vector_index",metric_type="L2",支持COSINE、IP等params={"M": 64,每个节点的最大连接数"efConstruction": 100,构建索引时考虑的候选邻居数"sq_type": "SQ6",选择量化类型"refine": True,开启结果优化"refine_type": "SQ8"优化时用更高精度})创建索引client.create_index(collection_name="your_collection_name", index_params=index_params)

这里的几个参数可以根据业务需求调整:M 越大,索引精度越高,但构建和检索的耗时也会增加,一般建议在5-100之间;efConstruction 越大,构建出的索引质量越好,但耗时更长,推荐范围是50-500。

第二步:基于HNSW_SQ索引进行搜索

索引建好后,就可以发起相似性搜索了,关键是配置好搜索参数。

配置搜索参数search_params = {"params": {"ef": 10,搜索时遍历的节点数,影响精度和速度"refine_k": 1优化阶段的候选放大系数}}发起搜索res = client.search(collection_name="your_collection_name",anns_field="your_vector_field_name",data=[[0.1, 0.2, 0.3, 0.4, 0.5]],你的查询向量limit=3,返回Top3相似结果search_params=search_params)查看结果print(res)

搜索参数里的 ef 很关键,它决定了搜索时的遍历广度,数值越大精度越高,但速度越慢,一般建议设置在K到10K之间,K就是你要返回的结果数。

总的来说,HNSW_SQ就是这样一个能灵活平衡速度-内存-精度的向量索引方案。

你可以根据业务需求,通过调整量化类型、索引参数和搜索参数,找到最适合自己的那组配置。

无论是大规模数据集的快速检索,还是资源紧张场景下的内存优化,它都能轻松应对。

阅读推荐 Spark做ETL,与Ray/Daft做特征工程的区别在哪里,如何选型? 教程:如何用飞书+Moltbot,打造你的MilvusAI小助手 RAG优化不抓瞎!Milvus检索可视化,帮你快速定位嵌入、切块、索引哪有问题 Milvus+印度最大电商平台,如何打造服务两亿月活用户的商品比价系统 都有混合检索与智能路由了,谁还在给RAG赛博哭坟?

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 18:03:29

导师严选8个降AIGC平台 千笔AI解决AI率过高难题

AI降重工具:让论文更自然,让学术更安心 在当前的学术环境中,越来越多的高校和导师开始重视论文的原创性与人工痕迹。尤其是随着AIGC(人工智能生成内容)技术的广泛应用,许多学生发现自己的论文被系统标记为…

作者头像 李华
网站建设 2026/6/19 22:39:11

互联网医院如何通过JS实现电子病历截图到网页的自动命名?

江西铁路行业集团公司项目需求解决方案 项目背景 作为江西铁路行业集团公司的项目负责人,我近期负责一个企业网站后台管理系统的升级项目。项目新增需求包括在文章发布模块中增加Word粘贴功能、Word文档导入功能以及微信公众号内容粘贴功能。这些功能需要通过在We…

作者头像 李华
网站建设 2026/6/15 17:05:14

开题报告 springboot和vue易物小屋网站的设计与实现

目录项目背景与意义技术选型核心功能模块系统架构设计创新点与难点预期成果项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作项目背景与意义 随着共享经济和环保理念的普及,以物易物的需求逐渐增…

作者头像 李华
网站建设 2026/6/15 16:23:17

BeautifulSoup爬虫教程:网页数据提取基础与安装配置

对于想要从网页提取数据的开发者来说,BeautifulSoup是一个简单高效的Python库。它能够将复杂的HTML文档转换为树形结构,让我们用简洁的语法定位和提取所需内容。掌握它的核心用法,可以快速搭建起数据采集的基础框架。 BeautifulSoup如何安装配…

作者头像 李华
网站建设 2026/6/19 12:02:22

开题报告 springboot和vue小区物业管理系统 文献综述

目录 开题报告文献综述:SpringBoot与Vue的小区物业管理系统技术背景与现状相关研究与应用案例技术难点与创新方向 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 开题报告文献综述&#xff1a…

作者头像 李华
网站建设 2026/6/10 18:41:00

2007-2024年上市公司高管绿色认知数据

数据简介 高管绿色认知是指企业高层管理人员对环境保护和可持续发展的认识和行动。本数据借鉴李亚兵等(2022)针对高管环保认知的衡量手段,运用文本分析法对上市公司年报展开剖析。从绿色竞争优势意识、企业社会责任意识、外部环境压力认知这…

作者头像 李华