当前位置: 首页 > news >正文

RAG 场景中常用的向量索引

如下向量索引,既包含 Milvus 支持的主流算法,也覆盖其他工具(如 FAISS、ANNOY)的常用类型
同时明确每种索引的适用场景,方便结合 RAG 数据量、延迟需求选择:

索引分类

基于图的索引

HNSW、FANNG

基于树的索引

ANNOY、VP-tree

基于哈希的索引

LSH、QALH、ScaNN

基于量化的索引

PQ、IVF-PQ

基于聚类的索引

k-means、GMM

纯向量检索索引(RAG 最基础、最常用)

这类索引仅基于「向量相似度」检索,是 RAG 检索的核心基础,适配不同数据量和延迟要求
在这里插入图片描述

混合检索索引(向量 + 元数据,提升 RAG 精度)

这类索引是「纯向量索引 + 元数据过滤能力」的结合,完美适配你提到的 “按文档来源、章节等过滤” 场景
是 RAG 中提升检索精准度的关键:
在这里插入图片描述

多模态兼容索引(支持文本 / 图像 / 音频向量)

这类索引本身不限制向量来源,仅要求向量维度统一,适配你提到的 “多模态 RAG” 场景(如上传图片查文档、音频检索相关文本):
在这里插入图片描述

RAG 索引选择优先级(按场景快速决策)

小团队 / 个人 RAG(数据量 < 500 万):优先选「ANNOY 树索引」(轻量易部署)或「IVF_FLAT」(精度高)
企业级 RAG(数据量 100 万~10 亿):优先选「HNSW」(低延迟)或「IVF_PQ」(超大规模),搭配 Milvus 实现混合检索
多模态 RAG(文本 + 图像 / 音频):选「HNSW」或「IVF_PQ」(Milvus 原生支持多模态向量混合存储)
需关键词 + 语义混合检索:选「Elasticsearch 向量索引」或「Milvus 混合索引 + 关键词元数据过滤」

核心总结

RAG 中最常用的向量索引集中在「IVF 系列(IVF_FLAT/IVF_PQ)、HNSW、ANNOY 树索引」—— 前两者是企业级 RAG 的主流选择(适配大规模、低延迟、混合检索),后者是入门级首选(轻量易部署)。
如果需要支持多模态或精准过滤,优先用 Milvus 搭载 HNSW/IVF_PQ 索引,直接实现 “向量相似度 + 元数据过滤 + 多模态兼容” 的全需求。

IVF - 基础框架

全称:Inverted File(倒排文件索引)
命名逻辑:借鉴搜索引擎 “倒排索引” 思想,将向量空间划分为多个「聚类簇(Cluster)」,每个簇对应一个 “倒排列表”(存储该簇内的所有向量);检索时先定位目标向量所属的簇,再仅在簇内搜索(而非全量遍历),大幅提升检索速度
作用:作为 “分桶策略”,减少检索时的向量比对次数,是两者的性能基础

IVF-FLAT:全量存储的精准索引

IVF-Flat = Inverted File + Flat
Inverted File:倒排文件索引(分桶策略)
Flat:直译 “扁平”,实际指「Flat Storage(全量原始存储)」

“Flat” 描述了向量的存储方式:每个簇(倒排列表)内的向量 完全保留原始数据,不做任何压缩或量化,因此检索时能直接计算原始向量的精确距离(如欧氏距离、余弦相似度)

核心特点
优点:检索精度最高(无信息损失),实现简单
缺点:存储成本高(原始向量占用空间大)、簇内检索仍需遍历所有向量(大数据量下速度一般)
适用场景:中小规模向量数据集(百万级以内),对精度要求极高、对存储 / 速度要求适中的场景

IVF-PQ:压缩存储的高速索引

IVF-PQ = Inverted File + Product Quantization
Quantization ˌkwɒntɪˈzeɪʃən [量子] 量子化;分层;数字化

Inverted File:倒排文件索引(分桶策略,与 IVF-FLAT 一致)
Product Quantization:乘积量化(一种向量压缩技术)

