RAG是否被取代(缓存增强生成-CAG)吗?

引言:

        本文深入研究一种名为缓存增强生成(CAG)的新技术如何工作并减少/消除检索增强生成(RAG)弱点和瓶颈。

LLMs 可以根据输入给他的信息给出对应的输出,但是这样的工作方式很快就不能满足应用的需要:

因为很多时候回答问题,要么知识不足,让我回答的问题会有错误, 而且很多时候回答问题的信息需要及时更新的,但是大模型的训练却不能进行同步。

为了确保LLMs能够使用最新信息来回答查询,以下技术被广泛使用:

  • 模型微调

  • 低秩适应(LoRA) 微调

  • 检索增强生成(RAG)

最近研究人员刚刚发布了一种新的技术:一种名为缓存增强生成(CAG)的新技术,可以减少对RAG(因此也减少了它的所有缺点)的需求。CAG通过将所有相关知识预先加载到LLM的扩展上下文中,而不是从知识存储中检索它,并在推理时使用这些知识来回答查询它的效果令人惊讶: 当与长上下文LLMs一起使用时,结果表明这种技术在多个基准测试中要么优于RAG,要么可以作为RAG的有效补充。通过下文,我们深入了解缓存增强生成(CAG)的工作原理以及与RAG相比的表现。

一:什么是缓存增强生成(CAG)?

       1:技术概述:

缓存增强生成(Cache-Augmented Generation, CAG)是一种新兴的技术,旨在通过预加载和缓存相关知识,提高大型语言模型(LLMs)的生成效率和响应速度。与传统的检索增强生成(Retrieval-Augmented Generation, RAG)相比,CAG 通过将所有相关知识预先加载到模型的上下文窗口中,并缓存其运行时参数,从而在推理时直接生成响应,无需实时检索。

      2:工作执行原理:

CAG 的核心在于两个主要组件:缓存生成模型。缓存存储了在之前交互或计算过程中生成的文本片段(或知识),这些存储的信息随后用于指导下一步的生成,从而加快生成过程并提高相关性。

具体步骤如下:

  1. 缓存构建:在模型生成文本时,关键信息(如常用短语、学习到的事实或上下文)被存储在缓存中。这可以在不同级别进行,无论是单词级别、句子级别,还是更抽象的语义级别。

  2. 缓存查找:当模型被要求生成新文本时,它首先检查缓存以查找相关的信息。如果找到匹配项,模型会检索并将其纳入新生成的内容中,减少从头开始计算的需求。

  3. 缓存更新:随着时间的推移,模型生成更多文本时,缓存会用新的有用信息进行更新,保持其新鲜感和相关性。

3:RAG技术原理简介:

它是一种知识整合和信息检索技术,允许LLM使用特定于用例的私有数据集来产生更准确和最新的响应。

RAG中的技术过程如下:

  • 检索:从知识库/特定私有数据集中 检索 相关信息/文档的过程。

  • 增强:检索到的信息 添加 到输入上下文的过程。

  • 生成:LLM基于原始查询和增强上下文 生成 响应的过程。

RAG-RAG的全称是Retrieval-Augmented Generation-检索增强生成

但RAG并不是一种完美的技术, 它也有非常多的缺点。

•检索延迟:在推断过程中从外部知识库获取信息需要时间, 基本上相当于传统搜索引擎需要的时间, 当然一般情况下还是可以忍受。

•检索错误:由于检索过程中选择了不相关和不完整的文档,可能会导致不准确或不相关的响应, 这就很依赖搜索引擎剧部分的效果。

•知识碎片化:不当的分块和不正确的排名可能导致检索到的文档不连贯且缺乏连贯性。所以很多时候在做RAG的时候如何去分辨如何提前对新型信息进行预处理就非常重要。

•复杂性增加:构建RAG流程需要额外复杂的基础设施,并涉及大量的维护和更新开销。  对,其实要做好RAG,其实跟做好一个受损性是比较类似的,开销都是比较大的。

二:CAG和RAG的表现和优势:

   1:用于评估 CAG 性能的考虑了两个问答 Benchmark:
  • 斯坦福问答数据集(SQuAD)1.0:由众包工作者在一组维基百科文章上提出的 100,000+ 个问题组成。每个问题的答案是相应阅读段落中的文本片段。

  • HotPotQA:由 113,000 个基于维基百科的问题-答案对组成,需要跨多个文档进行多跳推理。    

从每个数据集中创建了三个测试集,其中参考文本的长度不同,增加参考文本的长度会使检索更具挑战性。

Image

研究者使用 Llama 3.1 8-B Instruction model(上下文长度为 128k 个标记)来测试 RAG 和 CAG。

