Skip to content

6.1.2 为什么原始提问经常不适合作为最终检索词? ​

先给结论:因为原始提问里经常混着检索噪声、上下文缺口和表达偏差。它对人来说自然,对检索器来说却常常不够精确、不够完整,甚至不够可检索。

所以“原始提问”不等于“最终检索词”,这是很多 RAG 系统必须先接受的现实。

原始提问里最常见的 5 类问题 ​

1. 冗余描述太多 ​

用户常常会把背景一起说出来,比如:

  • “我昨天看你们帮助中心的时候,好像看到过一个关于退款的说明,我现在想确认一下……”

对检索来说,真正关键的可能只有:

  • 退款说明
  • 想确认什么条件

多余背景一多,核心词就容易被稀释。

2. 指代和省略很多 ​

比如:

  • “那这个也适用吗?”
  • “如果不是这个版本呢?”

这类问题对人来说自然,但对检索器来说几乎没有独立意义。

系统要先恢复:

  • 这个,到底指什么
  • 哪个版本,到底是哪一个

否则根本没法稳定检索。

3. 一个问题里混着多个子问题 ​

用户经常会一次说很多,比如:

  • “如果是定制商品,而且已经发货了,还能不能退?如果不能,是不是只能换货?”

这里其实混着至少两个问题:

  • 能不能退
  • 不能退时能不能换货

如果不先拆开,检索器就容易两头都抓不稳。

4. 用户用的是自己的说法,不是知识库里的说法 ​

例如用户说:

  • “自动扣款怎么关”

知识库写的却可能是:

  • “关闭自动续费”
  • “取消会员自动续订”

这时原始提问虽然合理,但不一定是最适合最终检索的词面形式。

5. 关键约束没显式说完整 ​

有些问题真正决定结果的是:

  • 版本
  • 地区
  • 租户
  • 产品型号

但用户问的时候可能没有说全,或者只在前文说过一次。

如果系统不先把这些约束补齐,后面检索出来的候选就很容易混边界。

什么情况下尤其不适合原样检索 ​

下面这些情况,尤其不适合把原始提问直接当最终检索词:

  1. 多轮对话里的短句、代词句
  2. 很长的口语化描述
  3. 一个问题里混着多个检索意图
  4. 用户说法和知识库术语差异明显
  5. 原问题里缺少关键边界,需要从上下文补全

这些情况如果不处理,检索结果经常会表现为:

  • 看起来有点像
  • 但总抓不准真正核心

一个更实际的示意 ​

python
raw_query = "我前面说的那个情况,如果是企业版的话,是不是又不一样?"

final_retrieval_query = "企业版退款规则是否与个人版不同"

这段代码想说明的是:

  • 原始提问对人类对话是成立的
  • 但真正送去检索的查询,往往要更完整、更明确

为什么很多系统明明有好索引,还是检索不稳 ​

因为问题不总在索引端。

很多时候,索引质量已经不错,但系统还是会出现:

  • 同义问法差异大
  • 多轮问题不稳
  • 长句问题效果差

这时根因往往不是“索引不行”,而是:

  • 原始提问本身就不是一个好的检索输入

如果不先把输入整理好,再强的检索器也容易被喂偏。

一个常见误区 ​

很多人会觉得:

  • 检索器应该足够强,能直接吃原话

这在简单问题上有时成立,但在真实业务里通常不够稳。

更实际的理解是:

  • 强检索器也需要好输入

而查询理解做的,正是把原始问题整理成更好的输入。

一句话总结 ​

原始提问经常不适合作为最终检索词,因为它里面混着冗余描述、指代、省略、子问题和边界缺口。对人来说自然的话,对检索器未必稳定,所以系统往往需要先把它整理成更明确的检索查询。