当前位置: 首页 > news >正文

Agent中RAG检索增强:5种Query Enhancement方法详解与实现

Agent中RAG检索增强:5种Query Enhancement方法详解与实现

在RAG系统中,用户提问的质量直接影响检索效果。本文详解5种查询增强方法:HyDE、Query Rewriting、Multi-Query、Step-back Prompting和Query Expansion,


一、为什么需要查询增强?

在实际的RAG系统中,我们经常遇到这样的痛点:

痛点症状影响
检索召回率低只用用户原问题检索漏掉相关文档
用户表达口语化“咋整RAG” 搜不到文档术语不匹配
问题太短/太模糊缺少上下文信息检索范围过大
单一策略只有一种检索方式无法适应不同场景

查询增强(Query Enhancement)的核心思想是:不要直接用用户原问题检索,而是先对问题进行改写、扩展或拆分,再用增强后的问题检索。


二、5种增强方法对比

方法原理适用场景LLM成本
HyDELLM生成假设答案,用答案检索概念性问题、需要背景知识1次调用
Query Rewriting改写成更清晰专业的形式口语化、太短的问题1次调用
Multi-Query拆成3-5个不同角度问题模糊问题、追求高召回1次调用
Step-back先问抽象大问题获取背景有具体细节但缺背景1次调用
Expansion补充同义词/相关关键词缺少专业术语1次调用

下面逐一详解每种方法的原理和实现。


三、HyDE:假设文档嵌入

3.1 原理

HyDE(Hypothetical Document Embeddings)的核心思想是:让LLM生成一个假设答案,然后用这个假设答案去检索

为什么这样做有效?因为文档库中的内容是"专业表达",而用户问题往往是"口语化表达"。假设答案的表达方式更接近文档,因此检索命中率更高。

3.2 流程图

用户问: "RAG 最新进展" ↓ LLM生成假设答案 ↓ 假设答案: "RAG最新进展包括:GraphRAG用知识图谱增强...ColPali直接向量PDF..." ↓ 用假设答案做向量检索 ↓ 命中率大幅提升!

3.3 Prompt模板

请针对以下问题生成一个详细的假设答案: {query} 答案应该包含专业术语和关键概念。

3.4 适用场景

  • 用户问的是概念性问题(如"什么是…")
  • 需要背景知识才能检索
  • 问题表达方式与文档差异大

3.5 缺点

  • 需要1次LLM调用,增加延迟(约1-2秒)
  • 如果LLM生成的内容偏离事实,可能引入噪声

四、Query Rewriting:问题改写

4.1 原理

用户的表达往往不规范、不专业。Query Rewriting就是让LLM把用户问题改写成更清晰、更专业的表达。

4.2 流程图

用户问: "咋整RAG" ↓ LLM改写 ↓ 改写后: "RAG(检索增强生成)系统的实现方案和技术架构" ↓ 用改写后的问题检索 ↓ 更精准的检索结果!

4.3 Prompt模板

请将以下用户问题改写为更清晰、更专业的表达: 原问题:{query} 改写要求: 1. 保留原问题的核心意图 2. 使用更专业的术语 3. 补充必要的上下文 改写后的问题:

4.4 适用场景

  • 用户表达口语化(如"咋整"、“怎么搞”)
  • 问题太短(少于10个字)
  • 非专业用户提问专业内容

五、Multi-Query:多角度拆分

5.1 原理

一个模糊的问题,从不同角度可能有不同的理解。Multi-Query的核心思想是:把一个问题拆成3-5个不同角度的问题,分别检索,然后合并去重

5.2 流程图

用户问: "怎么优化RAG" ↓ LLM拆分 ↓ 多角度问题: 1. "RAG检索质量如何提升" 2. "RAG召回率优化方法" 3. "RAG准确率提升技术" 4. "检索增强生成的最佳实践" ↓ 分别检索4个问题 ↓ 合并结果,去重 ↓ 大幅提高召回率!

5.3 Prompt模板

