dob
← 全部笔记

· 检索

Milvus 索引怎么选,以及 RAG 为什么还要重排

Milvus 从 FLAT 到 HNSW 怎么选,nlist / nprobe 是什么,RAG 为什么还要 Reranker。

索引,从慢到快

  • FLAT:暴力搜,精度 100%,数据一大就慢。小集合够用。
  • IVF_FLAT:K-means 分桶,只搜几个桶。
  • IVF_SQ8:IVF + 8bit 量化,省内存。
  • IVF_PQ:再乘积量化,更省,精度再掉一截。
  • ANNOY:树,适合低维。
  • HNSW:图索引,综合最好,快、准,吃内存。
  • GPU 索引:IVF_FLAT 的 GPU 版,超大集合才值得。

IVF 两个旋钮:

  • nlist:桶数。越多切得越细,召回高,建索引慢。常见 1024–16384。
  • nprobe:搜几个桶。越多越准越慢。常见 8–32。

距离怎么算

  • L2:欧氏距离,越小越近
  • IP:内积,越大越近,向量最好先归一化
  • COSINE:归一化后的内积,范围 [-1, 1]
  • HAMMING / JACCARD:给二进制或集合用

文本向量日常就 COSINE 或 L2。

RAG 三件套

**分块。**256–512 token 一块,重叠 50–100,防止一句话被切断。按段落切,好过死板按长度切。

**混合检索。**向量管语义,BM25 管关键词,取并集。专有名词、报错码、函数名,纯向量经常漏。

**重排。**Bi-Encoder 粗排快但不准;Cross-Encoder 精排慢但准。常用路径:向量先拿 50 条,Reranker 再压到 10 条给模型。

索引解决「找得快」,重排解决「找得像」。两步都省,答案就会开始一本正经地跑偏。