查询改写(Query Rewriting)指在检索之前用 LLM 对用户的原始问题做预处理:改写成更适合检索的形式、补全省略的上下文、拆解成多个子问题。它是 RAG 系统里投入产出比最高的优化点之一——检索质量的上限往往在“拿什么去搜”就决定了。
常见手法
- 指代消解:多轮对话里“它多少钱?”→ 改写成“XX 产品多少钱?”,否则检索必然跑偏
- 关键词扩展:把口语化问题补充同义词与专业术语,提高关键词检索召回
- 问题拆解:复合问题“对比A和B的成本与性能”→ 拆成多个子问题分别检索再汇总
- HyDE:让模型先“假设一个理想答案”,用这段假设文本去做向量检索——以文搜文往往比以问搜文更准
- Step-back:先问更上位的问题(“XX技术的一般原理”)再检索细节
代价与权衡
每次改写多一次 LLM 调用,增加延迟与成本;改写跑偏会连带检索失败。简单场景可跳过,多轮对话、复杂问句、专业领域召回差的场景收益显著。
排查口诀
RAG 答不准时,先看检索命中了什么——命不中就修改写与切分,命中了还答错才去修生成端。