用户问"那个怎么退?",你的RAG搜"那个怎么退",当然搜不到
这是RAG系统最常见的失败模式:用户用自然语言提问,RAG直接把用户问题当成检索查询,然后搜不到相关文档。因为用户的自然语言和文档中的正式语言之间存在巨大的语义鸿沟。
Query Rewriting(查询改写)就是解决这个问题的。以下是5种策略。
策略一:补全与消歧
用户的问题往往省略了上下文。把不完整的查询补全为完整的查询。
改写前:“那个怎么退?” 改写后:“如何在系统中申请退货退款?”
改写前:“苹果的最新消息” 改写后:“苹果公司(Apple Inc.)2026年最新产品发布和财务动态”
实测效果:Recall@10从72.3%提升到83.1%(+10.8个百分点)
金句:用户的自然语言是"省略版",文档的语言是"完整版"。Query Rewriting就是"翻译员"。
策略二:子查询拆分
用户的一个复杂问题,需要拆分为多个子查询分别检索。
改写前:“iPhone 16和Samsung S25的电池续航、拍照效果、价格对比” 改写后:
- “iPhone 16电池续航”
- “iPhone 16拍照效果”
- “iPhone 16价格”
- “Samsung S25电池续航”
- “Samsung S25拍照效果”
- “Samsung S25价格”
实测效果:Recall@10从76.5%提升到90.2%(+13.7个百分点)
金句:复杂问题不是"一个检索"能解决的。拆分成子查询,是提升复杂问题的RAG效果的"性价比之王"。
策略三:多轮对话改写
在对话式RAG中,用户的问题取决于之前的对话历史。需要把多轮对话改写为独立查询。
对话历史:
- 用户:“iPhone 16有什么新功能?”
- 系统:“iPhone 16新增了AI相机、A18芯片…”
- 用户:“它的电池呢?”
改写后:“iPhone 16的电池续航和充电速度”
实测效果:多轮对话场景下Recall@10从58.2%提升到87.5%(+29.3个百分点)
金句:多轮对话中,用户的"它"指的是什么?Query Rewriting帮RAG回答这个"它"。
策略四:假设性文档生成(HyDE)
不是改写查询,而是先生成一个"假设性答案",然后用这个答案去检索。因为答案的语言风格和文档中的语言风格更接近。
查询:用户问"为什么RAG比微调更适合知识库问答?" 生成假设性答案:“RAG比微调更适合知识库问答,因为RAG可以实时更新知识库,不需要重新训练模型,而且可以引用具体来源…” 用假设性答案检索:检索到高度相关的文档
实测效果:Recall@10从78.3%提升到88.1%(+9.8个百分点)
金句:HyDE的洞见是"用答案搜答案"。答案的语言风格和文档更接近,比直接搜问题效果好得多。
策略五:多轮迭代检索
不是一次检索就完事,而是检索→评估→改写→再检索的迭代过程。
流程:
- 初始检索→评估结果质量
- 如果质量不够→分析原因(查询太泛?太窄?关键词不对?)
- 改写查询→再次检索
- 重复直到满意或达到上限
实测效果:Recall@10从78.3%提升到92.5%(+14.2个百分点),但延迟增加2-3倍
金句:多轮迭代检索是"质量最高但成本最高"的策略。适合对精度要求极高的场景。
综合方案
实际生产中,我们组合使用多种策略:
- 多轮对话改写(解决上下文依赖)
- 补全与消歧(解决省略问题)
- 子查询拆分(解决复杂问题)
- HyDE(解决语义鸿沟)
综合实测效果:Recall@10从72.3%提升到93.8%(+21.5个百分点)
金句:Query Rewriting不是"一个技术",而是"一套技术组合"。每个策略解决一个问题,组合使用效果翻倍。**