当前位置: 首页 > news >正文

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?

编者按: 你是否曾经遇到过这样的困扰:在开发基于 RAG 的应用时,实时检索的延迟让用户体验大打折扣?或者在处理复杂查询时,检索结果的不准确导致回答质量不尽如人意?

在当前大语言模型应用大规模落地的背景下,这些挑战正成为制约产品竞争力的关键瓶颈。传统 RAG 方案中的检索延迟、准确性波动以及系统复杂度,都在考验着开发者的耐心和智慧。

缓存增强生成(CAG)技术巧妙地利用了新一代大语言模型处理长上下文的能力,通过预加载文档和预计算 KV 缓存,消除了实时检索的需求。实验结果表明,在可管理的知识库场景下,这种方案不仅能将推理时间缩短数倍,还能提供更连贯、更准确的响应。

作者 | Vishal Rajput

编译 | 岳扬

检索增强生成(RAG)作为一种通过整合外部知识源来增强语言模型的强大方法而备受瞩目。不过,这种方法也带来了一些挑战,比如检索过程的延迟、文档挑选时可能出现的误差,以及系统复杂度的增加。

随着能够处理更长上下文的大语言模型(LLMs)的兴起,缓存增强生成(CAG)技术应运而生,它避免了实时的信息检索。这项技术通过将所有必要资源预先加载到模型的扩展上下文中,并在缓存其相关运行时(runtime)参数,尤其在处理数量有限且易于管理的文档或知识时更为有效。

话不多说,让我们来深入探讨这一新颖的技术。

本文将讨论以下主题:

  • RAG 如何扩展上下文的处理能力?
  • 无限扩展的上下文窗口
  • CAG 技术有何优势?
  • 其他方面的改进
  • CAG 框架的运作原理
  • 总结

01 RAG 如何扩展上下文的处理能力?

RAG 是一种半参数化系统,其中参数化部分由大语言模型构成,而非参数化部分则包括其他元素。将这两部分结合,便形成了半参数化系统。在 LLMs 中,所有信息都以编码形式存储在模型的权重或参数中,而系统的其他部分则没有用参数来定义这些知识。

那么,这种设计是如何解决问题的呢?

  • 通过在 LLMs 中灵活地替换索引(即特定的信息),能够实现信息的个性化定制,这意味着我们不会因为信息过时而受限,同时也能够更新索引的内容。
  • 将 LLMs 与这些索引相结合,可以减少错误信息的产生,并且我们能够通过指向信息原始来源来进行引用和归属描述。

因此,从理论上讲,RAG 提升了我们为 LLMs 创建更佳上下文的能力,使其表现更加出色。

但这个过程真的这么简单吗?答案是否定的。

现有的 RAG 系统并不够智能,它们相对简单,无法应对那些需要大量自定义上下文的复杂任务。

因此,简而言之,正是由于上下文窗口对 LLMs 的限制,RAG 才得以发展起来。

02 无限扩展的上下文窗口

相关论文在此:《Leave No Context Behind: Efficient Infinite Context Transformers with Infini-attention》。

这篇论文提出了一种高效的方法,可以在有限的内存和计算资源约束下,将基于 Transformer 的大语言模型(LLMs)扩展到处理无限长的输入。该方法中的一个关键创新是一种名为 Infini-attention 的全新注意力机制。

Infini-attention 的核心思想是将局部注意力和全局注意力相结合。具体来说,首先将整篇文章分割成多个片段,在其中一个片段上应用标准的注意力机制,而为了获取前一个片段的上下文,我们采用了一种线性注意力机制。以下是对这篇论文的简要概述:

  • 混合注意力机制:局部注意力集中于单词周围的即时上下文,而长距离注意力则通过参考迄今为止所见的整个序列的压缩摘要来保持全局视野。
  • 压缩记忆:利用线性注意力来记忆之前的文本片段。
  • 高效更新:为了避免冗余和节省计算量,Infini-attention 不会直接将新信息添加到记忆中。相反,它会首先检查已知信息,然后只更新记忆中的新信息或不同信息,这与 ResNet 中的跳跃连接(skip connections)类似。
  • 权衡控制:通过一个超参数来调节局部信息和压缩记忆的混合比例。

03 CAG 技术有何优势?

无检索长上下文范式:提出了一种创新方法,通过利用预加载文档和预计算 KV 缓存的长上下文 LLMs,消除了检索延迟、错误和系统复杂性。

