RAG 检索增强

Query 改写有哪些手段?HyDE、子问题分解什么时候用?

91学AI·2026/7/26·14 阅读

考察点

这道题考的是你对「检索质量的天花板往往在 query 端」这句话有没有实感。用户的问题口语化、有指代、缺上下文、一个问句里藏三个问题,直接取向量库检索效果必然打折。面试官想听到你系统地掌握改写手段谱系,并且每种手段什么时候用、什么时候是负优化。追问常往「改写引入噪音怎么办」「多轮对话的指代怎么处理」「改写的延迟成本怎么权衡」走。

参考答案

为什么改写是第一道质量关口

向量检索的输入是 query 本身,query 和文档之间的「表达鸿沟」是召回失败的最大来源:用户说「报销多久到账」,文档写的是「费用审批完成后 3 个工作日内打款」——语义相关但词面和向量距离都不近。改写的本质是把这个鸿沟在检索前填掉。所有改写手段可以按「解决什么问题」分成四类。

补全类:解决上下文缺失

多轮对话场景必备。用户问「它支持私有化部署吗」,「它」指什么得从历史对话里恢复。做法是把对话历史和当前 query 一起给 LLM,生成一个自包含的独立 query(「XX 产品支持私有化部署吗」)。这一步是多轮 RAG 的标配,没有它第二轮开始检索质量就崩。注意只补必要信息,别把整段历史塞进 query——query 越长向量越「糊」。

变换类:解决表达鸿沟

  • 同义改写/多 query 扩展:让 LLM 生成 3-5 个语义等价的不同表述,分别检索后结果合并去重(RRF 融合是常见做法)。RAG-Fusion 就是这个思路。对召回率提升明显,代价是检索次数翻几倍;
  • HyDE(Hypothetical Document Embeddings):思路反直觉——不直接拿问题检索,先让 LLM 编一段「假设答案」,拿这段假答案的向量去检索。原理是「答案和答案在向量空间里比问题和答案更近」。对 zero-shot 的复杂问句有效,但风险同样明显:LLM 编错方向(幻觉假设)会把检索带偏,所以事实简单的问题不要用;
  • Step-back Prompting:把具体问题抽象一层再检索——「GPT-4 的 MMLU 分数」抽象成「大模型评测基准」,先查背景知识再答具体问题。适合问题太具体、直接检索颗粒度对不上的场景。

分解类:解决复合问题

用户一句话里含多个子问题(「对比 A 和 B 的方案,并给出选型建议」),单一向量表达不了多个检索意图。做法是让 LLM 拆成原子子问题,并行检索,各自拿到上下文后综合生成。多跳问题也走这条路——把依赖关系拆出来,先检索上游问题(「A 的创始人是谁」),把答案代入下游问题再检索。分解的坑是拆错:子问题拆多了引入噪音检索,拆漏了答案不全,所以要控制拆分粒度(通常 2-4 个)并让模型给出拆不拆的判断,不是所有 query 都要拆。

收缩类:解决噪音与边界

  • 意图识别与拒答路由:先判断 query 属不属于知识库范围,闲聊和越界问题直接走通用回复,不浪费检索;
  • 关键词提取:长 query 提取核心实体词走 BM25,和向量检索互补——专有名词、型号、错误码这类精确匹配,向量反而不如关键词,这也是混合检索的动机。

工程上的权衡

改写不是免费的:每个改写调用都是一次 LLM 延迟(几百毫秒到几秒),全部堆在一个 query 上延迟会翻倍。实战原则:

  • 分级处理:先用轻量规则/分类器判断 query 类型——简单事实型直接检索,带指代的只做补全,复合型才分解。别所有 query 都过全流程;
  • 改写用小模型:query 理解不需要最强模型,7B 级微调模型或 GPT-4o-mini 级别足够,成本降一个量级;
  • 改写结果落日志:线上 badcase 复盘时,一半以上的检索失败能定位到改写环节,没有日志就是黑盒。

一个常见的选型误区

HyDE 被讨论得很多,但生产上它的收益最不稳定——假设答案的质量不可控,在垂直领域(LLM 对领域事实不了解)编出来的假设往往错得离谱。相比之下,多 query 扩展 + RRF、指代补全这两个「不性感」的手段才是收益最稳的,优先级应该排在 HyDE 前面。

可能的追问

  • 多 query 扩展的结果怎么融合?——常用 RRF(Reciprocal Rank Fusion):按各路的排名倒数加权求和,不要求各检索器分数可比,实现简单效果好。
  • 改写后召回反而变差怎么排查?——A/B 对比原始 query 和改写 query 的召回结果;重点看改写是否丢失了专有名词(LLM 喜欢把「vLLM 0.6」泛化成「推理框架」,精确匹配信息全丢)。规则:改写必须保留原 query 中的实体和版本号。
  • 子问题分解和 Agentic RAG 什么关系?——子问题分解是预先规划(Plan-then-Execute),一轮拆完;Agentic RAG 是边检索边决策,可以根据中间结果动态调整。前者延迟可控,后者上限更高。
  • 多轮对话历史太长,指代消解还是出错怎么办?——别把整个历史塞给改写模型,先对历史做摘要或只取最近 N 轮加长期摘要;实体消歧可以借助会话中已确认的实体表,让模型从表里选而不是自由发挥。

评论 (0)

暂无评论,快来抢沙发吧!

91学AI

© 2026 91学AI · 按岗位学 AI 与大数据. All rights reserved.