Retrieval · 面试核心

向量数据库与 ANN 检索

Embedding 把文本变成向量后,问题变成「在千万向量里找最近邻」。暴力比对太慢,于是有了向量库与近似最近邻(ANN)。面试常问:HNSW 是什么?召回率和延迟怎么权衡?选哪个库?

01为什么需要向量数据库

文本/图像经 Embedding 后变成高维向量。语义检索 = 找「与查询向量最相似的 Top-K 个」。当库里有百万/十亿级向量时,逐一计算余弦相似度(O(N·d))不可接受,需要专用索引结构来加速且可扩展地检索。

向量库不是普通数据库加一列向量,而是围绕「相似度检索」优化的索引 + 存储 + 过滤 + 扩展性系统。

02精确 vs 近似(ANN)

精确最近邻 (Exact / KNN)

结果 100% 正确,但慢,只适合小数据。

近似最近邻 (ANN)

用少量精度换大幅加速,召回率 90%+ 即可,工业默认。

实际系统几乎都用 ANN:宁可漏掉个别最相似项,也要把毫秒级延迟和海量规模跑出来。

03主流索引算法

IVF(倒排)

先聚类分桶,查询只搜最近的几个桶,缩小范围。快但依赖聚类质量。

PQ(乘积量化)

把高维向量切成多段分别压缩,用近似距离代替全量计算,省内存。

HNSW(分层可导航小世界)

用多层图做「高速公路式」导航,查询沿边快速逼近近邻。最常用。

LSH(局部敏感哈希)

相似向量高概率落入同桶,靠哈希快速粗筛。实现简单但精度一般。

04HNSW 直觉图解

上层:稀疏「高速公路」,几步跨越大范围 下层:稠密局部连接,精细定位邻居 查询 ★

查询从最上层稀疏层进入,靠长边快速「空降」到目标附近,再下钻到稠密层精确定位。类似「先坐高铁到城市,再走路到门口」。内存换速度,召回率高、延迟低。

05与 RAG 的关系

向量库是 RAG 的检索底座:文档切块 → Embedding → 入库;用户提问 → 向量化 → ANN 检索 Top-K → 拼进 prompt。RAG 效果好不好,一半取决于向量检索质量(召回率、重排)。详见 rag 目录。

实战坑:相似度 0.9 也可能召回错文档(语义歧义、切块边界、元数据过滤缺失)。这不是向量库 bug,而是「检索链路」问题——需配合重排(rerank)与混合检索。

06选型对比

FAISS

Meta 开源库,索引算法全、轻量,常作为其他系统的内核;偏「库」非「服务」。

Milvus / Qdrant

生产级向量数据库,分布式、可扩展、带过滤与运维,适合大规模。

Chroma / pgvector

轻量/嵌入式,Chroma 适合原型;pgvector 让 Postgres 直接存向量,复用现有栈。

选型看:规模(百万 vs 十亿)、是否要分布式、是否要元数据过滤、团队运维能力。

07面试速记卡

为什么

Embedding 后要做「最近邻检索」,暴力比对不可扩展。

ANN

用精度换速度,工业默认;关注召回率/延迟/内存。

HNSW

分层图:上层高速导航、下层精确定位,最常用。

与 RAG

向量库是 RAG 检索底座,质量靠召回+重排保障。

关联:Embedding 原理见 embedding 目录;RAG 检索质量与评估见 rag 目录。