一文搞懂什么是向量数据库:为什么RAG离不开它
版权声明
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
你问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)
主流向量数据库对比
RAG为什么必须用向量数据库
RAG(Retrieval-Augmented Generation)的检索阶段:
用户上传文档,切成chunk(比如每500字一段) 每段用Embedding模型变成向量 存入向量数据库 用户提问,问题变成向量 在向量数据库中检索,找到最相似的top-K段 把这些段落作为上下文给LLM生成答案
没有向量数据库,RAG只能做关键词匹配,效果差很多倍。
向量数据库的局限性
局限性一:对精确匹配不友好
"找包含'2024年Q3营收'的段落"——向量搜索找到的是语义相近的段落,不是精确包含这个字符串的段落。
解决方案:向量数据库+传统数据库混合使用,关键词过滤+向量检索。
局限性二:内存消耗大
每个向量1536维浮点数,100万条需要约6GB内存。大规模部署成本不低。
局限性三:更新代价高
向量数据库的索引一旦构建,修改需要重建索引。实时更新场景需要特殊设计。
向量数据库是AI时代的基础设施之一,理解它的原理,能帮你更好地理解RAG、语义搜索、AI文档问答这些应用的技术本质。
Python学习杂记
还在用多套工具管项目?
一个平台搞定产品、项目、质量与效能,告别整合之苦,实现全流程闭环。
白皮书上线