在带检索的大模型应用里,用户问一句「它多少钱」,系统不会直接把这句话丢给搜索引擎。检索前通常先经过一步查询改写:把问题补全、拆开、改写成更容易命中的检索式。这一步做得怎么样,直接决定最终答案准不准。
它在检索前做了什么
查询改写是检索环节的一道预处理。用户自然说出来的话,往往和资料里写成文字的方式对不上:口语里说「它」「那个」,资料里写的是完整名词;口头问「A 和 B 有什么区别」,资料里分别存着 A 和 B 两条内容。查询改写就是架在两者之间的翻译,把「人说的话」整理成「检索系统好搜的样子」。
它通常发生在语义理解之后、检索之前:先判断用户想查什么,再生成一批候选检索式,交给向量库或搜索引擎去召回。很多检索增强生成(RAG)系统里,这一步是召回质量和最终回答质量之间的一道闸门。检索器看到的不是原始提问,而是改写后的版本。
四种改写动作
常见动作可以归纳为四类:
- 指代消解:把「它」「这个」「那家」替换成前面提到的具体对象,让检索式有明确主语。
- 问题拆解:把「A 和 B 有什么区别」拆成分别检索 A、分别检索 B,再合并结果。
- 多路改写:对同一问题生成几种不同说法,各检索一次再合并,提高命中概率。
- 术语对齐:把口语表达换成资料里的专业表述,比如「怎么退」对齐成「退款流程」。
这四类动作可以叠加使用:一次查询可能先做指代消解,再拆成两个子问题,每个子问题又生成两三种说法并行检索。改写是单一变换的说法并不准确,它更像一条可组合的处理链。同样的「把自然语言翻译成机器好处理的形态」这条思路,在别的环节也成立,比如运镜词是怎么被模型理解的。
为什么这一步能提升命中率
核心原因在于表达方式的不一致。用户习惯说「怎么退」,资料里写的是「退款流程」「退换货政策」;用户说「它怎么弄」,资料里只有完整的功能名称。改写把口语映射到资料词汇,命中率自然提升。
一个可带走的判断:召回质量的上限,往往由「问题说清楚没有」决定,其次才是检索算法。改写解决的是前者。想进一步理解改写背后的模型能力,可以先看什么是大语言模型的解释。
下面这张表把四类动作和它们的典型场景对应起来。
| 改写动作 | 解决什么问题 | 典型例子 |
|---|---|---|
| 指代消解 | 「它」没有指向 | 「它多少钱」→「这台笔记本多少钱」 |
| 问题拆解 | 一个大问题含多个子问题 | 「A 和 B 区别」→ 分别查 A、查 B |
| 多路改写 | 单一说法覆盖不全 | 「怎么退款」和「退款流程」一起查 |
| 术语对齐 | 口语和资料词汇不一致 | 「怎么退」→「退款政策」 |
它带来的收益
改写得当,收益体现在三处:召回率提升,换个说法也能搜到;多轮对话更顺,指代问题被解决;复杂问题处理更好,大问题拆成小问题分别查。这三项共同指向一个结果:用户感受到的「搜得准」,相当一部分来自这一步。
速查
- 改写发生在检索之前,不改原始问题本身。
- 四类动作:指代消解、问题拆解、多路改写、术语对齐。
- 代价:多一次模型调用,成本和延迟都会上升。
- 提升的是命中率,弥补的是表达差距,填补不了资料缺口。
什么时候会跑偏
查询改写有它的失效场景,这一点往往被忽略。改写本身要调用模型,如果模型理解错了意图,改写方向就错了,检索跟着错,答案是错上加错。多一次处理也意味着多一份延迟和成本。更重要的是,改写无法凭空理解用户没表达出来的信息:用户自己都没说清要什么,改写再强也猜不准。
还有一个边界:改写提升的是「命中」,是内容质量以外的部分。如果知识库里压根没有相关资料,改写出一百种说法也搜不到。它补的是表达差距,不是资料缺口。同样,改写也替代不了知识库本身的质量,资料写得含糊,检索命中后也答不好。
提问时你能做的三件事
普通用户控制不了系统内部的改写逻辑,但可以顺着它的机制反向优化自己的提问。其一,把指代说清楚,与其说「它怎么弄」,不如说「这个功能的权限怎么设置」。其二,一次只问一个问题,避免把多个诉求塞进一句话。其三,用资料里可能出现的词,少用纯口语缩写。你自己先把问题说完整,比指望系统猜更可靠。
查询改写是检索质量里的隐形环节。理解了它,你就知道为什么「把问题问清楚」这件事,比换一个更强的模型更直接有效。和它类似的文本预处理思路,在语音合成的文本前端里也能看到。


