· 检索
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 条给模型。
索引解决「找得快」,重排解决「找得像」。两步都省,答案就会开始一本正经地跑偏。