性能比较:实验表明,长上下文 LLMs 的性能优于传统的 RAG 系统,特别是在可管理的知识库中。

实用见解:提出可操作的优化策略以提升知识密集型工作流效率,通过实证验证无检索方法在特定应用场景下的可行性。

CAG 相较于传统 RAG 系统具有以下显著优势:

  • 缩短推理时间:由于无需实时检索,推理过程变得更快、更高效,能够更快地响应用户查询。
  • 统一上下文:将整个知识集合预加载到 LLM 中,可提供对文档的整体和连贯理解,从而在各种任务中提高响应质量和响应一致性。
  • 简化架构:通过移除整合检索器和生成器的需求,系统变得更加简洁,降低了系统复杂性,提高了可维护性,并减少了开发成本。

04 其他方面的改进

对于知识密集型任务而言,增加的计算资源通常被用来融入更多的外部知识。然而,如果没有有效地利用这些知识,单纯地扩展上下文并不总是能提升性能。

两种推理扩展策略:上下文学习(In-context learning)和迭代式提示技术(iterative prompting)。

这些策略为扩展测试时计算(test-time computation)提供了额外的灵活性(例如,通过增加检索的文档数量或生成步骤),从而增强 LLMs 获取和利用上下文信息的能力。

我们需要回答两个关键问题:

(1) 在进行最优配置时,RAG 性能如何通过推理计算规模的扩展获得提升?

(2) 能否通过建模 RAG 性能与推理参数之间的量化关系,预测给定预算约束下的最优测试时计算资源分配?

在最优推理参数配置下,RAG性能随着测试时计算量级的提升呈现近似线性增长。基于实验观测,我们推导出RAG的推理扩展规律及其配套计算资源分配模型,该模型可预测不同超参数配置下的系统性能表现。

欲了解更多信息请阅读此论文:https://arxiv.org/pdf/2410.04343

另一项工作则更多地从硬件(优化)设计的角度出发:

研究团队开发了智能知识存储系统(Intelligent Knowledge Store, IKS),这是一种基于 CXL 2.0 协议的设备,采用横向扩展的近内存加速架构,通过在主机 CPU 与近内存加速器之间构建新型缓存一致性接口实现性能突破。

在 512GB 向量数据库上,IKS 执行精确最近邻搜索的速度相比 Intel Sapphire Rapids CPU 提升 13.4-27.9 倍。这种搜索性能优势使典型 RAG 应用的端到端推理时间缩短 1.7-26.3 倍。作为内存扩展器,IKS 的内部 DRAM 可解耦供服务器其他应用使用,有效避免当今服务器中最昂贵的 DRAM 资源闲置浪费。

欲了解更多信息,请阅读这里:https://arxiv.org/pdf/2412.15246

另一篇论文系统性地研究了长上下文对 20 种主流开源和商业大语言模型(LLM)的检索增强生成(RAG)性能影响。研究团队通过在三个专有领域数据集上改变总上下文长度(从 2,000 到 128,000 tokens,并在可能情况下扩展至 200 万 tokens)运行 RAG 工作流,揭示了长上下文在 RAG 应用中的优势与局限性。

他们的研究发现,虽然检索更多文档可以提高性能,但只有少数最新一代的最先进 LLMs 能够在超过 64k tokens 的长上下文中保持稳定的准确性。 他们还确定了长上下文场景中的不同故障模式,为未来的研究提出了方向。

欲了解更多信息,请阅读此论文:https://arxiv.org/pdf/2411.03538

05 CAG 框架的运作原理

CAG 框架利用长上下文 LLMs 的扩展上下文能力,消除了实时检索的需求。通过预加载外部知识源(例如,文档集合 D={d1,d2,…} )并预计算键值(KV)缓存(C_KV),它克服了传统 RAG 系统的效率低下问题。该框架主要分三个阶段运行:

1. 外部知识预加载

  • 对精选的文档集合 D 进行预处理,使其适配模型的扩展上下文窗口。
  • LLM 处理这些文档,将它们转换为预计算的键值(KV)缓存,该缓存封装了 LLM 的推理状态。LLM(M)将文档集合 D 编码成预计算的 KV 缓存:

  • 该预计算缓存被存储以供复用,确保无论后续执行多少次查询,处理文档集合D的计算成本仅需支付一次。

