在 RAG 系统中,用户问题(Query)的质量直接影响检索效果。
常见优化方法可以归纳为三大类:改写类、拆解类、决策类。
改写类:让 query 更清晰
拆解类:让 query 更容易命中
决策类:让系统用对方法
一、改写类(让问题“更好被检索”)
1️⃣ Query Rewrite(查询改写)
将用户原始问题改写为更清晰、更完整的表达。解决:口语化、指代不清、信息缺失。
常用方式:LLM 改写 / 模板补全
- 示例:
这个怎么解决? → Python 报错 ValueError: xxx 的解决方法是什么?2️⃣ Query Expansion(查询扩展)
为 query 增加同义词、相关术语等。提升关键词检索(如 BM25)的召回率。
方法:同义词扩展、embedding 相似词、LLM 扩展。
如:
RAG → Retrieval Augmented Generation(检索增强生成)3️⃣ Normalization(规范化)
统一 query 表达形式,减少噪声。
- 包括:
- 大小写统一
- 拼写纠错
- 去停用词
- 单位转换
- 作用:降低检索误差
二、拆解类(让问题“更容易被命中”)
1️⃣ Multi-query(多查询)
将一个问题改写为多个表达,从不同角度检索。提升 Recall(召回率)。
- 示例:
RAG 怎么优化? → RAG 优化方法 → 检索增强生成调优 → RAG tuning 技巧2️⃣ Query Decomposition(查询拆解)
将复杂问题拆分为多个子问题。支持多跳检索和复杂推理。
- 示例:
马云创立的公司总部在哪里? → 子问题: 1. 马云创立了哪些公司? 2. 这些公司的总部在哪?3️⃣ Context Completion(上下文补全)
在多轮对话中补全隐含信息,避免检索失败。
- 方法:
- 拼接历史对话
- LLM 理解上下文
- 示例:
用户:这个公司在哪? → 补全:阿里巴巴总部在哪里?三、决策类(让系统“选对检索策略”)
1️⃣ Query Routing(查询路由)
根据问题类型选择不同数据源或检索器。
- 示例:
技术问题 → 技术文档库 HR问题 → 制度库- 实现:
- 规则
- 分类模型
- LLM Router
2️⃣ Intent Detection(意图识别)
判断用户问题类型,从而选择处理方式。
- 常见类型:
- 知识问答(RAG)
- 数据查询(SQL)
- 操作类问题
- 闲聊(不走 RAG)
- 示例策略:
FAQ → 向量检索 精确问题 → BM25 / SQL 复杂问题 → 多跳 / 图检索3️⃣ Filtering(过滤与约束)
为 query 增加结构化过滤条件(metadata)。
- 示例:
报销流程 → 限制:部门=财务,时间=2024- 作用:减少噪声,提高 Precision