准确地找到与用户查询最相关的信息是RAG系统成功的关键,如何帮助检索系统提升召回的效果是RAG系统研究的热门方向,之前的文章介绍了在分块阶段的优化方法:RAG高级优化:基于问题生成的文档检索增强。本文将介绍三种query理解的方法,以增强检索增强生成(RAG)系统中的检索过程:
每种技术都旨在通过修改或扩展原始查询来提高检索信息的相关性和全面性。
query转化的优点
RAG系统在检索最相关的信息时经常面临挑战,特别是在处理复杂或模糊的查询时。这些查询转换技术通过重新制定查询以更好地匹配相关文档或检索更全面的信息来解决这个问题。
示例查询 :“气候变化对环境的影响是什么?”
查询重写 ,将其扩展到包括特定方面,如温度变化和生物多样性。
step-back提示 ,将其概括为“气候变化的一般影响是什么?”
子查询分解 ,将其分解为生物多样性、海洋、天气模式和陆地环境等问题。
这些查询转换技术为增强RAG系统的检索能力提供了强大的方法。通过以各种方式重新表述查询,它们可以显著提高检索信息的相关性、上下文和全面性。这些方法在查询复杂或多方面的领域中特别有价值,例如科学研究、法律分析或全面的事实查找任务。
方案介绍
目的: 使查询更加具体和详细,提高检索相关信息的可能性。
方案: 重写的确认样不仅与原始查询相似,而且还提供不同的角度或透视图,从而提高最终生成的质量和深度。
目的: 生成更广泛、更通用的查询,帮助检索相关的背景信息。
方案: 后退提示(Step-Back Prompting)旨在通过考虑高层次的概念和原则来解决复杂问题,与直接解决问题的方法形成对比。“抽象的目的不是为了让你更迷糊,而是创建了绝对精确的新的语义层次”。
目的: 将复杂查询分解为更简单的子查询,以便更全面地检索信息。
方案: Query分解关键思想是将一个复杂问题分解成一系列更简单的子问题,然后依次解决它们。解决每个子问题都得益于之前解决的子问题的答案。
方案实现和举例
本节我们将介绍上述方法的具体实现,同时给出对应的prompt,并举例说明效果:所有技术都使用大模型进行查询转换;自定义提示模板用于指导模型生成适当的转换,代码为每种转换技术提供了单独的功能,允许轻松地集成到现有的RAG系统中。
重新表述查询以改进检索。
query_rewrite_template = """You are an AI assistant tasked with reformulating user queries to improve retrieval in a RAG system.Given the original query, rewrite it to be more specific, detailed, and likely to retrieve relevant information.Original query: {original_query}Rewritten query:"""query_rewrite_prompt = PromptTemplate(input_variables=["original_query"],template=query_rewrite_template)
运行例子:
# example query over the understanding climate change>