请将以下问题拆分为3-5个不同角度的问题: 原问题:{query} 拆分要求: 1. 每个问题从不同角度切入 2. 使用不同的关键词和表达方式 3. 保持原问题的核心意图 拆分后的问题列表:

5.4 适用场景

  • 问题比较模糊,可以有多种理解
  • 追求高召回率(宁可多,不可漏)
  • 单一检索策略效果不佳

5.5 实现要点

// Multi-Query需要分别检索再合并asyncfnmulti_query_search(&self,queries:Vec<String>,top_k:usize)->Vec<SearchResult>{letmutall_results=Vec::new();// 分别检索forqueryinqueries{letresults=self.vector_store.search(&query,top_k).await;all_results.extend(results);}// 合并去重(按document_id)self.merge_and_dedupe(all_results)}

六、Step-back Prompting:后退一步

6.1 原理

用户的问题往往太具体,缺乏必要的背景知识。Step-back Prompting的核心思想是:先问一个更抽象、更宏观的问题,获取背景知识,再回答具体问题

6.2 流程图

用户问: "2024年3月北京气温数据" ↓ LLM生成Step-back问题 ↓ Step-back问题: "北京春季气候特点和温度规律" ↓ 先检索背景知识 ↓ 获得背景信息 ↓ 再回答具体问题

6.3 Prompt模板

原问题:{query} 请生成一个更抽象、更宏观的Step-back问题: - 这个问题应该能帮助获取回答原问题所需的背景知识 - 问题应该比原问题更宽泛 Step-back问题:

6.4 适用场景

  • 用户问的是具体细节,但缺乏背景
  • 问题包含具体时间、地点、人物
  • 需要先理解宏观概念才能回答

七、Query Expansion:关键词扩展

7.1 原理

用户的问题可能缺少专业术语,导致检索不到相关文档。Query Expansion的核心思想是:用LLM补充同义词、相关关键词

7.2 流程图

用户问: "向量检索怎么做" ↓ LLM扩展关键词 ↓ 扩展后: "向量检索 embedding 相似度 ANN Qdrant Milvus Faiss" ↓ 用扩展后的关键词检索 ↓ 补充专业术语,命中更多文档!

7.3 Prompt模板

请为以下问题补充相关的专业术语和关键词: 原问题:{query} 扩展要求: 1. 添加同义词 2. 添加相关的技术术语 3. 添加可能用到的工具/库/框架名称 扩展后的查询:

7.4 适用场景

  • 用户表达缺少专业术语
  • 文档库使用专业表达,用户使用通俗表达
  • 需要覆盖更多关键词变体

八、智能策略选择

不同的问题适合不同的增强策略。我们可以根据问题特征,自动选择最合适的策略:

