Query Rewrite 是什么?

Query Rewrite 是什么?它如何提升 RAG 召回效果?
这道题考的是 Query Rewrite 在 RAG 系统中的核心价值和实现原理。简单说,Query Rewrite 就是把用户说的话"翻译"成知识库更容易理解的形式——用户问得含糊,我们把它改清楚;用户问得太宽泛,我们把它聚焦。
为什么需要这一步?因为 RAG 的检索本质是向量相似度匹配。用户 query 和知识库文档的表达方式往往存在差异:用户说"那本科幻小说谁写的",知识库里写的是"刘慈欣著《三体》"。直接拿原始 query 去检索,embedding 空间里离正确答案可能很远。
Query Rewrite 就是来解决这个"表达鸿沟"的问题。
一、五大核心策略——按场景选择合适的武器
消解(Resolution):处理多轮对话中的指代问题。用户说"它怎么样",得知道"它"指的是上文提到的哪个实体。模型需要把指代消解成完整表达。
分解(Decomposition):把复杂问题拆成多个简单问题。比如"苹果公司成立于哪一年?它的主营业务是什么?",拆成两个独立 query 分别检索再合并答案。
多角度改写(Multi-View):针对一个 query 生成 3-5 个不同表述方式的变体,同时检索,扩大命中范围。用户说"感冒了怎么办",可以改写成"感冒用药"、"感冒缓解方法"、"感冒注意事项"等多个角度。
HyDE(Hypothetical Document Embeddings):这个策略很巧妙——先让 LLM 根据 query 假想一个答案,然后拿这个假想答案去做检索。为什么有效?因为假想答案的表述风格更接近真实文档,在向量空间中距离更近。
Step-Back(抽象化后退):把具体问题往回拉一步,变成更高层次的概念。比如问"为什么光速是最快的",先抽象成"物理中的速度上限",检索到基础理论后再回到具体问题。

二、为什么能提升召回率——从 embedding 角度理解
这要从向量检索的原理说起。
检索的本质是在 embedding 空间里找"离得最近"的文档。原始 query 和目标文档如果表述差异大,在这个空间里的距离就远,召回效果就差。
Query Rewrite 做的就是缩小这个距离:
表达聚焦:改写后 query 更精准,去掉了口语化表达和噪声。比如"那个很厉害的AI助手最近更新了啥"改成"ChatGPT 最新版本特性"。
风格对齐:HyDE 生成的假想答案在表述风格上更接近真实文档。它们可能都是"以...为核心..."、"具有...特点"的书面语结构,所以在向量空间中天然更近。
覆盖扩展:多角度改写从多个方向切入,覆盖了更多可能的命中路径。总有一个变体离正确答案更近。

三、工程落地——分级处理避免不必要的开销
Query Rewrite 需要调 LLM,是有成本的。不是所有 query 都需要改写。
分级处理原则:
- 简单 query 直接检索:事实型问答、关键词明确的查询,原生 query 已经足够精准
- 复杂 query 按需改写:多轮对话、复合问题、模糊表述才需要 Rewrite
路由判断:可以用轻量级分类模型或规则来判断 query 复杂度。识别是否包含指代词、是否是多问题复合、表述是否模糊。
混合检索补充:Query Rewrite 不是万能的。向量检索擅长语义匹配但对精确关键词弱,BM25 擅长精确匹配但对语义泛化弱。两者结合(RRF 融合)可以作为有效补充。

四、面试加分——能聊出深度的扩展点
如果想拿高分,可以主动聊这几个点:
HyDE 的核心价值:它解决了 query 和文档的表述风格差异问题。用户的 query 往往是问句或口语,文档往往是陈述句或定义式表述。这个风格鸿沟是召回率低的根本原因之一,HyDE 用假想答案"润色"了 query。
策略组合使用:实际场景中常常组合多种策略。比如先对多轮对话做消解,再对分解后的子问题做多角度改写。
底座模型能力决定 Rewrite 上限:Query Rewrite 质量高度依赖底座模型。消解需要理解上下文,分解需要逻辑推理,HyDE 需要生成流畅的假想答案。用 GPT-4 和用 GPT-3.5 效果差距明显。

五、面试怎么答
基础版(能过的回答):
Query Rewrite 是 RAG 系统中对用户 query 进行优化转换的技术环节,解决用户表达不清晰、携带噪声的问题。核心策略包括:消解处理多轮指代、分解处理复合问题、多角度改写生成多个变体扩大覆盖、HyDE 用假想答案对齐文档风格、Step-Back 抽象化后退再聚焦。工程上应该分级处理——简单 query 直接检索不做改写,只有复杂 query 才按需调用 Rewrite 策略,避免不必要的 LLM 开销。
加分版(让面试官眼前一亮):
Query Rewrite 本质上是在解决 query 和文档之间的"表述风格鸿沟"问题。从 embedding 空间看,用户的口语化 query 和知识库的书面语文档在向量空间中距离较远,导致召回率低。HyDE 的核心思想就是用 LLM 生成一个风格接近文档的假想答案,拿这个假想答案去检索,能显著拉近与目标文档的距离。实际落地要用分级策略:轻量级路由模型判断 query 复杂度,简单问题跳过 Rewrite,复杂问题才调用对应策略。同时可以用向量+BM25 的混合检索作为补充,进一步提升召回效果。
一句话总结
Query Rewrite 就是把用户的"大白话"翻译成知识库能理解的"专业术语",通过表达聚焦、风格对齐、覆盖扩展三个维度提升 RAG 召回率。
文章已写入指定路径。
