首页/AI/RAG 与向量库速查/IVF 倒排索引(nlist / nprobe)
本包目录(229 条)
架构与流程30 条解析与切分33 条
Embedding 与检索50 条
向量数据库49 条重排与生成32 条评估与优化35 条

IVF 倒排索引(nlist / nprobe)

IVF 先用 k-means 把向量空间划成 nlist 个聚类,查询时只扫描最近的 nprobe 个聚类:用少量召回损失换明显延迟下降,适合百万级以上的数据集。

RAG 与向量库速查AI更新于 2026-10-12
nlist聚类数,常见做法取 sqrt(N) 附近量级
nprobe查询扫描的聚类数,常用 1~128 之间调
训练先 train 再 add,训练集规模需大于聚类数

FAISS IVF 最小示例

FAISS IVF 最小示例
import faiss, numpy as np

d = 768; nlist = 256
quantizer = faiss.IndexFlatL2(d)
index = faiss.IndexIVFFlat(quantizer, d, nlist)
train_xb = np.random.rand(100000, d).astype("float32")
index.train(train_xb)
index.add(np.random.rand(500000, d).astype("float32"))
index.nprobe = 16
D, I = index.search(np.random.rand(1, d).astype("float32"), 10)
未调用 train 就 add 会报错;训练样本过少时聚类质心偏差大,召回显著变差。

易错点

  • nprobe 太小导致查询聚类不含目标向量,召回骤降且无报错提示
  • 聚类数远超数据量时大量空簇被白白训练,索引质量反而下降

数据来源与参考

  • FAISS wiki(Guidelines to choose an index / IVF)
  • Milvus 官方文档(IVF_FLAT)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