RAG 的核心思想是在生成内容的过程中,从外部知识库检索相关信息,并将其作为输入提供给 LLM。然而,随着应用场景的复杂化,RAG 的弊端也逐渐显现:实时检索带来的延迟、文档选择的潜在错误、以及系统架构的复杂性都制约了其效率和准确性。
近日,有一篇名为《Don’t Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks[1]》的论文提出了一种名为缓存增强生成(Cache-Augmented Generation,CAG)的新架构范式。它不同于传统的 RAG 模式,不再依赖于运行时的检索,而是通过预加载知识和预计算缓存,让 LLM 在需要的时候直接调用,大大提升了效率。CAG 的出现,为知识密集型任务提供了一个新的、更高效的选择。
基本原理
CAG 的核心理念在于“预处理”。它不依赖于运行时检索,而是将所有相关的文档提前加载到 LLM 的内存中,并预先计算出键值缓存(Key-Value Cache)。这样一来,LLM 在处理用户查询时,就可以直接利用这些缓存中的知识,无需再进行耗时的检索过程。CAG 的运作主要分为以下三个步骤:
-
知识预加载:首先,系统会对目标领域的所有相关文档进行整理和格式化,确保 LLM 可以理解。然后,LLM 会对这些文档进行编码,生成对应的键值缓存,并存储起来。 -
缓存上下文推理:当用户提出查询时,系统会将预加载的键值缓存与查询一同输入 LLM。LLM 可以直接利用这些缓存中的知识生成答案,而无需进行实时检索。 -
缓存高效管理:为了保证系统的持续高效运行,缓存可以进行定期更新或重置,避免因缓存知识陈旧而影响效果。
CAG 的优势与不足
相比传统的 RAG 系统,CAG 的优势体现在以下几个方面:
-
速度显著提升:由于无需实时检索,CAG 的推理速度得到了大幅提升。在一些实测中,CAG 的推理速度甚至比 RAG 快了数十倍。 这意味着用户可以更快地获得答案,大大节省了等待时间。 -
准确性更高:通过预加载全部相关知识,LLM 可以对信息进行更全面的理解,避免了因信息碎片化导致的理解偏差。例如,在 HotPotQA 数据集上的测试结果显示,CAG 的 BERT-Score 达到了 0.7759,明显高于 RAG 系统的表现。 这说明,CAG 能够生成更准确、更连贯的回答。 -
架构更为简洁:CAG 的系统架构相对简单,减少了对复杂组件的依赖,维护起来也更加方便,降低了开发和维护的成本。 -
性能表现优异:在许多知识密集型任务中,CAG 都展现出了不逊色于、甚至优于传统 RAG 的性能。尤其是在需要深度理解上下文信息的场景中,CAG 的优势更加明显。比如,在 SQuAD 数据集上,CAG 也取得了不俗的成绩,在多个测试维度都超越了传统的 RAG 系统。
如同任何技术一样,CAG 也存在其适用范围。它的核心限制在于需要将所有相关知识都加载到 LLM 的上下文窗口中,这意味着它更适用于那些文档集合大小可控的场景。对于海量且不断变化的知识库,传统的 RAG 系统仍然有其用武之地。
同时,随着模型上下文窗口的持续扩大,CAG 的适用范围也在不断扩展。此外,我们也可以探索结合 RAG 和 CAG 的混合模式,发挥两者的优势,以适应更复杂的应用场景。
小结
RAG 的出现是为了克服 LLM 在能力上的一些限制,而 CAG 也正是随着 LLM 的发展为了满足某些场景自然进化的结果。在特定的条件下,我们可以通过预加载和预计算来替代实时检索,从而大幅提升知识密集型任务的效率。同时,它也反映了一个 LLM 应用开发的基本原则,凡是模型能够定的事情就尽量交给模型来做,充分发挥模型本身的能力。然而,我们也要知道当前也并非像论文名字那样激进,两者不是互相替代的关系,而是结合不同场景的取舍罢了。
参考资料
Don’t Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks: https://arxiv.org/pdf/2412.15605
(文:AI工程化)