2:CAG 真的能够替代RAG吗?

令人惊讶的是,结果显示CAG 的表现优于稀疏(BM25)和密集(OpenAI Indexes)的 RAG 系统,在大多数评估中获得了最高的 BERT-Score。    

Image

此外,CAG 大大减少了生成时间,特别是随着参考文本长度的增加。

对于最大的 HotpotQA 测试数据集,CAG 比 RAG 快约40.5 倍。这是一个巨大的提升!    

Image

CAG 看起来是一个非常有前途的方法,可以确保在未来 LLM 的上下文长度进一步增加时从中检索到最新的信息(独立使用或与 RAG 结合)。

总结:

1: CAG 的优势
  • 低延迟:无需实时检索数据,从而加快推理速度。
  • 简化设计:无需向量数据库或嵌入模型,降低了系统复杂性。
  • 高吞吐量:对于同一数据集上的重复任务,效率更高。
2: CAG 的局限性
  • 知识大小有限:CAG 要求整个知识源必须能够适应模型的上下文窗口,因此对于涉及极其大数据集的任务不太适用。
  • 上下文长度限制:LLMs 的性能可能会随着上下文长度的增加而下降。
3: CAG 的应用场景
  • 企业文档助手:静态数据集,如员工手册和用户手册。
  • 医疗知识检索:医疗指南或治疗协议。
  • 法律文件摘要:预加载合同和法律简报以进行快速分析。
  • 在线学习平台:预加载静态课程内容以进行动态查询。
4:CAG 的未来展望

随着上下文窗口限制的增加(例如 1M 个标记),CAG 将变得更加可扩展。此外,结合 CAG 和 RAG 的混合架构将平衡静态和动态数据需求,而优化的标记管理将更有效地处理大型数据集。

5:结论

缓存增强生成(CAG)并不是检索增强生成(RAG)的通用替代品,但在具有有界数据集、低延迟要求和静态知识库的场景中表现出色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/962825.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Tauri 2 + Next.js 开发跨平台桌面应用实践:Singbox GUI 实践

Singbox GUI 实践 最近用 Tauri Next.js 做了个项目 - Singbox GUI,是个给 sing-box 用的图形界面工具。支持 Windows、Linux 和 macOS。作为第一次接触这两个框架的新手,感觉收获还蛮多的,今天来分享下开发过程中的一些经验~ 为啥要做这个…

三甲医院大型生信服务器多配置方案剖析与应用(2024版)

一、引言 1.1 研究背景与意义 在当今数智化时代,生物信息学作为一门融合生物学、计算机科学和信息技术的交叉学科,在三甲医院的科研和临床应用中占据着举足轻重的地位。随着高通量测序技术、医学影像技术等的飞速发展,生物医学数据呈爆发式…

2025_2_1 C语言中关于字符串

1.字符串 C语言中的字符串都是字符数组,以空字符 ‘\0’结尾。 创建一个字符数组必须以空字符结尾,不然会访问非法区域,直到找到\0为止 char c[] {a, b, c, \0};长度为n的字符串字面值,会存储在虚拟内存中的只读数据段中&#…

Redis篇 Redis如何清理过期的key以及对应的解决方法

Redis设置Key过期时间 在 Redis 中,可以通过特定的命令为 Key 设置过期时间,使得 Key 在一定时间后自动删除,这对于管理缓存、验证码等临时数据非常有用。 解决方法 1. Redis过期删除策略 1.1 如何实现过期策略 对一个 key 设置了过期时间…

java练习(1)

两数之和(题目来自力扣) 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相…

Python3 OS模块中的文件/目录方法说明十四

一. 简介 前面文章简单学习了 Python3 中 OS模块中的文件/目录的部分函数。 本文继续来学习 OS 模块中文件、目录的操作方法:os.statvfs() 方法,os.symlink() 方法。 二. Python3 OS模块中的文件/目录方法 1. os.statvfs() 方法 os.statvfs() 方法用…

从理论到实践:Linux 进程替换与 exec 系列函数

个人主页:chian-ocean 文章专栏-Linux 前言: 在Linux中,进程替换(Process Substitution)是一个非常强大的特性,它允许将一个进程的输出直接当作一个文件来处理。这种技术通常用于Shell脚本和命令行操作中…

ZZNUOJ(C/C++)基础练习1041——1050(详解版)

1041 : 数列求和2 题目描述 输入一个整数n&#xff0c;输出数列1-1/31/5-……前n项的和。 输入 输入只有一个整数n。 输出 结果保留2为小数,单独占一行。 样例输入 3 样例输出 0.87注意sum 1相当于sumsum1 注意sum * 1相当于sumsum*1 C语言版 #include<stdio.h> // 包含…

