
RAG长上下文加速解码策略-meta基于RAG的解决思路浅尝(REFRAG) 原创
前文在RAG常见13种分块策略大总结(一览表)提到,分块策略在RAG中至关重要,目的是提高效率、相关性和上下文保持。但也会带来冗余。引发长上下文 RAG 应用的效率痛点:
在 RAG 等依赖外部知识的任务(如多轮对话、长文档总结)中,LLMs 需要将检索到的大量段落拼接为长上下文输入,但这会引发两大问题:
- 高延迟与高内存消耗:长上下文需占用大量键值缓存(KV Cache),且生成第一个token的时间(TTFT,Time-to-First-Token)随上下文长度呈二次方增长,后续token生成时间(TTIT)呈线性增长,导致系统吞吐量显著下降,难以满足Web级检索等低延迟场景需求。
- 冗余计算严重:RAG 上下文由多个检索段落拼接而成,但其中仅小部分与查询直接相关;且检索段落因多样性或去重处理,语义相似度极低,形成“块对角注意力模式”(即不同段落间的交叉注意力几乎为零)。现有 LLM 解码时会对整个上下文进行全量计算,而这些与查询无关的段落计算大多是不必要的。
下面看下meta的解决思路/目标:在不损失 RAG 任务性能(如回答准确性、困惑度)的前提下,通过针对性优化 RAG 解码过程,大幅降低延迟(尤其是 TTFT)和内存消耗,同时扩展 LLM 的有效上下文窗口。
模型架构
该模型由一个仅解码器的LLM(LLaMA)和一个轻量级编码器模型(Roberta )组成。
REFRAG架构:输入上下文被分块,并由轻量级编码器处理以生成块嵌入,这些嵌入可预先计算以实现高效重用。一个轻量级强化学习策略决定扩展少数块。这些块嵌入与问题输入的 token 嵌入一起送入解码器。
REFRAG的解码过程分为预处理(离线/在线) 和生成(在线) 两个阶段,完整流程如上。
阶段1:上下文预处理
阶段2:解码器生成(带动态扩展)
将“主输入token嵌入((用户的核心输入,如查询q)) + 压缩块嵌入(RAG 检索到的长上下文)”作为解码器输入,生成答案;同时通过RL策略动态扩展关键块,避免压缩导致的信息丢失:
- 解码器输入构造
解码器接收两类输入的拼接序列:
- RL动态块扩展
并非所有块都适合压缩(如与查询强相关的块压缩后可能丢失关键信息)。REFRAG通过轻量级RL策略,在解码前或解码中决定:
a.对低信息块:保留压缩嵌入eicnk,减少计算;
b.对高信息块:替换为原始块的token嵌入(即“扩展”),确保信息完整。
RL策略以“下一段预测的困惑度(Perplexity)”为负奖励,学习选择最优扩展块,且扩展不破坏解码器的自回归特性(可在上下文任意位置进行)。
3.答案生成解码器基于处理后的输入序列生成答案:,生成过程与原生LLM完全一致,无需修改解码器架构。
训练方法逻辑概述
REFRAG 不修改基础 LLM 解码器架构,通过 “预训练 + 微调” 让解码器学会理解和利用编码器生成的压缩块嵌入。
- 对齐阶段:通过 “重建任务” 让编码器生成的块嵌入能准确还原原始上下文,同时让投影层将块嵌入映射到解码器兼容的维度(解决 “压缩后信息丢失” 问题)。
- 优化阶段:通过 “课程学习” 降低训练难度,让模型从单块重建逐步过渡到多块处理,避免直接训练长序列导致的优化困难(解决 “多块压缩难以收敛” 问题)。
- 适配阶段:通过 “RL 选择性压缩” 动态决定哪些块保留原始 token(扩展)、哪些用压缩嵌入(压缩),在保证性能的前提下最大化效率(解决 “全量压缩可能损失关键信息” 问题)。
实验
REFRAG: Rethinking RAG based Decoding,https://arxiv.org/pdf/2509.01092
本文转载自大模型自然语言处理 作者:llmnlp
