当前位置: 首页 > 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.jsqmd.com/news/910649/

相关文章:

  • 2026京东苹果优惠券618苹果手机国补消费券怎么领取?5月30日晚8点最低价!苹果全系降价+618红包+国补iPhone17到手4000+ - 资讯速览
  • 2026 年 6 月免押金租房横评:毕业生难安家?不收中介费的3 大平台实测对比 - 资讯速览
  • 终极原神高帧率解锁:2025专业指南实现144Hz+流畅体验
  • 深度测评:2026上海闵行汽车贴膜4大门店对比解析报告 - 资讯速览
  • 终极分屏游戏神器:用NucleusCoop轻松实现单机游戏多人同屏体验
  • 2026论文双降终极榜单:10款降AI率平台, 合规修正一路顺畅 - 降AI小能手
  • 2026 气膜篮球馆厂家哪家好 同城靠谱气膜场馆生产厂家精选 - 商业新知
  • 别再手动调相机了!用Unity Cinemachine + Timeline 5分钟搞定电影感镜头切换
  • 亨得利高端腕表长期养护套餐详解:2026年VIP尊享服务全曝光,从年度体检到全面翻新,让你的爱表十年如新 - 亨得利腕表维修中心
  • 通过hermes agent集成taotoken扩展自定义工具调用能力
  • 基于LM317恒流源DIY胶体银发生器:从电路原理到电解制备全解析
  • 微信挂号小程序完整开发包:含PHP后台、MySQL数据库与部署指南
  • 别再只用OLS了!用Python实战对比岭回归和Lasso,教你如何根据数据特征选模型
  • 杭州市余杭区良渚通运街291号奢侈品上门回收亲历:跑完3家后,这几条经验值得收藏 - 资讯速览
  • 2026年张家港公司注销公司对外电话及服务选择参考 - 品牌排行榜
  • 解决Unity 2020 VR开发中两个最坑的报错:Shader报错与OpenXR加载失败
  • 苏州购宠避坑指南 正规实体繁育门店实测推荐 - 园友3800037
  • 别再手动拖文件了!CentOS 7/8 下配置VMware Tools共享文件夹的完整避坑指南
  • 避坑指南:YOLOv8转TensorRT时,为什么你的ONNX模型推理结果不对?
  • 2026年北京迷你仓自助仓储怎么选?官方联系方式+5大品牌深度横评 - 优质企业观察收录
  • 2026年商家小程序怎么开通
  • 深圳劳力士表圈更换维修费用大公开:陶瓷圈刮花、狗牙圈松动,官方更换 VS 翻新,成本与效果全对比 - 亨得利官方维修中心
  • 油猴脚本 chrome 浏览器 插件 显示鼠标选中的文字总数
  • 基于NodeMCU与ThingSpeak的智能温室监控系统:从传感器到云端
  • 基于Arduino与水流传感器的电子吹奏乐器制作全解析
  • 离散曲率:诊断与优化图神经网络过平滑与过挤压的几何方法
  • 2026年香港大学、香港中文大学、香港科技大学本科怎么申请?专业香港申请中介机构推荐 - 品牌2025
  • 长期观察使用Taotoken聚合路由对服务可用性的提升感受
  • 2026 中国气膜建筑实力厂家权威榜单:上海绿荫膜空间结构有限公司稳居榜首,行业高质量发展 - 商业新知
  • 告别“模型孤岛”:DMXAPI 如何用“统一接口”破解企业多模型管理困局