“PQ” 是核心优化点:在 IVF 分桶的基础上,对每个簇内的向量执行「乘积量化」
将高维向量拆解为多个低维子向量,每个子向量用少量比特(如 8bit)量化编码,最终用 “量化码本+编码值” 替代原始向量存储

核心特点
优点:存储成本极低(量化后向量体积仅为原始的 1/8~1/32)、检索速度极快(比对的是量化后的编码,而非原始向量)
缺点:存在轻微精度损失(量化过程会丢失部分细节),需调优量化参数(如子向量数量、量化比特数)平衡精度与速度
适用场景:大规模 / 超大规模向量数据集(千万级~亿级),对存储和检索速度要求高、可接受轻微精度损失的场景(如推荐系统、图像检索)

IVF-PQ 示例

IVF-PQ 中 “高维向量拆解为低维子向量” 的核心逻辑是 “分而治之”:
把一个超长的高维向量,按维度顺序切成多个长度相同的 “短向量(子向量)”,再对每个子向量单独做量化压缩

先明确前提(简化场景)
假设要处理的是 16 维的高维向量(实际应用中向量维度可能是 128、256、768 等,这里选 16 维方便计算)

PQ 的拆解规则是:
高维向量维度:D = 16(总维度)
拆解后的子向量个数:M = 4(分成 4 个)
每个子向量的维度:d = D/M = 4(每个子向量 4 维)

步骤 1:原始高维向量(16 维)

假设有一个 16 维的原始向量:

原始向量 V = [1.2, 3.5, 2.1, 4.3,  0.8, 1.9, 3.2, 2.7,  5.1, 4.8, 3.6, 2.4,  1.5, 0.9, 4.2, 3.3]

可以看到它是一个 “长串” 的 16 个数值,直接存储或计算相似度(如欧氏距离)的成本很高

步骤 2:按维度顺序拆解为 4 个低维子向量(每个 4 维)

PQ 会 按维度索引顺序切割(不是随机拆分,确保子向量的维度连续性),把 16 维向量拆成 4 个 4 维子向量:

子向量 V₁(第 1-4 维):[1.2, 3.5, 2.1, 4.3]
子向量 V₂(第 5-8 维):[0.8, 1.9, 3.2, 2.7]
子向量 V₃(第 9-12 维):[5.1, 4.8, 3.6, 2.4]
子向量 V₄(第 13-16 维):[1.5, 0.9, 4.2, 3.3]

拆解后效果:

原始向量 V = [V₁的4维] + [V₂的4维] + [V₃的4维] + [V₄的4维]

子向量维度必须相同(这里都是 4 维),所以总维度 D 必须能被 M 整除(16÷4=4,若不能整除会补零或调整 M)
拆分仅按 “维度顺序”,不改变向量的数值(拆解过程无信息损失)

步骤 3:对每个子向量单独做量化(压缩核心)

拆解后,PQ 会为每个子向量训练一个 “码本(Codebook)”,把低维子向量映射成一个 “短编码”(比如 8bit,即 1 个字节)

3.1 先理解 “码本”(以子向量 V₁ 为例)

假设为 4 维子向量训练的码本有 K=256 个 “码向量”(8bit 编码对应 2⁸=256 个可能值)
码本是通过聚类算法(如 K-Means)从大量样本向量中学习得到的,比如:

码本 C₁(对应子向量 V₁ 的4维码本):
C₁[0] = [1.1, 3.4, 2.0, 4.2]  → 编码 0
C₁[1] = [0.9, 3.6, 2.2, 4.4]  → 编码 1
...
C₁[56] = [1.2, 3.5, 2.1, 4.3] → 编码 56 (和 V₁ 几乎一致)
...
C₁[255] = [4.8, 2.3, 1.9, 3.1] → 编码 255

3.2 子向量量化(找最像的码向量)

