真实面经题目 · 原创解析
向量检索中 IVF_FLAT 和 HNSW 有什么区别,如何按召回率、延迟和内存选型?
这题考向量检索索引选型,回答重点是 IVF_FLAT 的聚类倒排思想、HNSW 的近邻图搜索思想,以及召回、延迟、内存、构建和更新成本的权衡。
IVF_FLAT 和 HNSW 都是近似向量检索方案,但思路不同。IVF_FLAT 先把向量聚成多个 coarse cluster,查询时先找最近的若干聚类中心,再只在这些倒排桶里的原始向量上做精确距离计算;它的召回主要受聚类数量和 nprobe 影响,nprobe 越大召回越高但延迟越高,内存相对可控,适合数据量大、可批量构建、希望用参数平衡召回和成本的场景。HNSW 构建多层小世界近邻图,查询从高层粗搜索逐步下沉到低层细搜索;它通常查询延迟低、召回好,但图边带来额外内存,构建成本较高,更新和删除也需要谨慎维护。选型时看数据规模、维度、召回要求、P95 延迟、内存预算、更新频率和部署形态。面试里不要说某个绝对更好,而要给出调参和评测方法。
向量库要在大量 embedding 中找近邻。全量暴力搜索召回高但成本随库大小线性增长,IVF_FLAT 和 HNSW 都是在召回率、延迟、内存和构建成本之间做近似检索取舍。
IVF_FLAT 会先训练聚类中心,把向量分配到倒排桶。查询时先找最近的若干中心,再扫描这些桶里的原始向量。因为桶内仍用原始向量算距离,所以 FLAT 指的是不做额外压缩;召回取决于聚类质量和扫描桶数量。
HNSW 把向量组织成多层图,高层用于快速跳转,低层用于细粒度邻居搜索。查询从入口点开始贪心扩展,逐层缩小范围。它的优势是搜索路径短、召回和延迟表现通常较好,但需要额外图边内存。
IVF_FLAT 主要看 nlist 和 nprobe:桶多可以缩小扫描范围,但训练和空桶问题更明显;nprobe 大召回高但更慢。HNSW 主要看 M、efConstruction 和 efSearch:边更多和候选更大通常召回更好,但构建、内存和查询成本上升。
IVF_FLAT 的批量构建和批量追加相对直观,但聚类中心可能因数据分布变化而需要重训;HNSW 支持增量插入,但删除、图质量退化和内存占用要重点评估。高频更新场景不能只看静态 benchmark。
最终要在真实 query、真实库规模和真实硬件上测 recall@K、P50/P95/P99 延迟、QPS、内存、构建时间、更新开销和失败样本。RAG 场景还要看最终答案质量,而不是只看向量层指标。
因为倒排桶内保留原始向量并做距离计算,没有像 PQ 那样进一步压缩编码。近似主要来自只扫描部分桶。
除了原始向量,还要存图结构和邻居边。M 越大,图连接越丰富,召回可能更好,但内存也更高。
IVF_FLAT 通常增大 nprobe 或重新评估 nlist 和聚类质量;HNSW 通常增大 efSearch,并检查 M 和构建质量。
不够。还要看 rerank、chunk 质量、权限过滤、新鲜度和答案是否使用正确证据。向量召回只是端到端链路的一环。