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

Amadeus的知识库 | RAG高效向量检索的秘密?—— 关于向量数据库你必须知道的!

一、引文

大家可能会好奇向量直接存普通数据库像MySQL这些不就可以了吗,为啥还折腾出个向量数据库,它跟普通数据库有什么区别吗?那本篇文章就将聚焦 RAG 实现高效向量检索的秘密,向量数据库来进行讲解,将包括它内部的索引算法,同时类比传统数据库阐释它里面的一些核心概念。

二、普通数据库的检索困境

如果说我们想要把向量化后的文档存储在诸如MySQL这种普通数据库里面,基于技术实现的角度那肯定是没问题的,把向量序列化成字符串存入MySQL的表中字段里,但是大家别忘了 RAG 的检索流程,它是把用户问题也向量化,然后拿到数据库里面去找跟它相似的向量,那问题就出在了找相似这个阶段,要知道照 MySQL 这种数据库的检索方式,你得遍历数据库里面所有的向量,每个都跟查询向量做余弦相似度计算,把最终结果排序取top-k个。每次查询都会进行IO操作,而且一旦用户量多起来,数据库里面向量多起来,这个检索过程是很长的,极度影响用户体验。

三、向量数据库高效检索的秘密

所以我们才要使用向量数据库来专门存储向量化后的文档数据,其中的重要原因就是向量数据库内部提供了向量检索的核心算法:近似最近邻搜索(ANN)。它的核心思想是,既然把数据库里面的数据都遍历一遍计算余弦相似度太慢了,那就只比较数据库中的一部分数据,取最相似的即可。ANN 它不保证找到数据库中最相似的那几个向量化文档,但是它能够保证在极短时间内尽可能找到非常接近最优解的结果。

一句话概括:向量数据库 = 向量存储 + ANN 索引 + 高效检索。它是专门为“在海量向量中快速找到最相似的那几个”这件事而设计的。这就是向量数据库与普通数据库最关键的区别所在。目前最主流的 ANN 算法有 IVF 和 HNSW两种,接下来我们会具体介绍它们的大致思想,便于你了解为什么 ANN 算法能够使得向量数据检索如此高效。

1.IVF —— 倒排文件索引

IVF 算法的全称叫 Inverted File Index(倒排文件索引),它的核心思想是先把向量数据库中的向量先进行分区,查询时只在最可能的几个区域里面进行查找。

第一步通常是利用 K-Means 这类的聚类算法把所有向量分成若干个簇,每个簇有各自的核心,代表该簇中所有向量的平均位置,然后拿查询向量先跟所有簇核心计算距离,只在距离最近的那几个簇里面找相似的向量化文档块。

2.HNSW —— 分层可导航小世界图

HNSW 的全称是 Hierarchical Navigable Small World Graph(分层可导航小世界图),简单来说,它的核心思想是:将“跳表”(Skip List)的分层思路,应用到了“图”(Graph)结构中。

(1) NSW (Navigable Small World) —— 航向小世界

在理解“分层”之前,先看什么是 NSW。

  • 小世界网络:想象一个社交圈,虽然全球有几十亿人,但你通过“朋友的朋友”通常只需要 6 个人就能联系上任何人。

  • 构图方式:在向量空间中,我们将每个向量看作一个点,并将每个点与其最近的几个邻居相连。

  • 搜索方式(贪心算法):

    • 从图中随机选一个点作为起始点。

    • 计算该点的所有邻居与目标点(Query)的距离。

    • 移动到离目标点最近的那个邻居。

    • 重复此过程,直到周围没有比当前点更近的邻居为止。

  • NSW 的缺点:当数据量达到亿级时,这种平面的图结构搜索效率会退化,容易陷入局部最优,或者需要跳跃很多次。

(2)Hierarchical (分层机制) —— 灵感来自跳表

HNSW 借鉴了跳表 (Skip List)的原理。跳表通过在顶层建立稀疏的索引,实现快速跨越。

HNSW 把图分成了很多层:

  • 第 0 层(最底层):包含所有的数据点。

  • 上层(Level 1, Level 2...):只包含部分数据点。越往上,点越稀疏。

  • 插入规则:当一个新点进入系统时,算法会通过概率计算给它分配一个“最高高度”。如果一个点被分配到第 2 层,那么它在第 0、1、2 层都会存在。

(3)HNSW 的搜索流程(从顶向下)

假设你要在百万级数据中找最相似的向量,过程就像坐飞机转地铁

  1. 顶层(快车道):从最高层的进入点(Entry Point)开始。由于点非常稀疏,你可以通过极少的几次跳转,迅速跨越巨大的物理距离,定位到目标点所在的“大致区域”。

  2. 逐层下沉:找到顶层最接近的点后,以此点为起始,进入下一层。

  3. 底层(慢车道/步行):每一层都比上一层更密集。你不断重复“贪心搜索”和“层级下沉”,直到到达第 0 层。

  4. 最终精搜:在第 0 层进行局部的精细搜索,找到最终的 K 个最近邻。

这种“先在大尺度找,再在小尺度细搜”的策略,将搜索复杂度从 O(N) 降到了 O(logN)。

(4)关键参数(性能调优)

在实际使用 HNSW 索引时,有三个核心参数决定了它的表现:

  • M (Max Connections):每个节点在每一层最多连接多少个邻居。

    • M 越大,召回率(准确度)越高,但内存消耗越大,索引构建也越慢。

  • efConstruction (Build Search Effort):在创建索引时,搜索邻居的范围。

    • 越大,索引质量越高,搜索更准,但建库时间会显著增加。

  • efSearch (Search Effort):在实际查询时,保留的候选列表大小。

    • 越大,查询越准,但响应时间(Latency)会变长。

(5)HNSW 的优缺点总结

