60 秒回答模板

IVF_FLAT 和 HNSW 都是近似向量检索方案,但思路不同。IVF_FLAT 先把向量聚成多个 coarse cluster,查询时先找最近的若干聚类中心,再只在这些倒排桶里的原始向量上做精确距离计算;它的召回主要受聚类数量和 nprobe 影响,nprobe 越大召回越高但延迟越高,内存相对可控,适合数据量大、可批量构建、希望用参数平衡召回和成本的场景。HNSW 构建多层小世界近邻图,查询从高层粗搜索逐步下沉到低层细搜索;它通常查询延迟低、召回好,但图边带来额外内存,构建成本较高,更新和删除也需要谨慎维护。选型时看数据规模、维度、召回要求、P95 延迟、内存预算、更新频率和部署形态。面试里不要说某个绝对更好,而要给出调参和评测方法。

考点 结构不同
难度 真实面经题
回答目标 讲清机制、训练与评估取舍

深入解析

01

先说明共同目标

向量库要在大量 embedding 中找近邻。全量暴力搜索召回高但成本随库大小线性增长,IVF_FLAT 和 HNSW 都是在召回率、延迟、内存和构建成本之间做近似检索取舍。

02

IVF_FLAT 是聚类加桶内扫描

IVF_FLAT 会先训练聚类中心,把向量分配到倒排桶。查询时先找最近的若干中心,再扫描这些桶里的原始向量。因为桶内仍用原始向量算距离,所以 FLAT 指的是不做额外压缩;召回取决于聚类质量和扫描桶数量。

03

HNSW 是分层近邻图

HNSW 把向量组织成多层图,高层用于快速跳转,低层用于细粒度邻居搜索。查询从入口点开始贪心扩展,逐层缩小范围。它的优势是搜索路径短、召回和延迟表现通常较好,但需要额外图边内存。

04

关键调参影响召回延迟

IVF_FLAT 主要看 nlist 和 nprobe:桶多可以缩小扫描范围,但训练和空桶问题更明显;nprobe 大召回高但更慢。HNSW 主要看 M、efConstruction 和 efSearch:边更多和候选更大通常召回更好,但构建、内存和查询成本上升。

05

更新和资源成本不同

IVF_FLAT 的批量构建和批量追加相对直观,但聚类中心可能因数据分布变化而需要重训;HNSW 支持增量插入,但删除、图质量退化和内存占用要重点评估。高频更新场景不能只看静态 benchmark。

06

选型要用业务数据评测

最终要在真实 query、真实库规模和真实硬件上测 recall@K、P50/P95/P99 延迟、QPS、内存、构建时间、更新开销和失败样本。RAG 场景还要看最终答案质量,而不是只看向量层指标。

易错点

  • 只说 HNSW 更快或 IVF 更省内存,没有解释结构原因。
  • 把 IVF_FLAT 和 IVF_PQ 混淆,误以为 FLAT 已经做了向量压缩。
  • 只看平均延迟,不看 P95/P99、内存和构建更新时间。
  • 忽略数据分布变化对 IVF 聚类中心和 HNSW 图质量的影响。
  • 不用真实 query 评测,直接拿通用 benchmark 下结论。

面试官追问

IVF_FLAT 为什么叫 FLAT?

因为倒排桶内保留原始向量并做距离计算,没有像 PQ 那样进一步压缩编码。近似主要来自只扫描部分桶。

HNSW 为什么内存更高?

除了原始向量,还要存图结构和邻居边。M 越大,图连接越丰富,召回可能更好,但内存也更高。

召回不够时先调什么?

IVF_FLAT 通常增大 nprobe 或重新评估 nlist 和聚类质量;HNSW 通常增大 efSearch,并检查 M 和构建质量。

RAG 里向量召回高就够了吗?

不够。还要看 rerank、chunk 质量、权限过滤、新鲜度和答案是否使用正确证据。向量召回只是端到端链路的一环。