RAG101第五课:通过查询转换提高检索效率


RAG 系统在检索最相关的信息时常面临挑战,特别是处理复杂或模糊查询时。本文将介绍三种查询转换(Query Transformation)技术以增强 RAG 系统的检索过程:

  • 查询重写(Query Rewriting)

  • 回溯提示(Step-back Prompting)

  • 子查询分解(Sub-query Decomposition)


每种技术的目标都是通过修改或扩展原始查询,提高检索信息的相关性和全面性。



方法详情  



查询重写(Query Rewriting)


目的:使查询更加具体和详细,提高检索相关信息的可能性。
实现方式

  • 使用 LLM 和自定义提示模板。

  • 采用原始查询,并将其改写为更具体、详细的版本。


回溯提示(Step-back Prompting)


目的:生成更广泛、更通用的查询,以帮助检索相关的背景信息。
实现方式

  • 使用 LLM 和自定义提示模板。

  • 采用原始查询,并生成一个更泛化的“回溯”查询。


子查询分解(Sub-query Decomposition)


目的:将复杂查询拆解为更简单的子查询,以实现更全面的信息检索。
实现方式

  • 使用 LLM 和自定义提示模板。

  • 将原始查询分解为 2-4 个更简单的子查询。


这些方法的优势


✅ 提高相关性:查询重写有助于检索更具体、更相关的信息。
✅ 提供更好的上下文:回溯提示允许检索更广泛的背景信息。
✅ 获取全面结果:子查询分解可确保检索信息覆盖复杂查询的不同方面。
✅ 灵活性:每种技术都可以独立使用,也可以结合使用,具体取决于应用场景。


代码示例  



接下来,我们将以查询:”气候变化对环境的影响是什么?”为示例依次说明以上三种查询转换方法。


查询重写(Query Rewriting)


代码实现:

效果演示:

回溯提示(Step-back Prompting)

代码实现:

效果演示:


子查询分解(Sub-query Decomposition)


代码实现:

效果演示:



本文源代码:

https://github.com/realyinchen/RAG/blob/main/RAG101/005-Query_Transformation.ipynb

查阅此前文章:

   《RAG101第四课:通过命题切分增强AI系统的检索能力》

   《RAG101第三课:通过添加验证和优化构建可靠的RAG》

   《RAG101第二课:一个简单的CSV文件RAG工作流》

   《RAG101第一课:一个简单的RAG工作流》

文章来源:PyTorch研习社







(文:PyTorch研习社)

欢迎分享

发表评论