优点:

  • 速度极快:在高维数据下表现极其出色,响应通常在毫秒级。

  • 高召回率:它是目前精度最高的近似搜索算法之一,非常接近暴力搜索的结果。

  • 支持增量更新:可以随时往索引里加新数据,不需要像某些算法(如 IVF)那样重新训练聚类中心。

缺点:

  • 内存消耗大:这是 HNSW 最大的痛点。因为它不仅要存原始向量,还要存复杂的图结构(指针、邻居关系)。相比于压缩算法(如 PQ),它需要的内存多出数倍。

  • 不支持内存映射:很难直接把索引存在磁盘上运行(速度会掉得非常厉害),通常必须全部加载进内存。

HNSW 是通过分层图结构,实现了一套从“粗略定位”到“精细搜索”的高效寻路算法,是目前对性能要求极高的 RAG 系统、推荐系统的首选索引。

四、向量数据库的核心概念类比

传统数据库 (RDBMS)向量数据库 (Vector DB)说明
数据库 (Database)数据库/命名空间 (Database/Namespace)顶层隔离容器,两者叫法基本一致。
表 (Table)集合 (Collection / Index / Class)存储数据的主体。Milvus 叫 Collection,Pinecone 叫 Index,Weaviate 叫 Class。
行 (Row / Record)实体 (Entity / Point / Document)单条数据记录。Milvus 叫 Entity,Qdrant 叫 Point。
列 (Column / Field)字段 (Field / Attribute / Metadata)向量数据库通常分为“向量字段”和“标量字段(元数据)”。
主键 (Primary Key)ID唯一标识符,向量数据库通常强制要求一个 ID。
索引 (Index / B-Tree)向量索引 (Vector Index / HNSW / IVF)传统索引用于精确查找;向量索引用于近似最近邻(ANN)查找。
SQL 查询相似度搜索 / 混合查询传统靠WHERE等值匹配;向量数据库靠distance(距离)计算相似度。

五、总结

我们通过这篇文章主要解析了向量数据库在RAG系统中的核心地位。针对传统数据库在相似度检索中全表扫描效率低下的痛点,向量数据库引入了近似最近邻搜索(ANN)算法,在保证高精度的同时极大提升了检索速度。

文章重点探讨了两大主流索引算法:IVF通过聚类分区缩小搜索范围,而HNSW则借鉴跳表思想构建分层图结构,实现从“快车道”到“慢车道”的快速寻路,是高性能检索的首选。此外,文中还对比了向量数据库与传统数据库在集合、实体及索引等核心概念上的差异。总之,向量数据库是专为海量向量高效检索而设计的关键基础设施。

http://www.jsqmd.com/news/594620/

相关文章:

  • 别再只会用na.omit删数据了!R语言缺失值处理保姆级教程:从均值填补到随机森林实战
  • STM32H723ZGT6上FreeRTOS移植实战:从源码获取到任务调通的保姆级避坑指南
  • UE5地牢生成实战:从零搭建程序化地下城(附完整蓝图逻辑)
  • 深入解析Kubernetes中的Custom Resource Definitions(CRD):构建云原生“自定义积木”的终极武器
  • 2026 年半导体行业展会哪个比较好?高价值半导体行业展会综合分析 - 品牌2026
  • SEO_网站结构优化对SEO排名的影响与操作要点
  • i2cdetect Arduino库:I²C设备扫描与硬件诊断实战指南
  • 免费域名会不会对网站SEO造成影响_免费域名对网站性能和访问速度有影响吗
  • SEO_如何通过内容SEO有效获取精准流量?(453 )
  • OpenClaw多模型切换指南:千问3.5-27B与Llama3混合调度
  • 保姆级教程:用Docker在Ubuntu上快速部署Valhalla路径规划服务(附日本关西OSM数据实战)
  • 双系统安装OpenClaw全攻略:Windows+Mac对接Qwen2.5-VL-7B图文模型
  • 一键迁移方案:OpenClaw配置备份与Qwen3-4B模型快速恢复
  • 网站SEO优化是否需要长期维护
  • OpenClaw批量处理:用SecGPT-14B同时分析百个可疑文件
  • STM32 HAL库中那些‘魔法数字’的秘密:以GPIO模式宏定义为例,看懂位域操作与寄存器配置
  • 保姆级教程:在Firefly RK3568开发板上搞定RTL8723蓝牙模块(附完整驱动编译与设备树修改)
  • Kafka消费者数据质量与治理:构建可信数据管道的最佳实践
  • 2026年口碑好的无损汽车隔音源头工厂推荐 - 品牌宣传支持者
  • MATLAB新手避坑指南:批量读取CSV时,90%的人都会遇到的编码和格式问题
  • 形式验证实战:5个降低状态空间复杂度的黑科技(附内存控制器案例)
  • 别再说AI懂你了!先搞清楚AI中的Context到底是什么(下篇)
  • 网站 SEO 优化报价有哪些影响因素
  • 量子密钥分发系统的工程实现(四):后处理流程与FPGA硬件加速剖析
  • OpenClaw镜像加速:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF模型分片加载与内存优化方案
  • 2026 年半导体行业展会有哪些?优质半导体行业展会信息汇总 - 品牌2026
  • OpenClaw云端体验指南:星图平台Qwen3-14B镜像+OpenClaw沙盒部署
  • 2026年杭州四门汽车隔音/全套汽车隔音厂家对比推荐 - 品牌宣传支持者
  • 2026-04-06:字典序最小和为目标值且绝对值是排列的数组。用go语言,给你一个正整数 n 和一个整数 target。 你需要构造一个长度为 n 的整数数组,要求同时满足: 1.数组中所有元素的总
  • 告别‘看片难’:用HiFuse网络实战医学影像分类,从CT到病理图都能搞定