Meta最新REFRAG框架引爆RAG圈!KV緩存暴降90%,速度狂飆30×
一、RAG一些棘手的問題
檢索增強生成(RAG)通過把外部知識以“拼接文檔”形式喂給大模型,在多輪對話、開放域問答、Agent 等場景取得顯著效果。然而,該范式帶來兩個問題:
- 延遲爆炸:輸入長度驟增,首詞延遲(TTFT)與 KV-Cache 顯存隨 token 數線性乃至二次方增長。
- 信息稀疏:檢索返回的幾十篇文檔里,僅極少數片段與當前 query 真正相關;其余 token 對生成幾乎無貢獻,卻仍要參與全部注意力計算。
有一些緩解手段,但是效果有限。例如:
- 稀疏注意力 / 線性注意力:把 O(n2) 降為 O(n) 或 O(n log n),但 KV-Cache 體積不變,TTFT 依舊隨序列長度線性增加。
- 前綴壓縮 / 滑動窗口:只能丟棄最左側 token,無法處理“中間大段無用信息”的 RAG 場景。
- Chunk 級編碼器(如 CEPE):把文檔先經編碼器壓成向量,再用交叉注意力注入解碼器,但仍以“token”為基本單元,未突破“所有 token 必須進 KV-Cache”的桎梏,且僅支持前綴壓縮,不支持多輪、任意位置壓縮。
二、4個問題的解決思路
問題 | 關鍵技術 | 工作原理簡述 |
不修改解碼器參數 的前提下,把 RAG 上下文“壓”到極小,卻保持生成質量 | Chunk-level 表示替代 Token 序列 | 以 k 個 token 為一組,用輕量編碼器壓成一個向量,解碼器只在該向量上做注意力,輸入長度立即降為 1/k。 |
復用檢索階段已算好的文檔向量 ,避免重復編碼 | 預計算 + 可復用 Chunk Embedding | 檢索階段已產出文檔向量,直接緩存;推理時僅需輕量投影 φ(·) 對齊解碼器隱空間,零重復編碼。 |
在任意位置、任意粒度 做“壓縮-解壓”決策,以適配多輪對話、Agent 等復雜格式 | “Compress-Anywhere” 自回歸掩碼 | 把壓縮向量當“特殊 token”插入原始序列任意位置,通過定制 attention mask 維持自回歸,支持多輪、中間摘要等格式。 |
在壓縮率可動態調整 的同時,保證訓練穩定、推理加速效果可預測 | RL-based Selective Expansion | 訓練一個策略網絡 πθ,按 chunk 重要性順序決定“哪些解壓回 token”,在推理階段可實時調整壓縮率,無需重新微調模型。 |
三、REFRAG

3.1 REFRAG的輸入與輸出
- 輸入:question token q?…q?,檢索返回文檔 d?…d?,總長度 T = n + m。
- 分塊:文檔側每 k 個 token 切為一 chunk C?,得 L = ?m/k? 塊。
- 編碼:輕量編碼器 M???(·)(RoBERTa 系列)輸出 chunk embedding c? = M???(C?)。
- 投影:φ(c?) → e???? ∈ ??,與解碼器詞嵌入同維。
- 解碼器輸入:[e?,…,e? ? question tokens; e????,…,e???? ? compressed chunks]序列長度由 n + m 縮至 n + L(L ≈ m/k)。
- 生成:標準自回歸,注意力只在 n+L 個表示上計算,復雜度 O((n+L)2) ≈ O(n2/k2)。
3.2 訓練三階段(穩定壓縮的關鍵)

- 重建任務(Reconstruction)目的:讓 φ 與 M??? 學會“k 個 token → 一個向量 → 還原 k 個 token”的信息守恒。做法:凍結解碼器,僅訓練 M??? + φ;輸入前 s token,用 chunk 嵌入重建自身。
- 持續預訓練(CPT,Next-Paragraph Prediction)目的:讓解碼器“習慣”把 chunk 嵌入當上下文。做法:解凍解碼器,以“前 s token 的 chunk 嵌入”預測后 o token,采用課程學習:
- 階段 1 只重建 1 個 chunk,階段 9 重建 256 個 chunk,逐步加難度,防止梯度爆炸/欠擬合。
- 下游微調 + 選擇性解壓(SFT + RL Expansion)目的:適配 RAG、多輪對話、摘要等任務,并學會“重要 chunk 不解壓”。做法:
- 先以 90 % 壓縮率混合輸入(90 % chunk 嵌入 + 10 % 原始 token)繼續微調。
- 再用強化學習(PPO-GRPO)訓練策略 πθ,按順序挑選 T′ 個 chunk 恢復成 token;獎勵 = -perplexity。推理時,給定延遲預算,可動態選 T′,實現“同延遲更多文檔”或“同文檔更低延遲”。
3.3 復雜度與加速比

