引言

在大型语言模型 (LLM) 飞速发展的世界中,检索增强生成 (Retrieval-Augmented Generation, RAG) 已成为将 AI 回复建立在现实基础上的黄金标准。通过从外部数据库获取相关文档,我们可以防止幻觉并让模型获取最新信息。

然而,这其中有个陷阱: “上下文窗口”。虽然现代模型宣称能够处理 10 万甚至 100 万个 token,但填满这个上下文窗口会带来显著的负面影响。它不仅昂贵、增加了延迟,而且矛盾的是,它经常让模型感到困惑。这就是所谓的“迷失在中间” (Lost in the Middle) 现象,LLM 难以在检索到的海量文本堆中找到特定的“针”。

那么,我们该如何解决这个问题?直观的答案是压缩。如果我们能在将检索到的文档输入给 LLM 之前,将其缩减为仅包含核心事实,我们就能既省钱又提高专注度。但传统的压缩方法是“被动”的——它们只是简单地缩短文本,而不理解更广泛的图景。

这就引出了 COMPACT , 这是由高丽大学、Upstage AI 和 AIGEN Sciences 的研究人员提出的一个新框架。COMPACT 通过将压缩视为一个主动的、迭代的过程 , 改变了游戏规则。它不仅仅是总结;它会搜寻线索,更新记忆,并确切地知道何时停止阅读。

在这篇深度文章中,我们将探讨 COMPACT 的工作原理,为什么“主动”压缩优于传统方法,以及它如何实现惊人的 47 倍压缩率,同时实际提高了问答性能。

背景: 多跳问题

要理解为什么 COMPACT 是必要的,我们首先需要看看现代问答 (Question Answering, QA) 的复杂性。

在一个简单的场景中,像“巴拉克·奥巴马是什么时候出生的?”这样的问题只需要找到一个包含他出生日期的文档。这就是单跳问答 (Single-Hop QA)

然而,现实世界中的查询通常是多跳 (Multi-Hop) 的。考虑这个问题: “哪位以‘虚拟合唱团’ (Virtual Choir) 闻名的指挥家曾为奥斯汀的乐团 Conspirare 创作过作品?”

要回答这个问题,AI 需要:

  1. 确定因“虚拟合唱团”而闻名的指挥家。
  2. 找出这些指挥家中哪一位曾与“Conspirare”合作。
  3. 综合这些信息。

标准的 RAG 系统根据关键词匹配检索排名靠前的文档。通常,关键的连接信息埋藏在第 20 或第 30 个文档中,而不是前 5 个。如果你将所有 30 个文档都输入给 LLM,它可能会被噪声淹没。如果你只截取前 5 个,你就会完全错过答案。

现有的解决方案试图压缩这些文档,但它们通常孤立地处理每个文档,或基于粗略的相似性选择句子。它们缺乏推理能力,无法说出: “我已经找到了答案的 A 部分,现在我特别需要寻找 B 部分。”

核心方法: COMPACT

COMPACT (Compressing Retrieved Documents Actively,主动压缩检索文档) 作为一个插件模块,位于你的检索器 (搜索引擎) 和阅读器 (回答用户的 LLM) 之间。

COMPACT 不会一次性处理所有文档或单独总结它们,而是分批 (分段) 阅读文档,并在过程中主动更新“压缩上下文”。

架构

这个过程最好通过一个循环来可视化。

图 2: 作为检索器和阅读器 LLM 之间插件模块的整体 COMPACT 框架。

图 2 所示,工作流程如下:

  1. 检索: 系统获取长长的文档列表 (例如 30 个文档) 。
  2. 分段: 这些文档被分成更小的组或“片段” (例如每组 5 个文档) 。
  3. 迭代压缩: 模型查看第一个片段以及问题。它生成一个摘要。
  4. 主动更新: 对于下一个片段,模型查看新文档、问题,以及来自上一步的摘要。
  5. 提前终止: 在每一步,模型都会问: “我有足够的信息来回答这个问题吗?”如果是,它就会停止。

这种架构确保了压缩后的文本是不断演进的。它充当了一个积累证据的滚动记忆。

