2026年7月9日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

RAG已死?深入解读RAG与超长上下文LLM之争!【上】

发布日期:2024-06-18 05:07:56 浏览次数: 4551
作者:AI大模型应用实践

微信搜一搜,关注“AI大模型应用实践”


现在让我们来聚焦今年以来的一个有趣话题:超长上下文的大模型(Long Context LLM)是否会杀死RAG(检索增强生成)应用?



话题回顾



自从去年下半年以来,大语言模型的上下文窗口(Context Window)正在以不可思议的速度增长,相比一年之前大模型的上下文窗口还普遍挣扎在4K-8K,现如今超过128K的上下文窗口的大模型比比皆是,从Claude2开始的200K,到Claude3与Gemini1.5号称的1M上下文,似乎上下文窗口的大小已经不再成为我们使用大模型的顾虑,特别是在Gemini1.5发布的技术报告中,关于其具备的“大海捞针”(在超长的上下文中精确检索到特定位置的某个事实性知识点)能力的实验结果,立刻给火热的AI界带来一个争议话题:

如果未来超长的上下文窗口已经足够把几百个文档一股脑的塞入到大模型对话的窗口,并能完美的在其中检索到事实知识,那么还有必要做任何形式的外部索引与检索,来给大模型提供知识“外挂”(RAG)吗?

笔者的观点是,尽管模型厂家试图用各种测试结果来告诉我们模型将搞定一切,而技术狂热者永远希望找到一个简单优雅且能一劳永逸解决问题的银弹。但至少在目前的条件下,很难想象每次需要一个“针”的时候都要把整个“大海”都交给大模型用来推理,无论从效用、性能还是成本角度都存在很多需要思考的问题,比如:

  • 1M的tokens窗口是否真的已经足够?那如果还不够呢?

  • 如此大tokens上下文的反复携带,时间、网络与推理的成本上升值得吗?

  • 如何把企业应用中大量实时变化、形式多样的知识每次都输入给模型?

  • LLM的“大海捞针”能力可靠吗?和“针”的数量和位置有关系吗?

  • 知识密集型任务并不仅仅是简单的事实问答,LLM能否都能应对?

  • 过长的上下文是否会让LLM应用的跟踪调试与评估等变得更困难?

  • 相对于RAG在应用层的精确控制,把东西都塞给LLM如何确保知识安全性?


所以,超长上下文的LLM与RAG结合,模型为应用提供优化基础,应用则提供模型所不具备的灵活性,在简洁性与灵活性之间取得平衡,或许是当下最合适的探讨方向。著名LLM开发框架LangChain公司的Lance Martin在近期的一次技术研讨中,分享了关于“Is RAG really dead”的话题,其观点总结就是:

  • 当前大模型的能力还不足够取代RAG

  • RAG不是会死,而是会有更多改变


我们不妨从这两个方向来深入解读与探讨。



LLM的“大海捞针”够用吗



RAG应用的核心能力其实是“检索”:结合各种方法精确检索到“针”所在的chunk,然后交给LLM推理。所以这也让LLM流派认为:既然LLM已经可以在超长的上下文中精确检索,那么复杂的RAG自然就可以被替代。针对这个问题,让我们看看Lance做的著名的“大海捞针”的实验:

这是一个多“针”的实验,其基本的方法是这样的:

在一个超长的上下文中插入多个“针”(needles,即知识点),比如上面的图中,把制作完美披萨的三个秘密成分,作为三个“针”插入到上下文的特定位置(如开头、中间与结尾),并且让其他内容和这个三个“针”的知识完全不相关。然后要求LLM基于这个上下文来回答:制作完美披萨的秘密成份有哪些?以验证LLM在上下文中精准的检索出这三个“针”并推理答案的能力。 采用类似的方法,你就可以测试不同的“针”的数量、不同的上下文长度、不同的“针”位置下大模型的表现。

【不同的“针”数量】

先看这样一个测试结果图,这是针对GPT-4模型在120K上下文中“大海捞针”能力的测试:

  • 横轴代表注入的不同“针”的数量,这里测试了注入1,3,10个“针”的情况

  • 纵轴代表了在不同“针”数量下,大模型检索(绿)与推理(橙)的正确率


一个很容易得出的结论是:随着“针”的数量增加,LLM的检索与推理的正确率会下降(毕竟从大海里捞出十个针要比捞一个针更困难)。

【不同的上下文长度与“针”位置】

现在Lance切换了不同的上下文长度(从最小的1K到最大的120K),同时在每次的上下文中都会插入10个“针”,这10个针分布在上下文从头部到尾部的10个位置(均匀分布),然后测试LLM在不同长度上下文中出这十个“针”的能力。

测试结果用下面的热图来表示,其中绿色区域代表检索的成功率较高,红色区域代表检索成功率较低:

这里观察到的一些结论是:

  • LLM检索的成功率和上下文长度相关。比如在1K的上下文中,GPT4可以轻而易举的找到10个“针”,但是当上下文扩大10倍甚至100倍后,很显然发生了大量的丢失(红色区域)。

  • LLM大海捞针的能力似乎与“针”所在的位置有关。有点类似你在看一本很长的小说,可能越靠后的部分越容易回顾起细节。在这个图中的体现就是,越在上下文末尾出现的“针”(比如编号6-10),越容易被检索到,即使是在很长的上下文中也不会被遗漏。

