Skip to content

第 2 课:向量数据库到底在解决什么问题

RAG 课程 · 02 |目标:说清 ANN 的必要性|用时:20 分钟

从“向量是什么”走到“为什么不能每次都和全部数据逐个比较”。

核心直觉

Embedding 把“语义相近”变成“空间位置相近”。向量数据库要做的,是在这个空间里快速找到离查询最近的点。

从文本到点

假设 embedding 模型把每段文本映射成一个 d 维向量:

text
“如何申请年假?”  →  [0.12, -0.31, 0.44, ...]
“年假审批流程”    →  [0.10, -0.28, 0.47, ...]

向量的每一维不必被人直接解释;它们共同构成一个可比较的表示。常见距离包括 cosine similarity、dot product 和 Euclidean distance。具体使用哪一种,必须和 embedding 模型的训练与归一化约定一致。

精确搜索为什么不够

最直接的办法是把查询向量与 N 个向量逐个计算距离,再取最小的 k 个。这是 exact nearest neighbor,结果准确,但查询成本会随 N 增长。

当库里有百万甚至十亿条向量时,系统通常采用 ANN(Approximate Nearest Neighbor):允许极少量候选不是全局最优,以换取更低的延迟和更可控的资源消耗。这里的关键不是“近似一定更好”,而是用可接受的召回损失换取吞吐和延迟。

向量搜索的决策链

  1. **表示:**选择 embedding 和维度。
  2. **度量:**选择 cosine、dot 或 L2。
  3. **索引:**选择 FLAT、IVF、HNSW 等。
  4. **搜索:**返回 top-k 候选。

索引取舍怎么想

  • **FLAT:**接近精确搜索,适合小数据集或作为评测基线。
  • **HNSW:**通过多层图导航减少搜索路径,通常以更多内存换较好的查询表现。
  • **IVF:**先把空间分成若干簇,只搜索部分簇;探查的簇越多,通常召回越高但延迟也越高。

工程上不要凭产品默认值判断索引好坏。固定一批查询,比较同一数据集下的 Recall@k、p95 延迟、内存和写入/更新成本,再选参数。

自测

练习 1:ANN 相比 exact search 的主要交换是什么?

A. 增加维度

B. 减少语义

C. 牺牲精度

D. 删除元数据

答案:C。ANN 以可控的近似误差换取更低延迟和更好的规模表现。

练习 2:评估 ANN 索引时,哪组数据最有用?

A. 颜色字号

B. 文档总数

C. 模型名称

D. 召回延迟

答案:D。实际评估应同时观察 Recall@k、p95 延迟、内存和更新成本;四个选项中“召回延迟”最接近有效工程指标。

把判断写下来

假设你有 5000 条内部文档、查询量很低、结果必须尽量准确。你会先选 FLAT 还是 HNSW?请用“数据规模 + 目标指标 + 资源约束”写出三句话理由。

完成后把答案和第 1 课的请求链一起发给我。下一课将把这些原理落到 chunking、embedding 和 metadata 数据建模上。

主读材料

HNSW 原始论文。重点看摘要和图搜索直觉;想进一步比较索引,再看 Milvus 官方索引说明

上一步与速查

有任何不清楚的地方,直接向老师提问。