2. 推理阶段

  • 在推理阶段,KV 缓存(C_KV)与用户查询 Q 一起加载。
  • LLM 利用这个缓存中的上下文来生成响应,从而消除了检索延迟,并减少了由于动态检索引起的错误或遗漏的风险。LLM 通过利用缓存中的上下文来生成响应:

这种方法消除了检索延迟,将检索错误的风险降至最低。组合提示词 P=Concat(D,Q) 确保了对外部知识和查询的统一理解。

3. 缓存重置

  • 为维持性能,需对 KV 缓存进行高效重置。在推理过程中,随着新 token(t1,t2,…,tk)被添加至上下文窗口,重置过程会截断这些 tokens:

  • 随着新 token 的连续添加,KV 缓存逐渐增长,重置时仅需截断这些新增 token,即可实现快速重新初始化,无需从磁盘重新加载整个缓存。这种设计避免了全量缓存加载的 I/O 瓶颈,确保了系统响应速度的持续稳定。

06 Conclusion

缓存增强生成(CAG)在实时检索不可行或需要极低延迟响应的场景中优势显著。通过将海量外部知识嵌入模型的上下文窗口,CAG 能够生成信息丰富且上下文相关的回答,避免了传统检索增强生成(RAG)系统的检索延迟。

Thanks for reading!

Hope you have enjoyed and learned new things from this blog!

About the author

Vishal Rajput

3x🏆Top writer in AI |

AI Book 📓: https://rb.gy/xc8m46 |

LinkedIn +: https://www.linkedin.com/in/vishal-rajput-999164122/

END

本期互动内容 🍻

❓你认为随着大模型上下文窗口持续扩大,RAG和CAG的技术路线会如何演进?哪些场景仍然更适合使用RAG?

原文链接:

https://medium.com/aiguys/dont-do-rag-it-s-time-for-cag-fb24ff87932b

相关文章:

绕过 RAG 实时检索瓶颈,缓存增强生成(CAG)如何助力性能突破?

编者按: 你是否曾经遇到过这样的困扰:在开发基于 RAG 的应用时,实时检索的延迟让用户体验大打折扣?或者在处理复杂查询时,检索结果的不准确导致回答质量不尽如人意? 在当前大语言模型应用大规模落地的背景下…...

Nginx系列09(Nginx 与其他服务集成、实战项目)

目录 Nginx 与其他服务集成 实战项目 Nginx 与其他服务集成 Nginx 与 Tomcat 集成 概念:将 Nginx 作为前端代理服务器,Tomcat 作为后端应用服务器。Nginx 负责处理静态资源请求、负载均衡以及将动态请求转发给 Tomcat,Tomcat 则专注于运行…...

nvidia驱动更新,centos下安装openwebui+ollama(非docker)

查看centos内核版本 uname -a cat /etc/redhat-release下载对应的程序(这个是linux64位版本通用的) https://cn.download.nvidia.cn/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run cudnn想办法自己下一下,我这里是12.x和11.x通用的…...

手机端抓包大麦网抢票协议:实现自动抢票与支付

🚀 手机端抓包大麦网抢票协议:实现自动抢票与支付 🚀 🔥 你是否还在为抢不到热门演出票而烦恼?本文将教你如何通过抓包技术获取大麦网抢票协议,并编写脚本实现自动化抢票与支付!🔥 …...

Vue3实现文件上传、下载及预览全流程详解(含完整接口调用)