有一个可能的解释是:LLM(大型语言模型)训练的任务与上下文增强的生成任务之间存在不匹配。在用于预训练LLM的文档中,如网页、书籍、文章和代码,预测特定token的最有信息量的token通常来自于最近的tokens,这导致了一个学习到的偏差,即优先关注最近的tokens。极端的近期偏差会让这类任务产生偏离,因为离的很远的tokens也可能包含非常相关与重要的信息。



亲测“大海捞针”



实际上每个人都可以在Github上搜索LLMTest_NeedleInAHaystak项目,来自行测试任意大模型的“大海捞针”的能力。现在我们来测试国内两个模型,以展示这个测试过程。

【测试工具的使用】

这个测试工具的基本使用是这样的:

  1. 指定一个最小的上下文长度比如1K,以及最大的长度比如20K,同时指定间隔数量比如10个,那么工具会自动在1K-20K之间划分出10个不同的上下文长度用来依次做测试,比如从1000,3556,6111...一直到20K。

  2. 指定测试“针”所在的多个位置,也是通过指定一个间隔数量来设定。比如指定为10,那么工具会自动在0%,11%,22%...100%的这10个不同位置放置“针”,并测试每次的结果。

  3. 每一次LLM生成后,会借助一个评估器(使用了LangChain的evaluator组件)与大模型(默认为chatgpt3.5)来对答案的正确性进行评价,评价标准最高10分,最低1分。结果会输出到本地文件保存,并用来做可视化图表。

  4. 工具支持单个“针”的测试,也支持多“针”的测试(多“针”测试时的代码有少量bug)。我们这里的测试以单针测试为主。


【测试的用例】

测试中注入的“针”默认是这样一段与其他上下文无关的事实:

The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.

测试中输入的其他上下文是通过程序读取的本地多个TXT文件。

测试中要求基于上下文回答的问题是(显然就是“针”可以回答问题):

What is the best thing to do in San Francisco?

【测试过程】

1. 从Github下载源代码,安装相关依赖(不要直接使用Pypi的Package)

git clone https://github.com/gkamradt/LLMTest_NeedleInAHaystack.git
cd LLMTest_NeedleInAHaystack
pip install -r requirements.txt

2. 默认不支持国内模型,此处我们借助OneAPI项目搭建一个简单的API网关,将所有模型接口适配为OpenAI兼容接口,然后做如下修改:

  • 两个环境变量NIAH_MODEL_API_KEY与NIAH_EVALUATOR_API_KEY设定为OneAPI中的API-Key

  • 找到项目中的两个openai.py文件,将其中OpenAI对象的base_url参数指向自己的OneAPI服务器,如:

self.evaluator = ChatOpenAI(model=self.model_name,
base_url="http://x.x.x.x:3500/v1",...)

3. 现在可以开始测试,在LLMTest_NeedleInAHaystack目录下运行如下命令:

python -m needlehaystack.run

注意,必要参数可以在run.py中直接修改,也可在上面的命令行中携带,主要是下图中红色部分的参数:

【测试结果】

我们这里对两个模型做了简单的测试,考察模型从1K到24K之间的上下文的捞针能力,上下文大小分成10个等级,每个等级会在上下文的十个不同位置注入测试“针”,以获得最后评估结果。

  1. 通义千问qwen-plus,最大支持32K上下文,测试的结果如下:

可以看到横轴上代表从1K上下文一直到24k的十个不同上下文,纵轴上代表测试的“针”在上下文中所处的不同位置。从测试结果上看,当上下文逐渐增大时,开始出现很明显的“幻觉”问题,开始编造答案,导致评分明显降低。当然这里没有测试更强大的qwen-max模型,或许会有不一样的表现。

一个有趣的问题是,似乎并没有明显表现出上述的“近期偏离”的问题(即“针”所处的上下文深度越深,越容易被大模型所检索到)。

我们也进行了一个简单的多“针”测试(即文章最开头关于披萨的三个配方的问题),测试结果如下,整体来说还是上下文越小,表现越佳:


2. 智谱的glm-3-turbo模型,最大支持128K上下文,单”针“的测试结果如下:

同样,没有测试智谱最新的glm-4模型,而是测试了glm-3-turbo模型,由于其最大能够支持128k上下文,因此我们在上述相同条件下增加测试了120K上下文时的表现。测试结果显示,glm-3-turbo在与千问相同条件下的表现几乎完美,但当把上下文扩展到120K时,其失败的概率也会明显增加。这也印证了随着上下文增加时,大模型的捞”针“的能力会开始打折扣。

有趣的事,glm-3-turbo在多“针”用例下的测试结果似乎反而不如千问(如下图),根据实际观察,发现glm-3-turbo会出现一定量的遗漏(3个配方只检索到2个),或者编造(3个配方变成4个)。

处glm-3-turbo的答案多出一个

以上我们演示了利用开源项目来做大模型海底捞针能力的测试,尽管我们使用上下文仍然不足够大,比如统一采用128K上下文的模型(仅在glm测试中增加了128K的测试),但也基本可以得出这样的结论:当前大模型能否在超长的上下文中准确的检索知识并完成推理,并不是绝对的,它至少会依赖:

  • 输入的上下文长度

  • 关联知识在上下文中所处的位置

  • 完成任务所依赖的关联知识数量


因此,即使完全不考虑成本与响应速度问题,试图依赖超长上下文的LLM来准确检索与推理以完成知识密集型的任务,也是不太现实的。而更加可控的RAG,如果能够结合超长上下文的LLM,又可以产生哪些变化呢?我们下次再讨论。


END






53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