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)




子查询分解(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研习社)