1. RAG检索问题排查全景指南
当RAG系统出现检索不到内容的情况时,90%的开发者会陷入"明明各个环节都检查过了"的困境。最近辅导的一位候选人恰好遇到了小米面试官提出的这个经典问题:"当RAG系统返回空结果时,你会如何系统性排查?"这促使我整理出这份覆盖全链路的排查手册。
RAG系统的检索流程本质上是一个串联管道,从文档预处理到最终结果呈现要经历6个关键环节:
- 原始文档处理与分块
- 文本向量化编码
- 向量存储与索引构建
- 查询向量化与检索
- 结果过滤与重排序
- 结果组装与返回
其中任意环节出错,最终表现都是"检索不到",但每个环节的排查策略截然不同。上周就遇到一个典型案例:用户反馈检索异常,最终发现是分块时误删了关键元数据,导致后续过滤条件永远不匹配。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 文档处理环节深度排查
2.1 分块策略验证
分块不当是检索失败的常见根源。曾有个金融问答项目,因直接采用固定512字符分块,导致财报中的表格数据被强行分割,关键数字分散在不同块中。建议通过以下方式验证:
python复制# 示例:检查分块后的文本连贯性
for i, chunk in enumerate(document_chunks):
print(f"Chunk {i}: {chunk[:100]}...")
if len(chunk.split()) < 10: # 检查是否存在过小的分块
print("⚠️ Suspicious small chunk detected")
关键参数检查清单:
- 分块大小:一般200-1000字符(英文)或300-800汉字
- 重叠区域:建议10-20%的重叠比例
- 特殊内容处理:表格/代码是否保持完整
2.2 元数据完整性检查
某医疗项目曾因未保留文档来源字段,导致后续无法按科室过滤。必须验证:
- 原始文档的标题、作者等基础元数据
- 自动提取的创建时间、文档类型等衍生元数据
- 自定义的业务标签(如产品分类、权限等级)
重要提示:检查分块时是否携带了足够的上层文档上下文。见过因分块工具配置错误,导致所有块丢失了原始文档ID的情况。
3. 向量化环节问题定位
3.1 嵌入模型适配性测试
不同模型对专业术语的编码效
