一文搞懂什么是向量数据库:为什么RAG离不开它

向量 数据库 搜索 AI 文档
发布于 2026-06-09
1

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

扫码阅读
手机扫码阅读

你问AI:"我昨天上传的合同里,甲方是谁来着?"

AI能准确回答。背后的技术流程是:先把合同切成段落,每段变成一串数字(向量),存进向量数据库。你提问时,问题也变成向量,在数据库里找到最相似的段落,把这个段落作为上下文给AI,AI才能准确回答。

没有向量数据库,AI就"看不懂"你的文档。

从关键词搜索到语义搜索

关键词搜索:找包含特定词的结果。

"合同 甲方"→返回包含"合同"和"甲方"的文档。

配图

问题:你说"协议签约方",AI不知道找包含"合同"和"甲方"的文档。

语义搜索:找意思相近的结果。

"协议签约方"→返回意思和这个查询相近的文档,不管文档里有没有出现"合同"和"甲方"。

这就是向量数据库的核心价值:让机器理解语义,而不只是匹配文字。

向量是什么

向量是一串数字。

"苹果"的向量可能是:[0.72, -0.31, 0.15, -0.28, 0.83, ...](1536维)

语义相近的词,向量也相近:

  • "苹果"和"香蕉"距离近
  • "苹果"和"手机"距离中等
  • "苹果"和"铁路"距离远

这些数字不是人定的,是AI从海量文本中学习出来的。训练的目标就是让语义相近的词,在向量空间里距离近。

配图

向量数据库的检索原理

用户提问变成向量后,在数据库里找"最近的邻居"。

"最近的"用什么衡量?三种常用方法:

余弦相似度:两个向量夹角的cos值,越接近1越相似 点积:对应位相乘后求和,越大越相似 欧氏距离:直线距离,越小越接近

import numpy as np  def cosine_similarity(a, b):  return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))  query = np.array([0.72, -0.31, 0.15, -0.28, 0.83]) doc1 = np.array([0.70, -0.30, 0.14, -0.27, 0.81]) doc2 = np.array([0.10, 0.20, -0.50, 0.30, -0.10])  print(cosine_similarity(query, doc1))  # 约 0.999 (非常相似) print(cosine_similarity(query, doc2))  # 约 -0.15 (不相似)

向量数据库的底层实现

暴力检索:100万条向量,逐个计算相似度选出top-K。准确但慢,O(n)。

HNSW(分层可导航小世界图):目前最主流的近似最近邻算法。

核心思想:构建一个多层图,上层边长、下层边短。搜索时从上往下,快速定位到目标区域。

HNSW的优势:查询速度极快(对数级别),精度高,内存占用相对可控。

配图
import faiss  dimension = 1536  # 向量维度 n_records = 1000000  # 向量数量  index = faiss.IndexHNSWFlat(dimension, 32)  # 32是HNSW的m参数,控制每层连接数 index.hnsw.efConstruction = 200  # 索引构建时的搜索深度,越高质量越好越慢  index.add(np.random.rand(n_records, dimension).astype('float32'))  query = np.random.rand(1, dimension).astype('float32') distances, indices = index.search(query, k=5)

主流向量数据库对比

数据库
底层算法
适用场景
特点
Milvus
HNSW/IVF
大规模生产环境
性能强,支持混合搜索
Pinecone
自研
快速上线
全托管,零运维
Chroma
HNSW
调研/POC
轻量,本地可用
Qdrant
HNSW
自建
Rust实现,性能高
Weaviate
HNSW
搜索类应用
支持混合关键词+向量搜索

RAG为什么必须用向量数据库

RAG(Retrieval-Augmented Generation)的检索阶段:

  1. 用户上传文档,切成chunk(比如每500字一段)
  2. 每段用Embedding模型变成向量
  3. 存入向量数据库
  4. 用户提问,问题变成向量
  5. 在向量数据库中检索,找到最相似的top-K段
  6. 把这些段落作为上下文给LLM生成答案

没有向量数据库,RAG只能做关键词匹配,效果差很多倍。

向量数据库的局限性

局限性一:对精确匹配不友好

"找包含'2024年Q3营收'的段落"——向量搜索找到的是语义相近的段落,不是精确包含这个字符串的段落。

解决方案:向量数据库+传统数据库混合使用,关键词过滤+向量检索。

局限性二:内存消耗大

每个向量1536维浮点数,100万条需要约6GB内存。大规模部署成本不低。

局限性三:更新代价高

向量数据库的索引一旦构建,修改需要重建索引。实时更新场景需要特殊设计。

向量数据库是AI时代的基础设施之一,理解它的原理,能帮你更好地理解RAG、语义搜索、AI文档问答这些应用的技术本质。

Python学习杂记

探索运筹优化、机器学习、AI 和数据可视化的奥秘及其落地应用

280 篇文章
浏览 353.8K

还在用多套工具管项目?

一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。

加入社区微信群
与行业大咖零距离交流学习
PMO实践白皮书
白皮书上线