文章目录 一、环境准备1.1 创建Vue3项目1.2 安装依赖1.3 配置Element Plus 二、文件上传实现2.1 基础上传组件2.2 自定义上传逻辑(Axios实现) 三、文件下载实现3.1 直接下载(已知文件URL)3.2 后端接口下载(二进制流&am…...

普通人高效使用DeepSeek指南?

李升伟 整理 DeepSeek(深度求索)作为一款智能搜索引擎或AI工具,普通人可以通过以下方式高效利用它,提升学习、工作和生活效率: --- ### **一、基础功能:精准搜索** 1. **明确需求提问** 用自然语言…...

基于JAVA+Spring+mysql_快递管理系统源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 摘 要 随着物流行业信息化的深入使得物流过程中货物的状态和变化透明化,现代信息化的接入使…...

《从0到1:用Python在鸿蒙系统开发安防图像分类AI功能》

在人工智能与移动应用深度融合的当下,类目标签AI功能成为众多行业提升效率和用户体验的关键技术。本文聚焦于HarmonyOS NEXT API 12及以上版本,以图像分类在智能家居安防领域的应用为例,为开发者详细阐述如何利用Python开发类目标签AI功能,助力鸿蒙技术在该领域的创新应用。…...

第十四届蓝桥杯大赛软件赛国赛C/C++大学C组

A 【跑步计划——日期问题】-CSDN博客 B 【残缺的数字】-CSDN博客 C 题目 代码 #include <bits/stdc.h> using namespace std;void change(int &x) {int sum 0, t x;while(t){sum t % 10;t / 10;}x - sum; } int main() {int n;cin >> n;int ans 0;…...

黑龙江省地标-DB31/T 862-2021 “一网通办”政务服务中心建设和运行规范

黑龙江省智慧政务服务&#xff1a;标准规范引领服务新篇章 1. 引言 在数字化转型的大潮中&#xff0c;智慧政务服务作为提升政府服务效能、优化营商环境、增强民众获得感的重要手段&#xff0c;正受到越来越多的关注。黑龙江省紧跟时代步伐&#xff0c;出台了一系列智慧政务服…...

基于SpringBoot的美妆购物网站系统设计与实现现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

如何评估所选择的PHP后端框架的性能?

大家在选择PHP后端框架的时候&#xff0c;如果想评估其性能如何&#xff0c;能不能扛得住你的项目&#xff1f;可以根据以下几点进行分析&#xff0c;帮助大家选择到更符合自己心目中的PHP后端框架。 1. 基准测试 基准测试是评估框架性能的基础方法&#xff0c;主要通过模拟高…...

快速搭建多语言网站的 FastAdmin 实践

快速搭建多语言网站的 FastAdmin 实践 引言 在全球化的背景下&#xff0c;越来越多的网站需要支持多种语言&#xff0c;以便满足不同用户的需求。FastAdmin 是一个基于 ThinkPHP 的快速后台开发框架&#xff0c;提供了丰富的功能和灵活的扩展性&#xff0c;非常适合用于快速搭…...

单片机中的flah和RAM

片机的 Flash 和 RAM 是两种关键的内存类型&#xff0c;分别用于存储程序代码和运行时数据。 Flash 存储器 用途&#xff1a;用于存储程序代码&#xff08;如固件&#xff09;和常量数据&#xff08;如查找表、字符串等&#xff09;。 特点&#xff1a; 非易失性&#xff1a;断…...

【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.2典型应用场景:日志分析、实时搜索、推荐系统

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 为什么选择Elasticsearch&#xff1f;——典型应用场景深度解析1. 引言2. 日志分析&#xff1a;海量数据的实时洞察2.1 行业痛点2.2 ES解决方案关键技术实现&#xff1a; 2.…...

solidwork智能尺寸怎么对称尺寸

以构造轴为中心线就能画智能尺寸的对称尺寸。先点击边再点击构造线...

直播cdn原理

直播CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;的原理是通过将直播流分发到多个服务器节点&#xff0c;使用户可以从最近的节点获取数据&#xff0c;从而减少延迟和提高传输效率。以下是直播CDN原理的详细解读&#xff1a; 一、核心组成部…...

如何长期保存数据(不包括云存储)最安全有效?

互联网各领域资料分享专区(不定期更新): Sheet 前言 这个问题需要考虑多个方面,比如存储介质的寿命、数据完整性、访问的便捷性,还有成本等因素。长期保存的话,存储介质的耐久性很重要。比如常见的硬盘、SSD、光盘、磁带等,各有优缺点。机械硬盘(HDD)的寿命一般在3-5年,…...

【Java】I/O 流篇 —— 打印流与压缩流

目录 打印流概述字节打印流构造方法成员方法代码示例 字符打印流构造方法成员方法代码示例 打印流的应用场景 解压缩/压缩流解压缩流压缩流 Commons-io 工具包概述Commons-io 使用步骤Commons-io 常见方法代码示例 Hutool 工具包 打印流 概述 分类&#xff1a;打印流一般是指…...

更换k8s容器运行时环境为docker

更换k8s容器运行时环境为docker k8s-V1.24之后容器运行时默认是containerd&#xff0c;若想改为熟悉的docker作为运行时&#xff0c;需要做以下操作 在每个节点安装containerd、docker; 每个节点安装cri-docker&#xff1b; 调整kubelet配置并重启验证。 1.安装docker、con…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...