数学公式

让我们拆解一下数学原理,以此理解底层到底发生了什么。

首先,检索到的文档被分组成片段 \(S_t\)。如果我们决定每次处理 \(j\) 个文档,第 \(t\) 个片段如下所示:

定义片段集合的方程。

这里,\(S_t\) 包含从索引 \((t-1) \times j + 1\) 到 \((t-1) \times j + j\) 的文档 \(d\)。

核心魔法发生在更新函数中。模型 \(\pi\) 接收三个输入:

  1. 问题 (\(q\))
  2. 当前的文档片段 (\(S_t\))
  3. 上一个压缩上下文 (\(C_{t-1}\))

它产生两个输出:

  1. 新的压缩上下文 (\(C_t\))
  2. 一个评估信号 (\(E_t\))

定义压缩更新步骤的方程。

包含 \(C_{t-1}\) 正是使其具有“主动性”的原因。当处理片段 2 时,模型已经知道它在片段 1 中发现了什么。如果片段 1 确定了“Eric Whitacre 创建了虚拟合唱团”,模型就知道对于片段 2,它只需要检查“Eric Whitacre 是否与 Conspirare 合作过”。它会过滤掉其他所有内容。

提前终止: 知道何时停止

COMPACT 最有效的功能之一是提前终止

在标准 RAG 中,即使答案就在第一段,你也必须为处理所有检索到的文档支付计算成本。COMPACT 在生成摘要的同时生成一个评估 token (\(E_t\)) : 要么是 [COMPLETE] (完成) ,要么是 [INCOMPLETE] (未完成) 。

如果模型输出 [COMPLETE],循环立即中断。这节省了大量的计算资源,并减少了后续文档中无关细节干扰最终阅读器 LLM 的机会。

图 3: 模型确定压缩上下文已完成的迭代点分布。

图 3 展示了这种行为。绿色条形图显示了 COMPACT 的决策过程。注意对于许多查询,它仅在 1 或 2 次迭代后就确定完成了。这种动态调整意味着简单的问题处理起来很便宜,而复杂的问题则能获得所需的资源。

训练压缩器

如何训练一个模型来做这件事?目前并没有用于“迭代压缩”的标准数据集。

作者使用 GPT-4 构建了一个合成数据集。他们使用了一种复杂的提示策略,包括:

  1. 句子选择: 要求 GPT-4 挑选相关句子。
  2. 以查询为中心的压缩: 总结这些句子而不直接回答问题。
  3. 自我评估: 要求 GPT-4 判断摘要是否充分 ([COMPLETE]) 。

他们创建了 28,000 个训练实例,涵盖了早期发现答案的场景和需要深入挖掘的场景 (干扰场景) 。然后,他们在这个数据上微调了一个 Mistral-7B 模型来充当 COMPACT 压缩器。

实验与结果

研究人员在几个具有挑战性的数据集上评估了 COMPACT: HotpotQA、MuSiQue 和 2WikiMultiHopQA (用于多跳推理) ,以及 Natural Questions (NQ) 和 TriviaQA (用于单跳) 。

他们将 COMPACT 与以下方法进行了比较:

  • 原始文档 (Raw Documents) : 简单地将前 k 个文档输入给 LLM。
  • 长上下文 LLM (Long-Context LLMs) : 像 GPT-3.5-Turbo 和 LongLLMLingua 这样的模型。
  • 其他压缩器 (Other Compressors) : AutoCompressors 和 RECOMP。

主要实验中使用的“阅读器”模型 (基于压缩内容回答问题的模型) 是 LLaMA-3-8B。

主要性能

结果令人印象深刻。让我们看看 表 2 :

表 2: 比较 COMPACT 与基线的主要结果。

数据中的关键要点:

  • 压缩率: COMPACT 在 HotpotQA 上实现了巨大的 47.6 倍压缩率。这意味着它将输入大小减少了近 98%,将约 3000 个 token 的噪声变成了简洁的 <200 token 的摘要。
  • 性能 (F1 分数) : 尽管缩减幅度巨大,它在 HotpotQA 上仍获得了 46.9 的 F1 分数,显著击败了“原始文档”基线 (40.3) 和其他压缩器如 RECOMP (39.9) 。
  • 击败长上下文模型: 在多跳设置中,它甚至优于像 GPT-3.5-Turbo 这样的大型专有模型的标准用法。

