索引是 RAG 系统的“地基”,决定了检索阶段能多快、多准地找到相关知识。选型不当或参数配置随意,后续再怎么优化提示词和模型都难以弥补检索的先天不足。本节从实用角度出发,介绍主流索引算法的适用场景、选型依据以及关键参数的调优思路。
1. 主流索引算法及其适用场景
目前 RAG 场景中广泛使用的索引方案主要分为三类:
| 类型 | 代表算法/工具 | 核心原理 | 典型适用场景 |
|------|--------------|----------|-------------|
| 稠密向量检索 | Faiss、Milvus、Pinecone 等,配合 text-embedding 模型 | 将文本转为高维向量,通过余弦相似度或欧氏距离衡量语义相似性 | 语义模糊查询、跨语言检索、长文本匹配 |
| 稀疏向量检索 | BM25(Elasticsearch 内置)、SPLADE | 基于词频和逆文档频率统计关键词重叠度 | 精确术语匹配、专有名词、编号、代码片段查询 |
| 混合检索 | Weaviate、Qdrant 等支持稠密+稀疏混合评分 | 同时计算语义相似度和关键词匹配分,加权融合排序 | 绝大多数企业知识库场景,兼顾语义与精确匹配 |
选型建议:
- 纯稠密检索适用于知识库内容以自然语言描述为主、用户提问口语化的场景(如客服 FAQ、内部政策问答)。
- 纯稀疏检索适用于大量专有名词、产品型号、法律条款编号等需要精确命中的场景。
- 混合检索是多数生产环境的稳妥选择——它不要求二选一,而是让两者互补。当用户问“X200 笔记本的保修政策”时,BM25 能精准命中“X200”这个型号词,稠密检索则能理解“保修政策”与“售后服务”“质保期限”等变体表达。
2. 嵌入模型(Embedding Model)选型
稠密检索的效果高度依赖嵌入模型的质量。选型时重点考察三个维度:
- 领域匹配度:通用模型(如 text-embedding-3-small、bge-large-zh)对日常文本效果不错,但如果知识库充满专业术语(医药、法律、金融),优先考虑在对应领域微调过的嵌入模型,或用领域语料自行微调。
- 语言支持:中文场景推荐使用专为中文优化的模型(如 bge-large-zh、m3e-base、stella-base-zh),避免中英文混合检索时的偏移。
- 维度与速度的权衡:高维度(1024 或更高)通常表达力更强,但计算和存储成本更高。对于百万级以内的文档量,768 维模型通常提供了良好的性价比。
实用建议:如果不确定哪种嵌入模型最好,构建一个小型测试集(比如 50 个真实问题 + 人工标注的相关文档),用不同模型建索引后评测召回率(Recall@k),选择在 k=5 或 k=10 时召回率最高的模型即可。
3. 关键分块参数与索引参数调优
分块大小(Chunk Size)
这是索引阶段影响最大的参数。分块太大,检索精准度下降,无关信息增多;分块太小,关键上下文可能被切断。
- 经验起点:中文文本通常从 256~512 token 开始试验,英文从 256~1024 token。
- 内容特征参考:知识库若以短问答对为主,可用较小分块(128~256);若是长文档、手册,可适当增大(512~1024),并配合重叠窗口保证上下文连贯。
- 重叠窗口(Overlap):一般设为分块大小的 10%~20%。例如 500 token 的块,重叠 50~100 token,可减少因切口恰好切断关键句导致的漏检。
top-k 值(检索召回数量)
送入生成模型的段落数量不是越多越好。太少可能信息不足,太多会增加模型理解负担和费用。
- 建议起点:k=3 或 k=5。
- 动态调整:如果知识库单条回答所需信息比较集中(如技术参数表),用小 k;如果需要综合多段信息才能回答(如政策解读),可增大到 8~10。
- 配合相似度阈值:设定一个最低相似度(如 0.7),过滤掉低相关度的片段,避免噪声。
索引引擎参数
以 Faiss 为例,索引类型对内存和速度影响显著:
- IVF 类索引(聚类倒排):适合百万至千万级数据,需要设置 nlist(聚类中心数,通常取 sqrt(总向量数) 的 4~10 倍)和 nprobe(检索时搜索的聚类数,越大召回率越高但速度越慢)。
- HNSW 类索引:适合几十万以内的低延迟场景,调整参数 M(每个节点的连接数,一般取 16~64)和 efConstruction/efSearch,增大可提升召回但消耗更多内存和时间。
在多数企业知识库体量(数万到数十万文档)下,使用默认的 HNSW 或 IVF 配置通常足够,只有在数据量突破百万且延迟敏感时才需要精细调优。
4. 调优的实用操作流程
- 搭建基线:选定分块大小(如 500 token)、top-k=5、默认相似度阈值,用 50 条测试问题跑通全流程,记录准确率和回答质量。
- 单变量调整:每次只改动一个参数(如分块大小改为 300 或 700),重新评测,观察召回率和回答准确度的变化。
- 锁定最优组合:在 2~3 轮调整后确定一套能在测试集上稳定达到目标的参数。
- 上线监控:系统上线后,收集用户真实提问中“回答不满意”的 case,分析是检索未命中、分块不合理还是生成问题,据此再针对性微调。
索引选型与参数调优并非一次性工作,它会随着知识库内容的变更、用户提问习惯的演化而需要周期性检查。但好在投入产出比很高——一个经过良好调优的索引,能让整个 RAG 系统的可靠性从“勉强可用”直接跃升到“业务可依赖”。