向量数据库基础:相似检索的引擎

传统数据库按关键字精确匹配,查「苹果手机壳」搜不到「iPhone 保护套」。向量数据库换了一条路:把内容变成高维向量,再按「语义距离」找最近的那一批。它是语义搜索、推荐与 RAG 的底层支撑。

嵌入:把含义压进一串数字

一切的起点是嵌入(Embedding)模型,它把一段文本或一张图映射成一个固定长度的向量,语义相近的内容在向量空间里也相近。同一句不同说法、同义替换,都会落在彼此靠近的位置,这才是「搜意思」而非「搜字面」的根本。

为什么不能暴力比对

假设有百万条向量,每次查询都和全量算一遍距离,开销太大。向量数据库用近似最近邻(ANN)索引来加速,比如基于图的 HNSW、基于量化的 IVF-PQ、基于树的 Annoy。它们在召回率与速度之间做权衡,用极小的精度损失换来数量级的提速。

# 典型写入与查询流程(伪代码)
index.upsert(id="doc1", vector=embed("如何用向量检索"))
hits = index.query(vector=embed("语义搜索怎么做"), top_k=5)
# hits 返回最相近的 5 条,按距离排序

相似度怎么度量

常用余弦相似度(关注方向)或内积、欧氏距离(关注绝对位置)。选择取决于嵌入模型的训练方式——很多模型默认用余弦更稳。还要注意归一化、维度一致与元数据过滤(先按时间、来源筛再算向量),这些细节直接决定召回质量。

小结

向量数据库把内容编码为向量并用近似最近邻索引做语义检索,是 RAG 与语义搜索的地基。理解嵌入、ANN 索引与相似度度量的取舍,才能在设计检索层时既快又准,避免召回跑偏或查询拖垮性能。

参考与延伸阅读

  • 各向量数据库官方文档(如 Milvus、Qdrant、Weaviate)对索引类型与相似度参数的说明。已核验。
  • 具体维度、距离函数与召回率权衡以你选用的库和嵌入模型为准。待核实。
本文累计阅读