人人都会AI编程

26.1 检索不准:答非所问、召回不到正确片段

更新时间:2026-07-12

检索环节是 RAG 系统信息获取的第一道关口。一旦检索不准确,后续无论模型能力多强,都只能基于错误或无关的片段进行生成,直接导致“答非所问”或“说不到点子上”。这是 RAG 落地过程中最常见的瓶颈之一,但也是问题定位最清晰、改善手段最明确的环节。

1. 典型症状

当系统出现以下表现时,应优先排查检索环节:

  • 回答与问题毫无关联:用户问“北京办公室的报销流程”,回答却在说“上海分公司的差旅标准”。
  • 回答内容泛泛而谈,缺少具体信息:询问某产品精确参数,回答给出的是该产品系列的一般性介绍。
  • 反复回复“未找到相关信息”:但知识库中明明存在对应文档。
  • 多轮对话中完全忽略上文:明明问的是“第二个方案的细节”,系统仍在解释第一个方案。

2. 常见原因与排查路径

检索不准通常不是一个孤立问题,而是多种因素叠加的结果。建议按以下顺序逐项检查:

(1)文档切片策略不合理

切片是检索的基本单位,它的粒度直接影响召回质量。

  • 切片过长:一段文字含多个主题,向量嵌入会变得“平均化”,导致与任何单一问题都不够相似。例如将整份《员工手册》切成一个 chunk,模型几乎无法精准定位到具体条款。
  • 切片过短:信息破碎,缺乏完整语义。如“报销需提供”这个片段没有说清楚到底需要什么,即使召回也无法支撑回答。
  • 切片边界生硬:一句话被切断在中间,造成语义断裂。好的切片应保持段落、句子完整性,并使用适当重叠。

排查方法:抽查几条典型查询的 top‑k 召回结果,人工判断召回片段是否包含用户期望的信息,以及片段本身语义是否完整。如果关键信息被切碎或淹没在过长文本中,切片策略就需要调整。

(2)用户问题与文档表达方式不匹配

很多时候不是文档里没有答案,而是用户提问的方式和文档的措辞不一致。比如文档写的是“云端存储的日志保留周期为 90 天”,用户问的是“系统里的记录能保存多久”。如果嵌入模型对这种语义偏移不够鲁棒,就可能召回到“日志记录的开启方法”等无关内容。

排查方法:观察查询词和召回片段在字面与语义上的对应关系。可将查询改写为更接近文档表述的句子再检索,看召回效果是否明显提升。如果确实存在表达差异问题,可考虑引入问题重写、HyDE(假设文档嵌入)、或使用在领域语料上微调过的嵌入模型。

(3)嵌入模型不适合当前领域

通用嵌入模型(如 text-embedding-ada-002)在广泛场景下表现不错,但对某些专业术语、缩写、行业表达的理解可能不够精细。比如“CRF”在医疗领域指“慢性肾功能衰竭”,在 NLP 中可能指“条件随机场”。如果模型无法区分上下文,就会召回错误文档。

排查方法:选取典型领域查询,对比通用模型和领域专用嵌入模型(比如用自有数据微调的模型)的召回结果差异。也可以通过计算一组领域内正例问答对的相似度得分,判断模型是否将相似内容排到了靠前位置。

(4)向量相似度不等于语义相关度

向量检索基于相似度分数(余弦相似度等),但高分片段不一定真正有用。可能出现的典型问题是“相似但不相关”——比如用户问“出差住宿报销标准”,召回片段是“出差期间住宿安全须知”,两者词汇和语境相近,却没有回答金额标准的问题。

排查方法:拉取若干查询的 top‑k 召回列表,分别标注相关度,计算 Precision@k 和 Recall@k。如果高分但无关片段较多,说明依赖单一向量相似度存在局限。

(5)知识库本身的问题

  • 文档缺失:需要的内容根本没有入库。
  • 文档重复或冲突:多个版本的政策共存,检索时可能命中旧版。
  • 格式与噪音:PDF 转换文本时混入大量页眉页脚、水印、乱码,污染了索引。

排查方法:验证目标文档是否已成功索引,直接在向量数据库中查询是否存在对应片段。检查入库流水线的解析质量。

3. 实用优化策略

针对以上常见问题,有一组行之有效的实用方法:

  • 切出“合理的内容单元”

一般建议将文本切割成 200–800 个 token 左右的单元,保持段落完整,并在相邻块之间保留 10%~20% 的重叠。可以使用句子边界感知的分块工具(如按段落、按标题层级切分),而不是暴力等长截断。

  • 混合检索让字面与语义互补

纯向量检索容易出现语义近似但事实不匹配的情况。结合传统的 BM25(关键词匹配)进行混合检索,可以弥补向量检索忽略精确术语匹配的缺陷。常用方案:分别用向量和 BM25 检索各得到一份候选列表,再按某种规则合并排序(如加权融合、RRF 重排)。

  • 查询重写与扩展

在检索前加入一个轻量步骤,用 LLM 或规则将用户口语化、模糊的问题改写成更接近文档表达方式的查询句。例如:“上次说的那个能退吗?”→“月抛型隐形眼镜的退货政策?”重写后检索命中率会显著提高。

  • 重排序模型过滤无关片段

在粗召回(向量/关键词搜索)后,加入一个重排序步骤,用一个小型交叉编码器模型对 (query, chunk) 对进行精排,保留真正相关的片段。这一做法在大幅提升回答质量的同时成本可控。

  • 元数据过滤缩小检索范围

利用向量数据库的过滤能力,按文档类型、产品线、时间戳等元数据先筛选候选集,再在缩小后的范围内做向量检索。这会极大降低干扰项引入的概率。

  • 持续评测与反馈闭环

建立一套检索质量基线评测集(问题+理想片段),每当修改切片策略或嵌入模型时,自动跑一遍评分,保证改动带来的是正向提升。同时将线上用户点踩的高频 badcase 纳入评测集,形成迭代循环。

检索不准并不是一个需要推翻重来的灾难性问题,而是一个可以通过工程化方式不断逼近最优解的过程。排查时,从切片、嵌入、表达匹配、知识库质量四个维度逐一排除,优化时优先做性价比最高的调整(通常是切片和混合检索),就能够在较短时间内让系统可用性大幅提升。