在检索增强生成(RAG)系统中,原始用户查询往往存在以下问题:
口语化表达(如“那个怎么弄?”、“上次说的那个东西”)
信息不完整(缺少关键实体、时间、上下文)
歧义性强(一词多义、指代不明)
直接用这样的查询去向量数据库检索,容易导致召回结果相关性低。通过 Query 改写(Query Rewriting),可以:
补全隐含语义
消除歧义
提取/强化关键词
对齐知识库中的术语表达
从而显著提升检索阶段的召回质量(Recall)和排序相关性(Relevance),为后续生成阶段提供更可靠的事实依据。
常用的 Query 改写方法有哪些?
在实践中,我们常根据场景组合使用多种改写策略,主要包括:
| 查询重写(Query Rewriting) | 利用 LLM 将原始问题改写为更正式、完整、无歧义的表述 | 通用,尤其适合对话历史缺失时 |
| 多查询生成(Multi-query Generation) | 从不同角度生成多个相关查询,扩大检索覆盖面 | 复杂问题、多意图问题 |
| 查询分解(Query Decomposition) | 将复杂问题拆解为多个子问题,分别检索后融合 | 多跳推理、复合条件查询 |
| Hypothetical Document Embeddings (HyDE) | 让 LLM 先生成一个“假设答案”,再用该答案去检索 | 提升语义匹配深度,对抗关键词 mismatch |
| 后退提示(Step-back Prompting) | 引导模型先思考“这个问题背后的原理/目标是什么”,再生成泛化查询 | 抽象问题、需要常识推理的场景 |
实际应用中,通常会组合使用:例如先做查询分解,再对每个子查询进行多路生成 + HyDE,最后融合检索结果。
补充建议
可引入用户画像/对话历史作为改写上下文
对改写结果做相关性过滤或重排序
在线上系统中加入A/B 测试,评估不同改写策略对最终答案质量的影响
这样整理后,逻辑更清晰,也体现了你对 RAG 优化的深入理解。
网友回复