对每个子向量,在对应的码本中找 “最相似的码向量”,用该码向量的 “编码” 替代原始子向量:
子向量 V₁ = [1.2, 3.5, 2.1, 4.3] → 与码本 C₁ 中 C₁[56] 最像 → 量化编码:56(8bit 存储)
子向量 V₂ = [0.8, 1.9, 3.2, 2.7] → 与码本 C₂ 中 C₂[123] 最像 → 量化编码:123(8bit 存储)
子向量 V₃ = [5.1, 4.8, 3.6, 2.4] → 与码本 C₃ 中 C₃[89] 最像 → 量化编码:89(8bit 存储)
子向量 V₄ = [1.5, 0.9, 4.2, 3.3] → 与码本 C₄ 中 C₄[210] 最像 → 量化编码:210(8bit 存储)

3.3 最终量化结果

原始 16 维向量(每个数值用 4 字节 float 存储,总大小 = 16×4=64 字节)
量化后变成 4 个 8bit 编码(总大小 = 4×1=4 字节),存储成本直接降到原来的 1/16
量化后的向量表示:[56, 123, 89, 210](每个数字是 8bit 编码,对应一个子向量的量化结果)

步骤 4:检索时的相似度计算(基于子向量编码)

检索时,目标向量也会按同样规则拆解、量化,然后:
对每个子向量的编码,计算 “码向量之间的距离”(比如欧氏距离);
把 4 个子向量的距离加权求和,得到最终的 “近似相似度”。
比如目标向量的量化编码是 [55, 124, 90, 211],则:
V₁编码 56 vs 目标 V₁编码 55 → 码向量距离 d₁
V₂编码 123 vs 目标 V₂编码 124 → 码向量距离 d₂
V₃编码 89 vs 目标 V₃编码 90 → 码向量距离 d₃
V₄编码 210 vs 目标 V₄编码 211 → 码向量距离 d₄
最终相似度 = w₁×d₁ + w₂×d₂ + w₃×d₃ + w₄×d₄(w 是权重,通常相等)

总结:拆解的核心目的

降低量化难度:
高维向量直接量化会丢失大量信息(精度暴跌),拆成低维子向量后,每个子向量的 “语义更集中”,量化时能保留更多有效信息

提升压缩比:
低维子向量可独立量化,每个子向量用少量比特编码,整体压缩比远高于直接量化高维向量

加速相似度计算:
比对 “短编码” 比比对 “原始高维向量” 快得多(比如 4 个字节 vs 64 个字节),结合 IVF 分桶,检索速度大幅提升

简记

IVF-PQ 的拆解就像把 “一整根长甘蔗(高维向量)” 切成 4 段短甘蔗(低维子向量),每段单独打包(量化)
既方便存储,又能快速对比 “每段的相似度”,最后汇总结果

http://www.dtcms.com/a/618540.html

相关文章:

  • 【论文阅读】Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond
  • LC144 二叉树的前序遍历
  • Map的遍历方式
  • 有没有找人做标书的网站建网站用自己的主机做服务器
  • Day18:二叉树part8(669.修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树)
  • 常见的简单的营销软件宁波seo哪家最便宜
  • 电力系统设备故障因果推理与深度学习驱动的根因分析优化
  • ElasticSearch详解(篇二)
  • 重庆网站建设怎么样来个手机能看的网站2021
  • 网站建设的财务分析wordpress阶梯插件
  • CSS Position(定位)
  • redis安装与部署
  • 做网站的毕业设计做网站用什么语言高效
  • 长春好的做网站公司排名软件推广公司
  • VSCode终极版
  • NFS服务器
  • MYSQL索引的底层数据结构
  • 进程等待
  • 【数学速通】初中高中数学完整内容体系总结
  • 哪个网站做推销产品oshin wordpress
  • 网站qq获取大连在哪个省
  • 高职图书馆网站建设大赛wordpress 图片 存储
  • jEasyUI 设置排序指南
  • IconCache文件
  • Linux进程读写管道的行为详解
  • 零基础学做网站视频上传网站如何做
  • 仿RabbitMQ实现消息队列(三)--muduo介绍与使用
  • 4-Linux驱动开发-字符设备驱动
  • 专业网站建设平台郑州房产网
  • 43 全选,单选