2021 年 6 月大学英语四级考试真题(第 2 套)——纯享题目版

&#x1f3e0;个人主页&#xff1a;fo安方的博客✨ &#x1f482;个人简历&#xff1a;大家好&#xff0c;我是fo安方&#xff0c;目前中南大学MBA在读&#xff0c;也考取过HCIE Cloud Computing、CCIE Security、PMP、CISP、RHCE、CCNP RS、PEST 3等证书。&#x1f433; &…

【Block总结】CPCA,通道优先卷积注意力|即插即用

论文信息 标题: Channel Prior Convolutional Attention for Medical Image Segmentation 论文链接: arxiv.org 代码链接: GitHub 创新点 本文提出了一种新的通道优先卷积注意力&#xff08;CPCA&#xff09;机制&#xff0c;旨在解决医学图像分割中存在的低对比度和显著…

grpc 和 http 的区别---二进制vsJSON编码

gRPC 和 HTTP 是两种广泛使用的通信协议&#xff0c;各自适用于不同的场景。以下是它们的详细对比与优势分析&#xff1a; 一、核心特性对比 特性gRPCHTTP协议基础基于 HTTP/2基于 HTTP/1.1 或 HTTP/2数据格式默认使用 Protobuf&#xff08;二进制&#xff09;通常使用 JSON/…

Qt常用控件 输入类控件

文章目录 1.QLineEdit1.1 常用属性1.2 常用信号1.3 例子1&#xff0c;录入用户信息1.4 例子2&#xff0c;正则验证手机号1.5 例子3&#xff0c;验证输入的密码1.6 例子4&#xff0c;显示密码 2. QTextEdit2.1 常用属性2.2 常用信号2.3 例子1&#xff0c;获取输入框的内容2.4 例…

[b01lers2020]Life on Mars1

打开题目页面如下 看了旁边的链接&#xff0c;也没有什么注入点&#xff0c;是正常的科普 利用burp suite抓包&#xff0c;发现传参 访问一下 http://5edaec92-dd87-4fec-b0e3-501ff24d3650.node5.buuoj.cn:81/query?searchtharsis_rise 接下来进行sql注入 方法一&#xf…

前端自动化测试(一):揭秘自动化测试秘诀

目录 [TOC](目录)前言自动化测试 VS 手动测试测试分类何为单元测试单元测试的优缺点优点缺点 测试案例测试代码 测试函数的封装实现 expect 方法实现 test 函数结语 正文开始 &#xff0c; 如果觉得文章对您有帮助&#xff0c;请帮我三连订阅&#xff0c;谢谢&#x1f496;&…

FFmpeg工具使用基础

一、FFmpeg工具介绍 FFmpeg命令行工具主要包括以下几个部分: ‌ffmpeg‌:编解码工具‌ffprobe‌:多媒体分析器‌ffplay‌:简单的音视频播放器这些工具共同构成了FFmpeg的核心功能,支持各种音视频格式的处理和转换‌ 二、在Ubuntu18.04上安装FFmpeg工具 1、sudo apt-upda…

upload labs靶场

upload labs靶场 注意:本人关卡后面似乎相比正常的关卡少了一关&#xff0c;所以每次关卡名字都是1才可以和正常关卡在同一关 一.个人信息 个人名称&#xff1a;张嘉玮 二.解题情况 三.解题过程 题目&#xff1a;up load labs靶场 pass 1前后端 思路及解题&#xff1a;…

解锁豆瓣高清海报(二) 使用 OpenCV 拼接和压缩

解锁豆瓣高清海报(二): 使用 OpenCV 拼接和压缩 脚本地址: 项目地址: Gazer PixelWeaver.py pixel_squeezer_cv2.py 前瞻 继上一篇“解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路”成功爬取豆瓣电影海报之后&#xff0c;本文将介绍如何使用 OpenCV 对这些海报进行智…

C++:虚函数与多态性习题2

题目内容&#xff1a; 编写程序&#xff0c;声明抽象基类Shape&#xff0c;由它派生出3个派生类&#xff1a;Circle、Rectangle、Triangle&#xff0c;用虚函数分别计算图形面积&#xff0c;并求它们的和。要求用基类指针数组&#xff0c;使它每一个元素指向一个派生类对象。 …

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…

电脑优化大师-解决电脑卡顿问题

我们常常会遇到电脑运行缓慢、网速卡顿的情况&#xff0c;但又不知道是哪个程序在占用过多资源。这时候&#xff0c;一款能够实时监控网络和系统状态的工具就显得尤为重要了。今天&#xff0c;就来给大家介绍一款小巧实用的监控工具「TrafficMonitor」。 「TrafficMonitor 」是…