無需檢索!CAG 通過鍵值緩存讓 RAG 輕松上手
隨著大模型技術的不斷發展,尤其是大模型上下文窗口(context window)逐漸增大的趨勢,許多研究者開始思考是否可以借此特點簡化傳統的 RAG(Retrieval-Augmented Generation)架構。在此背景下,2024年12月的研究論文提出了一個創新方案——CAG(Cache-Augmented Generation),這是一種通過預加載外部文檔到大模型的上下文窗口來簡化傳統 RAG 流程的方法。本文將詳細介紹 CAG 的特點、工作原理、實驗結果、適用場景以及如何快速上手。
1. RAG 的天生不足之處
盡管RAG在理論上能夠通過引入外部知識提高生成能力,但它在實際應用中面臨的挑戰不可忽視:
- 延遲高和復雜度大:RAG依賴于實時檢索過程,需要在查詢時進行向量搜索、排序、選擇相關文檔等復雜操作。這些操作不僅增加了計算負擔,還導致了響應時間的延長,尤其是在面對大規模文檔庫時。
- 安全隱患:為了提升檢索的準確性,RAG通常將外部文檔轉化為向量并存儲在向量數據庫中。然而,這種做法可能會導致敏感信息泄漏的風險,特別是在涉及個人隱私或商業機密的數據時。
- 依賴第三方向量存儲:許多RAG實現依賴于商業化的向量數據庫和嵌入生成服務,這些服務的使用可能導致商業偏見,并帶來額外的成本和數據隱私問題。
鑒于這些問題,研究者們開始探索一種更加簡化且高效的替代方案——CAG。
2. CAG 簡介
CAG(Cache-Augmented Generation)是一種基于大模型上下文窗口擴展特性的RAG優化方案,通過預加載相關文檔并生成鍵值緩存(KV Cache),消除了傳統RAG中的實時檢索環節。這一過程將外部知識直接集成到模型的工作內存中,從而減少了延遲,提高了系統的整體效率。
2.1 基本特點
CAG的核心思想在于預加載相關文檔并將其轉化為鍵值緩存(KV Cache),然后將緩存數據與用戶查詢一同傳遞給大模型。這樣,在推理時,模型能夠直接利用預先加載的知識進行生成,無需進行實時檢索和向量搜索。
- 簡化架構:CAG不需要構建復雜的向量空間或檢索組件,從而大大簡化了系統架構。
- 消除延遲:通過預先處理并緩存相關文檔,CAG避免了檢索過程的延遲,提升了響應速度。
- 增強安全性:敏感數據可以存儲在安全的數據庫中,而不是轉化為向量,這減少了數據泄露的風險。
2.2 工作原理
CAG的工作原理可以分為三個階段:
- 外部知識預加載:在這一階段,相關領域的文檔被預處理并格式化為適應大模型上下文窗口的形式。大模型將這些文檔編碼成鍵值對(KV Cache),并將其存儲以供后續使用。該過程的計算成本只發生在文檔處理時,之后的查詢可以直接利用緩存。
- 推理:在推理階段,預先計算的鍵值緩存與用戶的查詢一同加載到模型中,模型利用這些緩存的上下文生成響應。這一過程不再依賴實時檢索,極大減少了延遲并降低了數據選擇錯誤的風險。
- 緩存重置:為了保持系統性能,緩存可以在多個推理會話后高效重置。由于KV Cache是按追加方式增長的,重置操作只需截斷新增的令牌,而無需重新加載整個緩存。
傳統 RAG 和 CAG 工作流程的比較:上部說明了 RAG 管道,包括推理過程中的實時檢索和參考文本輸入,而下部描述了 CAG 方法,該方法預加載 KV 緩存,從而消除了推理時的檢索步驟和參考文本輸入。
2.3 優點
- 提升效率:通過預加載和緩存外部知識,CAG消除了實時檢索過程,顯著提高了計算效率。
- 增強安全性:敏感數據存儲在安全數據庫中,而非嵌入到向量空間,降低了數據泄露的風險。
- 簡化架構:無需構建復雜的向量檢索和存儲組件,系統架構更加簡潔。
- 減少延遲:通過避免實時操作,CAG減少了推理延遲,提高了響應速度。
3. 實驗結果及適用場景
為了驗證CAG的效果,研究者們對其進行了大量實驗,比較了CAG與傳統RAG(基于BM25的稀疏檢索和OpenAI的密集檢索)的性能。
3.1 實驗結果
- 數據集:使用了SQuAD 1.0和HotPotQA數據集,這兩個數據集包含了多種不同難度的問答任務。
- 評估指標:采用BERTScore作為評估指標,用于比較生成文本與真實答案的相似度。
- 實驗結果:
性能優越:CAG在大多數測試中超越了傳統的RAG方法,特別是在HotPotQA數據集上,CAG憑借全量上下文理解的優勢,表現明顯優于基于檢索的RAG。
推理時間縮短:由于不再需要實時檢索,CAG顯著降低了推理時間,特別是在面對大規模文檔時的響應速度明顯提高。
BERTScore表現:CAG在大部分情況下的BERTScore優于傳統RAG系統,證明了其在生成準確性上的優勢。
CAG在大多數測試中超越了傳統的RAG方法
3.2 適用場景
CAG尤其適用于知識庫有限且文檔量可控的任務。對于文檔集較小、內容相對固定的應用場景,CAG能夠顯著提升性能,并簡化系統架構。
- 約束性知識庫:對于某些任務,知識庫大小適中且固定,可以直接加載到大模型的上下文窗口中,這時CAG表現出色。
- 混合方法:對于需要全面知識和適應特定查詢的任務,CAG還可以與檢索機制結合使用,通過預加載基礎上下文并結合選擇性檢索來應對特定問題。
4. 快速上手
想要快速體驗CAG,可以按照以下步驟進行:
安裝依賴
pip install -r ./requirements.txt
準備數據
# 下載所需的數據集
sh ./downloads.sh
配置環境
# 復制并配置環境文件
cp ./.env.template ./.env
運行實驗
- ?
?rag.py?
?:用于傳統RAG實驗。 - ?
?kvcache.py?
?:用于CAG實驗。
5. 結論及展望
CAG作為RAG的簡化替代方案,特別適合在知識庫有限且可控的場景下應用。通過預加載和緩存外部知識,CAG不僅消除了實時檢索帶來的延遲,還減少了系統復雜度,并提升了計算效率。在未來,隨著大模型上下文窗口的不斷擴展,CAG的優勢將更加明顯,尤其是在處理大規模知識庫和長文本時。
隨著技術的不斷進步,CAG將成為大模型技術中的重要組成部分,提供更加高效、安全和簡潔的解決方案。在不久的將來,我們可能會看到CAG與更多先進技術的結合,為實際應用帶來更強大的智能服務。
參考鏈接
