RAG 高級優化:一文看盡 query 的轉換之路
準確地找到與用戶查詢最相關的信息是 RAG 系統成功的關鍵,如何幫助檢索系統提升召回的效果是 RAG 系統研究的熱門方向,之前的文章介紹了在分塊階段的優化方法:RAG 高級優化:基於問題生成的文檔檢索增強。本文將介紹三種 query 理解的方法,以增強檢索增強生成 (RAG) 系統中的檢索過程:
-
**查詢重寫:**重新定義查詢,使其更加具體和詳細。
-
**Step-back 提示:**生成更廣泛的查詢,以獲得更好的上下文檢索。
-
**子查詢分解:**將複雜查詢分解爲更簡單的子查詢。
每種技術都旨在通過修改或擴展原始查詢來提高檢索信息的相關性和全面性。
query 轉化的優點
RAG 系統在檢索最相關的信息時經常面臨挑戰,特別是在處理複雜或模糊的查詢時。這些查詢轉換技術通過重新制定查詢以更好地匹配相關文檔或檢索更全面的信息來解決這個問題。
-
提升相關性: 查詢重寫有助於檢索更具體和相關的信息。
-
更好的上下文: 後退提示允許檢索更廣泛的上下文和背景信息。
-
綜合結果: 子查詢分解支持檢索涵蓋複雜查詢的不同方面的信息。
-
靈活性: 每種技術可以單獨使用,也可以結合使用,這取決於具體的用例。
示例介紹
示例查詢:“氣候變化對環境的影響是什麼?”
查詢重寫,將其擴展到包括特定方面,如溫度變化和生物多樣性。
step-back 提示,將其概括爲 “氣候變化的一般影響是什麼?”
子查詢分解,將其分解爲生物多樣性、海洋、天氣模式和陸地環境等問題。
結論
這些查詢轉換技術爲增強 RAG 系統的檢索能力提供了強大的方法。通過以各種方式重新表述查詢,它們可以顯著提高檢索信息的相關性、上下文和全面性。這些方法在查詢複雜或多方面的領域中特別有價值,例如科學研究、法律分析或全面的事實查找任務。
方案介紹
1. 查詢重寫
目的: 使查詢更加具體和詳細,提高檢索相關信息的可能性。
方案: 重寫的確認樣不僅與原始查詢相似,而且還提供不同的角度或透視圖,從而提高最終生成的質量和深度。
2. Step-back 提示
目的: 生成更廣泛、更通用的查詢,幫助檢索相關的背景信息。
方案: 後退提示(Step-Back Prompting)旨在通過考慮高層次的概念和原則來解決複雜問題,與直接解決問題的方法形成對比。“抽象的目的不是爲了讓你更迷糊,而是創建了絕對精確的新的語義層次”。
3. 子查詢分解
目的: 將複雜查詢分解爲更簡單的子查詢,以便更全面地檢索信息。
**方案:**Query 分解關鍵思想是將一個複雜問題分解成一系列更簡單的子問題,然後依次解決它們。解決每個子問題都得益於之前解決的子問題的答案。
方案實現和舉例
本節我們將介紹上述方法的具體實現,同時給出對應的 prompt,並舉例說明效果:所有技術都使用大模型進行查詢轉換;自定義提示模板用於指導模型生成適當的轉換,代碼爲每種轉換技術提供了單獨的功能,允許輕鬆地集成到現有的 RAG 系統中。
1 - 查詢重寫
重新表述查詢以改進檢索。
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 dataset
original_query = "氣候變化對環境的影響是什麼?"
rewritten_query = rewrite_query(original_query)
print("Original query:", original_query)
print("\nRewritten query:", rewritten_query)
效果展示:
Original query: 氣候變化對環境的影響是什麼?
Rewritten query: 氣候變化對各種生態系統的具體影響是什麼,包括溫度、降水模式、海平面和生物多樣性的變化?
2 - 退步提示
生成更廣泛的查詢,以便更好地檢索上下文。
# Create a prompt template for step-back prompting
step_back_template = """You are an AI assistant tasked with generating broader, more general queries to improve context retrieval in a RAG system.
Given the original query, generate a step-back query that is more general and can help retrieve relevant background information.
Original query: {original_query}
Step-back query:"""
step_back_prompt = PromptTemplate(
input_variables=["original_query"],
template=step_back_template
)
運行例子
original_query = "氣候變化對環境的影響是什麼?"
step_back_query = generate_step_back_query(original_query)
print("Original query:", original_query)
print("\nStep-back query:", step_back_query)
效果展示:
Original query: 氣候變化對環境的影響是什麼?
Step-back query: 氣候變化的一般影響是什麼?
3 - 子查詢分解
將複雜查詢分解爲更簡單的子查詢。
subquery_decomposition_template = """You are an AI assistant tasked with breaking down complex queries into simpler sub-queries for a RAG system.
Given the original query, decompose it into 2-4 simpler sub-queries that, when answered together, would provide a comprehensive response to the original query.
Original query: {original_query}
example: What are the impacts of climate change on the environment?
Sub-queries:
1. What are the impacts of climate change on biodiversity?
2. How does climate change affect the oceans?
3. What are the effects of climate change on agriculture?
4. What are the impacts of climate change on human health?"""
subquery_decomposition_prompt = PromptTemplate(
input_variables=["original_query"],
template=subquery_decomposition_template
)
運行例子:
original_query = "氣候變化對環境的影響是什麼?"
sub_queries = decompose_query(original_query)
print("\nSub-queries:")
for i, sub_query in enumerate(sub_queries, 1):
print(sub_query)
效果展示:
Sub-queries:
Original query: 氣候變化對環境的影響是什麼?
1. 氣候變化如何影響生物多樣性和生態系統?
2. 氣候變化對海洋環境和海洋生物有什麼影響?
3. 氣候變化如何影響天氣模式和極端天氣事件?
4. 氣候變化對陸地環境,如森林和沙漠有什麼影響?
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/UZV4ztL0j5k2qPV8U_wZVg