这表明少即是多。通过主动过滤噪声,COMPACT 为阅读器 LLM 提供了更清晰的信号,相比于 LLM 直接阅读原始文本,能产生更好的答案。

对噪声的鲁棒性

RAG 的一个主要问题是“黄金”文档 (包含实际答案的文档) 并不总是位于搜索结果的顶部。它可能排在第 25 位。

图 1: HotpotQA 在不同 top-k 文档下的性能。

图 1 展示了 COMPACT 的鲁棒性。

  • 棕色线 (原始文档) 保持平坦。随着你添加更多文档 (增加 Top-k) ,噪声会迷惑模型,抵消了找到答案的好处。
  • 红线 (COMPACT) 持续攀升。因为 COMPACT 主动寻找答案并丢弃噪声,它受益于查看更多文档 (高达 Top-40) ,而不会遭受“迷失在中间”问题的困扰。它几乎匹配了黄金文档 (绿线) 的性能,那是理论上限。

作为插件的灵活性

对于任何新框架,一个关键问题是: “它适用于我的特定设置吗?”研究人员测试了 COMPACT 搭配不同的检索器和阅读器。

不同的检索器

他们将神经检索器 (Contriever) 换成了经典的基于关键词的搜索 (BM25) 。

图 5: 使用 BM25 检索器的性能。

图 5 所示,趋势依然存在。即使使用 BM25,随着 Top-k 的增加,COMPACT (红星) 仍保持高性能和稳定性,而其他方法则表现挣扎或停滞不前。

不同的阅读器

他们还测试了 COMPACT 生成的摘要 (基于 Mistral-7B) 是否可被其他 LLM 读取。

图 6: 使用 LLaMA2-13B 和 LLaMA3-8B 阅读器的性能。

图 6 证实了 COMPACT 是模型无关的。无论最终阅读器是 LLaMA-2 还是 LLaMA-3,压缩文本都比原始文档或 RECOMP 提供了更好的回答基础。

成本与效率

对于学生和开发者来说,“酷炫因素”往往要让位于“成本因素”。API 调用很昂贵。

研究人员分析了使用专有模型 (如 GPT-4 和 Claude 3.5) 作为阅读器来回答问题的成本。

表 4: API 成本分析。

表 4 揭示了经济影响。

  • 使用 GPT-4o 搭配原始文档的成本是 **$10.75 **。
  • 使用 GPT-4o 搭配 COMPACT 的成本是 **$0.28 **。

这是 **97% 的成本降低 **。 因为 COMPACT 如此显著地缩小了输入上下文,你为每次 API 调用支付的费用大大减少。此外,COMPACT 获得了比原始 GPT-4o 设置 (55.8) 更高的 F1 分数 (56.0) ,证明你不需要为了省钱而牺牲质量。

结论与启示

COMPACT 论文在如何处理大型语言模型中的长上下文方面引入了一个转变。与其构建具有无限大上下文窗口的模型,COMPACT 建议我们应该构建更智能的机制来策划上下文。

通过将压缩视为一项**主动的、迭代的推理任务 **, COMPACT 实现了三大胜利:

  1. **精度: ** 它跨文档链接信息以解决多跳问题。
  2. **效率: ** 一旦找到答案,它就停止处理 (提前终止) 。
  3. **经济性: ** 它将 token 使用量减少了近 50 倍,大幅削减了部署成本。

对于今天构建 RAG 系统的开发者来说,COMPACT 提供了一个令人信服的蓝图: 不要只是将数据倾倒进你的提示词中。先对数据进行处理、推理和压缩。正如研究人员指出的那样,虽然与单次摘要相比,迭代过程引入了一些延迟,但在准确性方面的收益以及处理复杂推理任务的灵活性,使其成为下一代 AI 应用的强大工具。