RAG(检索增强生成)系统在企业知识库场景中被广泛应用。但在实际项目中,我们经常遇到"检索不准"的问题——要么找不到相关文档,要么返回的内容与问题无关。
本文将分享我们在多个 RAG 项目中积累的检索优化经验。
1. 文档分块策略
分块大小直接影响检索质量:
- 小块(200-500 tokens):适合精确匹配,但可能丢失上下文
- 大块(1000-2000 tokens):保留更多上下文,但噪声增加
- 重叠分块:相邻块之间保留 10-20% 重叠,避免信息被切断
2. 混合检索
单一检索方式往往不够,我们推荐使用混合检索:
- 向量检索:语义匹配,适合理解问题意图
- 关键词检索:精确匹配专有名词、代码片段
- rerank 重排序:用 Cross-Encoder 对候选结果重新排序
3. Query 改写
用户的问题往往不够清晰,可以:
- 同义扩展:添加同义词、缩写全称
- 问题分解:复杂问题拆分为多个子查询
- 假设性文档嵌入:用 LLM 生成"假设答案",再检索
4. 元数据过滤
利用文档元数据缩小检索范围:
- 按部门/产品线过滤
- 按时间范围过滤
- 按文档类型过滤(API 文档、用户手册、内部 Wiki)
5. 评估指标
如何衡量检索质量?我们关注:
- Recall@K:相关文档是否在前 K 条结果中
- MRR:第一条相关结果的排名
- NDCG:考虑排名位置的相似度
实战案例
在某客户的客服知识库项目中,我们通过以下步骤将检索准确率从 62% 提升到 89%:
- 将分块大小从 512 调整为 384,增加重叠到 50 tokens
- 引入 BM25 关键词检索,与向量检索结果加权融合
- 添加产品类别元数据过滤
- 用 Cohere Rerank 对 top-50 结果重排序
总结
RAG 检索优化是一个系统工程,需要从数据预处理、检索策略、后处理多个环节入手。建议:
- 先从简单的向量检索开始,建立基线
- 分析 bad case,针对性优化
- 建立自动化评估流程,持续监控