pubfnauto_select_strategy(query:&str)->EnhanceStrategy{letlen=query.len();lethas_time_detail=query.contains("年")||query.contains("月");letis_short=len<20;lethas_terms=query.contains("RAG")||query.contains("向量");ifhas_time_detail&&!has_terms{// 具体问题但缺背景 → Step-backEnhanceStrategy::StepBack}elseifis_short&&!has_terms{// 太短且口语化 → RewriteEnhanceStrategy::Rewrite}elseiflen>50&&!has_terms{// 长但缺术语 → ExpansionEnhanceStrategy::Expansion}elseifquery.contains("最新")||query.contains("趋势"){// 需要背景知识 → HyDEEnhanceStrategy::Hyde}else{// 默认 → MultiQuery(召回率高)EnhanceStrategy::MultiQuery}}

策略选择测试用例

输入问题自动选择策略原因
“咋整RAG”Rewrite太短且口语化
“怎么优化检索”MultiQuery默认,高召回
“2024年RAG进展”HyDE包含"最新"关键词
“3月北京天气”StepBack具体时间,缺背景
“向量检索”Expansion缺少专业术语

九、性能与成本对比

策略LLM调用增加延迟适用频率推荐场景
HyDE1次1-2秒低频复杂概念问题
Rewrite1次0.5秒中频口语化问题
MultiQuery1次1秒中频模糊问题
StepBack1次0.5秒低频具体细节问题
Expansion1次0.5秒高频缺术语问题
None0次0秒高频简单明确问题

建议

  • 默认使用auto自动选择
  • 对延迟敏感的场景可以设置阈值,简单问题跳过增强
  • 可以缓存增强结果,相同问题不重复调用LLM

十、总结

查询增强是提升RAG检索效果的重要手段。5种方法各有侧重:

方法核心价值一句话总结
HyDE拉近用户表达与文档表达的距离用假设答案检索
Rewrite规范化用户表达口语变专业
MultiQuery多角度覆盖一个不够,来一群
StepBack补充背景知识后退一步,海阔天空
Expansion补充专业术语关键词加一加

在实际应用中,建议:

  1. 默认开启自动选择,让系统智能判断
  2. 提供手动选择入口,让用户根据需要切换
  3. 监控增强效果,持续优化策略选择逻辑
  4. 控制成本,对简单问题可以跳过增强

参考资料

  • HyDE论文
  • Multi-Query Retriever (LlamaIndex)
  • Step-back Prompting (Google)
  • Query Expansion (Stanford IR Book)

https://github.com/atliliw/langchainrust.git

相关项目:LangChainRust Agent - Rust实现的RAG系统

http://www.cnnetsun.cn/news/2640090.html

相关文章:

  • 3DSident终极指南:三步解锁你的3DS硬件信息完整档案
  • 崩坏3扫码登录神器:9大渠道服一键秒登桌面端解决方案
  • 量化交易人才成AI新贵:从华尔街到全球,改写AI圈格局!
  • 别再硬编码规则了!用Python的scikit-fuzzy库5分钟搞定一个模糊推理小例子
  • 从‘paraphrase-multilingual’到‘clip-ViT-B-32’:手把手教你为项目挑选合适的SentenceTransformers预训练模型
  • 别只看Spec了 | 实战视角:AUTOSAR NM中的Active Wakeup与Passive Wakeup究竟有何硬件区别
  • 2026年商家小程序怎么开通
  • Keil LX51链接器.COD文件生成与代码保护解析
  • 轨道交通门机控制器核心原理:从直流母线到闭环控制的完整链路解析
  • 搜极星:AI时代品牌可信度守护者,GEO监测与星盾验真全攻略
  • 在智能客服场景中利用Taotoken多模型能力优化对话流程与成本
  • 从‘不敢动’到‘玩得转’:我的openEuler服务器管理入门踩坑实录
  • 2026青岛注册公司必看:本地实力财税服务商盘点,选对伙伴少踩坑
  • EasyOCR vs PaddleOCR vs Tesseract:2024年Python三大OCR库实战横评,我该选哪个?
  • 别被坑了!2026实测好用的AI写作辅助平台|避坑防骗版
  • 别再只调sklearn了!深入理解线性回归的‘正规方程’与梯度下降,选对优化方法提升预测精度
  • 抖音批量下载神器:3分钟搞定用户主页全作品,免费去水印工具
  • 基于Arduino Leonardo的辅助控制设备:吹吸与头部追踪实现电脑操作
  • Orange Pi上RetroPie前端优化:ES-X增强模块部署与配置指南
  • 5分钟掌握StreamFX:OBS终极免费直播特效插件完整指南
  • 上位机知识篇---VS Code 的“工作区”
  • AutoCAD字体缺失问题终极解决方案:FontCenter智能字体管理插件
  • Lindy API集成自动化全链路拆解:从OAuth2.1授权到实时双向同步,12小时上线实录
  • VNI4140K智能高边驱动器:从原理到实践,构建可靠的多路负载驱动系统
  • Keil MDK调试技巧:硬件与软件断点的原理与应用
  • 暗黑破坏神2存档编辑器终极指南:三步轻松打造完美角色
  • 朋友圈二手市场公众号管理系统
  • 普锐斯V JBL音响系统改装:旁路功放与先锋主机集成全攻略
  • Adobe-GenP 3.0:5分钟解锁Adobe全系软件的专业级解决方案
  • 掌机和轻薄本扩容神器!2230固态硬盘新品推荐