RAG Parallel Queries是什麼?
RAG(Retrieval Augmented Generation)是一種結合了搜尋和生成能力的人工智慧技術。簡單來說,就是當你向RAG模型提出一個問題時,它會先去搜尋相關的資料,然後再根據這些資料生成一個最符合問題的答案。
而Parallel Queries則是RAG的一種執行方式,它允許模型同時向多個數據源發出查詢請求,並並行處理這些請求的結果。這就像我們同時在多個搜索引擎上搜索一樣,可以大大提高找到相關資訊的效率。
這種模式是基於使用原始查詢來生成多個 “相似” 的子查詢,這些子查詢可以被用來增強查詢的上下文,從而提高原始查詢的信息檢索效果。
系統會針對相似但略有不同的查詢進行多次獨立的檢索,並行處理各個查詢的結果,並將相關資訊聚合展示,方便使用者快速比較和選擇不同來源的答案。
RAG Parallel Queries的優點
- 效率提升: 並行查詢可以縮短查詢時間,讓模型更快地生成答案。
- 資訊更全面: 查詢多個數據源可以獲取更豐富、更全面的資訊,從而生成更準確、更有深度的答案。
- 可擴展性強: 可以輕鬆地添加新的數據源,以擴展模型的知識範圍。
RAG Parallel Queries的工作流程
- 接收問題: 使用者提出一個問題。
- 並行查詢: 模型將問題拆分成多個子問題,並同時向多個數據源發出查詢請求。
- 獲取結果: 各個數據源返回查詢結果。
- 結果融合: 模型對所有查詢結果進行整合和排序,選取最相關的資訊。
- 生成答案: 模型根據選取的資訊,生成一個最符合問題的答案。
分解的實現方法1 – 每個子查詢的結果視為新的查詢「上下文」
將子查詢和相應的答案,以及原始查詢本身的檢索,作為查詢的“上下文”。這類似於 多查詢檢索,但不同之處在於我們跳過檢索細節,直接在更高的層次上討論
https://teetracker.medium.com/langchain-llama-index-rag-with-multi-query-retrieval-4e7df1a62f83
將原始查詢和每個子查詢的結果視為新的查詢「上下文」,進行更高層次的查詢和生成。這種方法類似於「多查詢檢索」(Multi-Query Retrieval),但跳過了檢索過程中的細節,而是將重點放在更高層次的資訊整合和討論上。以下是詳細解釋:
方法概述
- 原始查詢與子查詢:
- 當有一個複雜的查詢時,系統會將這個查詢拆分成多個子查詢,每個子查詢針對不同的面向或需求。
- 每個子查詢會返回相應的答案,這些答案構成了該子查詢的「結果」。
- 作為「上下文」的多層次資訊:
- 這種方法並不是單純地返回每個子查詢的答案,而是將原始查詢、所有子查詢以及它們的結果整合起來,作為新的「上下文」。
- 這個「上下文」包含了原始查詢的主要目標和子查詢的具體細節,但並不逐一呈現每次檢索的細節。也就是說,它跳過了子查詢檢索過程中的技術細節,而是關注在更高層次上的總結和整體討論。
- 與多查詢檢索的異同:
- 在「多查詢檢索」中,通常會為每個子查詢進行獨立的檢索,並直接將檢索結果(包括相關細節)返回給用戶。
- 而這種策略的不同之處在於,它不逐一展示每個子查詢的檢索過程,而是將最終的子查詢結果和原始查詢的意圖整合成一個更高層次的回答或總結。這種方法更適合用來回答綜合性問題,因為它能夠提供一個「全局性的答案」,而不是一系列獨立的回應。
實際範例
假設用戶的原始查詢是:「如何在大型組織中實施遠端工作政策?」
- 系統拆分為幾個子查詢,如:
- 遠端工作的技術需求是什麼?
- 遠端工作政策對公司文化的影響?
- 如何確保遠端工作的安全性?
- 每個子查詢會得到獨立的答案:
- 子查詢 1 的答案可能涉及遠端工作所需的軟硬體。
- 子查詢 2 的答案可能涉及到員工的合作和溝通方式。
- 子查詢 3 的答案則可能是有關網絡安全和資料保護。
- 在更高層次的整合:
- 系統會將原始查詢和所有子查詢的答案整合起來,並產生一個總結性的答案,例如:「要在大型組織中成功實施遠端工作政策,企業需準備合適的技術支持、制定安全的遠端工作流程,同時考量遠端工作的文化影響……」
這樣一來,用戶得到的是一個完整的、全局性的答案,而不是單獨呈現每個子查詢的答案。這種方法更適合處理需要綜合理解的問題。
分解的實現分法2 – Prio-reasoning
另一種方法是類似於 Prio-reasoning,每個子查詢的結果會被存儲在一個 “記憶” 中,並且每個子查詢的問題不僅基於自己的檢索結果,還基於之前子查詢的結果。
MultiStepQueryEngine 的 Llama-Index 也是一種“Prio-reasoning”實現
https://teetracker.medium.com/prio-reasoning-919fd6e90d86
- 逐步查詢與記憶:在 Prio-reasoning 中,每個子查詢的結果會被存儲在一個「記憶」中,這個「記憶」會被用來輔助後續的查詢和推理。
- 基於上下文累積的查詢:每個子查詢的問題不僅依賴當前的檢索結果,還會參考之前查詢的結果來生成新的查詢。這樣可以利用之前獲得的資訊,逐步推進答案的完整性和精確性。
- 多步推理:Prio-reasoning 可以根據用戶的查詢逐步檢索多層次的資訊,適合處理複雜的問題,因為每一輪查詢都建立在之前的結果基礎上,使得系統能夠進行更深入的推理。
在 Prio-reasoning 中,每個子查詢的結果都存儲在「記憶」中,這些記憶會在每輪查詢時被用作上下文。RIG以及Prio-reasoning都特別適合處理需要多步推理的查詢,例如需要不同層次資訊、跨主題的複雜問題。因為每一步的查詢都建立在之前的結果上,所以能逐步產生符合查詢需求的答案。
與RIG的不同點
Prio-reasoning 和 RIG 都屬於多步推理和動態查詢的策略,兩者都利用前一步的資訊來指導下一步的檢索,但 Prio-reasoning 更加強調「記憶」的持續累積,而 RIG 更注重「交替檢索和生成」
記憶機制的側重點:
- 在 Prio-reasoning 中,每個子查詢的結果會存入「記憶」,這樣的設計使得系統可以累積並調用之前的查詢結果。
- 而 RIG 更像是一種「交替的檢索-生成」過程,並沒有專門的「記憶」模組,主要依賴的是當前生成的內容來引導下一輪檢索。
系統結構和實現:
- Prio-reasoning 是建立在 MultiStepQueryEngine 中的,這個引擎強調持續累積查詢結果並利用這些記憶進行推理。
- RIG 則更加靈活和即時化,強調根據每一輪生成的內容來動態進行檢索調整,而不一定需要將所有歷史結果保存下來。