RAG知识库总是答非所问?5个检索配置错误

很多人搭建RAG知识库后,会遇到一个很奇怪的问题:

文档已经成功上传,知识库也能正常检索,但用户提出问题后,系统返回的内容还是不准确。有时找不到答案,有时召回了不相关的段落,甚至文档里明明有正确内容,模型依然会答错。

出现这种情况,不一定是大模型能力不够。RAG系统的回答效果,通常取决于文档解析、切片、召回、重排和提示词等多个环节。任何一个配置不合理,都可能让知识库出现“答非所问”。

一、文档切片过长或过短

文档上传知识库后,通常不会整篇直接交给模型,而是先拆分成多个文本片段。

如果切片太长,一个片段中可能同时包含多个主题。向量化后,片段的语义不够集中,检索时容易匹配到看似相关、实际无关的内容。

如果切片太短,完整的一句话或操作步骤可能被拆开。系统虽然找到了关键词,却没有召回完整上下文,模型只能根据残缺信息回答。

例如,一份产品说明书中包含:

  • 产品适用范围;
  • 安装步骤;
  • 参数配置;
  • 常见报错;
  • 售后说明。

如果这些内容被放进同一个大切片,用户询问“安装失败怎么办”时,系统可能召回整个章节,给模型带来大量无关信息。

火山引擎知识库文档也提到,切片长度需要根据文档的信息密度和上下文关联程度进行设置,不能所有文档都使用同一套切片规则。

排查时可以先查看召回的原始文本片:

如果内容过于零散,可以适当增加切片长度或拼接邻近片段;如果一个文本片包含多个主题,则应缩短切片长度,或者按照标题和段落进行切分。

二、召回文本数量设置不合理

召回数量并不是越多越好。

返回的文本片太少,可能漏掉真正包含答案的内容;返回数量太多,又会把大量相似或无关片段一起交给模型。

例如,用户只询问一个具体参数,系统却一次召回几十个片段。模型需要从大量内容中重新判断答案,不仅响应速度变慢,还可能被错误片段干扰。

比较稳妥的方法是使用一组真实问题进行测试,分别调整返回文本片数量,再观察正确内容能否稳定进入前几条结果。

火山引擎知识问答支持控制最终返回的文本片数量,也支持查看每个文本片的召回分数和重排分数。通过召回详情,可以判断问题发生在“没有找到正确内容”,还是“找到以后模型没有正确使用”。

不要只看最终回答,召回结果本身才是排查RAG问题的第一现场。

三、没有开启重排,相关片段排在后面

向量检索找到的是“语义相似”的内容,但语义相似并不一定代表能够准确回答问题。

例如,用户询问:

“账号连续输错密码后会锁定多久?”

知识库中可能同时存在以下内容:

  • 密码修改方法;
  • 密码安全要求;
  • 登录失败处理;
  • 账号锁定时间;
  • 找回密码流程。

这些片段都与“密码”和“登录”相关,向量检索可能全部召回。如果真正包含锁定时间的片段排在后面,模型就可能优先参考前面的错误内容。

重排模型会重新计算用户问题与召回文本之间的相关性,再调整片段顺序。火山引擎官方文档说明,启用重排可以获得更准确的问题与文本片相似度评分,但也会增加一定检索时间,因此需要同时合理控制召回数量。

如果知识库文档数量较多,或者不同文档中存在大量相似内容,可以尝试开启重排,再对比开启前后的召回结果。

四、没有限制检索范围

企业知识库中经常同时保存多个部门、多个产品和多个版本的资料。

例如,同一个知识库中可能包含:

  • 旧版操作手册;
  • 新版操作手册;
  • 内部测试文档;
  • 客户使用说明;
  • 不同产品的常见问题。

如果用户询问新版产品,但检索时没有限定文档、目录或标签,系统可能优先召回旧版本内容。

这也是很多知识库“回答看起来合理,但实际已经过期”的主要原因。

可以按照产品名称、部门、文档版本、适用地区和更新时间设置标签。用户提出问题后,先根据业务条件缩小检索范围,再进行向量检索。

火山引擎知识问答支持按文档、目录和标签筛选检索范围。相比把所有资料混在一起搜索,先进行范围过滤,通常更容易减少无关内容。

同时还要定期清理重复文档和过期版本,避免多个相似答案互相干扰。

五、提示词没有限制回答依据

即使系统已经召回正确内容,模型也不一定完全按照知识库回答。

如果提示词只写:

“请回答用户的问题。”

模型可能同时使用知识库内容和自身已有知识进行补充。一旦知识库信息不完整,模型就可能自行推测,最终生成一个听起来合理、实际没有依据的答案。

更稳妥的提示词应该明确要求:

  • 只根据召回的知识库内容回答;
  • 找不到答案时直接说明资料不足;
  • 不允许自行编造参数、时间和数据;
  • 回答时标明来源文档;
  • 多个文档存在冲突时提示用户确认版本。

火山引擎知识问答支持自定义Prompt,规定模型如何使用检索到的文本,也可以设置在知识库内容无法回答时转人工处理。

提示词不能提高错误召回的质量,但可以减少模型在资料不足时继续猜测。

RAG知识库的正确排查顺序

知识库出现答非所问时,不建议一开始就更换大模型。

可以按照下面的顺序检查:

  1. 确认原始文档中是否真的存在答案;
  2. 查看文档解析后是否出现乱码或内容缺失;
  3. 检查正确内容是否被切分完整;
  4. 查看召回结果中有没有正确片段;
  5. 调整召回数量和重排配置;
  6. 使用标签限制文档范围;
  7. 检查提示词是否要求依据知识库回答。

如果召回结果中根本没有正确内容,问题通常出在文档、切片或者检索配置。

如果已经召回正确内容,但最终答案仍然错误,则应重点检查提示词、上下文拼接和模型回答规则。

结语

RAG知识库不是把文档上传后就能自动获得准确答案。

文档切片不合理、召回数量设置错误、没有开启重排、检索范围过大以及提示词缺少约束,都可能导致系统答非所问。

优化知识库时,不要只盯着最终回答。先查看每次检索到底召回了哪些文本片,再逐步调整配置,通常比直接更换模型更有效。

一个稳定的RAG系统,关键不是知识库里放了多少文档,而是每次提问时,能否把真正相关的内容准确交给模型。

0
0
0
0
评论
未登录
暂无评论