記 s = 文檔側 token 數,k = 壓縮粒度,則
- KV-Cache 內存:降為 1/k
- TTFT 計算量:≈ 1/k2(短文本 1/k,長文本 1/k2)
- 實驗峰值:k=32 時 TTFT 加速 30.85×,吞吐量最高 6.78×,perplexity 與 Full-Context 基線持平甚至更好。
四、REFRAG的流程
1.檢索端改造
- 沿用現有雙塔向量檢索,僅加“保存 chunk 向量”邏輯;向量庫存 FP16,占空間 < 1 % 原文本。
2.編碼器離線蒸餾
- 選 RoBERTa-Base 為教師,用 MSE 損失對齊 LLaMA 詞嵌入空間;訓練 1 epoch,8×A100 約 6 小時。
3.重建任務
- 凍結 LLaMA,僅訓編碼器+2 層 MLP 投影;學習率 2e-4,batch 256,4 萬步即可。
4. CPT + 課程學習
- 數據混合按表 8 幾何序列;9 個階段共 40 k 步,學習率 5e-5,FSDP 8 節點 64 卡,一天完成。
5.下游微調
- RAG 數據 110 萬條,混合 5 域問答;90 % 壓縮率混合輸入,訓練 1 epoch,學習率 2e-5。
6.RL 策略訓練(可選)
- 用 GRPO 組采樣 64 條軌跡,T′=L/4,clip=0.2,訓練 5 k 步即可上線;推理時按延遲預算選 T′。
7 部署
- 緩存 chunk 向量放 CPU 內存,推理時異步預取;
- batch=1 實測 A100 上 16 k token 上下文 TTFT 從 2.8 s → 90 ms。
五、實驗驗證與消融分析
5.1 主實驗結果
數據集:Arxiv、Book、PG19、Proof-pile + 16 項 RAG 基準(NQ、TQA、MMLU 等)基線:LLaMA-2-7B、LLaMA-32K、CEPE、REPLUG、LLaMAK(截斷匹配 token 數)指標:perplexity、ExactMatch、F1、Accuracy、TTFT、Throughput
模型 | 平均困惑度↓ | TTFT 加速比↑ | 顯存節省 |
LLaMA-Full | 1.00× | 1.0× | 0 % |
CEPE | +2.1 % | 2.0× | 50 % |
REFRAG16 | -1.2 % | 16.5× | 93.75 % |
REFRAG32 | +0.8 % | 30.8× | 96.9 % |
結論:在相同或更低困惑度前提下,REFRAG 把首詞延遲壓到 CEPE 的 1/3.75,顯存僅用 3 %。
5.2 下游任務抽樣
- RAG(強檢索器):REFRAG8 與 LLaMA-FT 10-passage 相比,平均準確率 +1.22 %,延遲僅 1/5.26。
- RAG(弱檢索器):REFRAG 因能裝 8× 更多文檔,在檢索質量差時優勢放大,平均 +1.93 %。
- 多輪對話:TopiOCQA 6 輪場景,REFRAG8 比 LLaMA-FT 提升 5.6 %,因無需截斷歷史。
- 長文檔摘要:Arxiv/Pubmed Rouge-1 提升 3–5 點,同解碼 token 預算下顯著領先。
5.3 消融實驗
- 無課程學習:重建任務 perplexity 從 0.135 → 1.599,CPT 不收斂。
- 無重建預初始化:CPT 階段 perplexity 差 30 % 以上。
- 無 RL 選擇:固定壓縮率 8 的 REFRAG8 被“REFRAG16+RL 選 50 %”全面超越,驗證動態解壓>靜態低壓縮。
- 編碼器大小:RoBERTa-Base→Large 僅降 0.2 % perplexity,解碼器 7B→13B 降 8 %,說明瓶頸在解碼器容量而非編碼器。
六、REFRAG與其它方案對比
方法 | 壓縮粒度 | 是否復用檢索向量 | 支持任意位置 | 動態壓縮 | 模型改動 |
LLMLingua | token | 否 | 是 | 預算驅動 | 無 |
CEPE | token | 否 | 否(僅前綴) | 否 | 需改交叉注意 |
Compressive Transformer | segment | 否 | 否 | 否 | 需從頭訓練 |
REFRAG | chunk | 是 | 是 | 是(RL) | 零解碼器參數 |
七、RAG改進的幾個方向
- 極端壓縮率(k≥64)下信息損失陡增,需探索非均勻分段或層次壓縮。
- 多模態擴展:文本-圖像混合 RAG 時,chunk 定義與對齊策略待研究。
- 在線學習:隨著知識庫更新,如何增量更新 chunk 向量而避免全量重算。
- 端側落地:chunk 向量緩存仍占內存,可結合量化+索引壓縮進一步瘦身。
八、結論
REFRAG 重新審視了 RAG 的“長上下文”假設,指出其注意力矩陣的塊對角稀疏性使得“token-level 全計算”成為巨大浪費。
通過“先壓縮、再感知、后擴展”,在零解碼器參數、零生成質量損失的前提下,把首詞延遲壓到現有工作的 1/3.75,顯存節省 90 % 以上,并支持任意位置、動態壓縮的復雜場景。
實驗覆蓋 RAG、多輪對話、長文摘要三大任務,加速比 6–30× 全面領先,為“大模型+知識庫”在 web-scale、Agent 等延遲敏感場景落地提供了可工程化、可擴展的新范式。
本文轉載自???CourseAI???,作者:CourseAI

















