作者:孙鹏飞,南京大学计算机科学与技术
这半年,随着国内的月之暗面和海外的谷歌等公司发布支持超长上下文LLM,并且这些模型在处理超长上下文时也表现出令人印象深刻的效果。例如,谷歌的Gemin 1.5 Pro在Greg Kamradt推广的“Needle in a Haystack”实验中,它实现了99.7%的召回率[1]。这成功引起了AI圈热烈讨论。越来越多的人质疑RAG这种技术(想了解更多RAG的实战经验可以参见RAG实战全解析:一年探索之路)是否有存在的意义?围绕这个问题我先尝试回答一下。这两种技术并不是互斥的,在一定程度上相辅相成。我们相信RAG技术绝对会继续存在,但其架构将在需要时发展以适应更长的上下文。
为什么需要RAG?
实际上,RAG和超长上下文LLM在目标上是一致的:都是为了提供给LLM足够的信息来回答复杂问题,即让模型通过上下文学习(In Context Learning,ICL)的方式进行回答。然而,它们采取的策略和技术有所不同。RAG依赖于检索组件来精确地提取和筛选信息,然后以一种细粒度的方式将这些信息作为上下文提供给LLM。而超长上下文LLM做的事情则是把这种召回通过prompt的方式交给LLM本身。所以可以把RAG理解成一个给输入LLM的prompt(上下文)去噪的过程。
如果说超长上下文LLM与RAG在目标上有所重叠,即都是为了提高模型对复杂问题的回答质量,那么为什么还要使用RAG呢?这里从个人实战的角度给出如下观点:
可解释性
虽然超长上下文LLM能够处理大量的信息,但有时会产生所谓的“幻觉问题”,即模型可能会生成看似合理但实际上错误或无意义的信息。这种现象增加了模型输出的不确定性,降低了用户的信任度。然而,在绝大多数情况下,我们又希望尽可能让LLM的输出“有迹可循”。RAG系统通过引用具体的支撑文档来增强输出的可解释性,使得模型的决策过程更加透明。当模型基于外部数据源生成答案时,它可以直接指出所参考的信息来源,这不仅提升了答案的可靠性,还让用户能够验证信息的真实性,增强了人机交互的信任感。
噪声数据对LLM的影响
《The Power of Noise: Redefining Retrieval for RAG Systems[2]》指出,超长上下文LLM在处理复杂问题时,会受到噪声数据的影响。如果通过限制LLM仅使用与问题紧密相关的信息,可以降低模型受到不相关或错误信息干扰的风险。RAG通过检索最准确和最相关的文档片段,可以在一定程度上减少噪声数据对模型回答的影响,从而为LLM提供更高质量的输入。
成本效益考量
超长上下文LLM在处理大量文本时,其计算和存储成本可能会随着上下文长度的增加而显著上升。这种成本的增加可能在某些情况下并不经济,尤其是在资源有限的环境中。RAG提供了一种成本效益更高的解决方案。
上下文窗口(context window)是内存,RAG是硬盘
在去年11月,OpenAI著名科学家Andrej Karpathy(已经离职)提出了一种全新的理念——「大模型操作系统」。具体如下图所示。
他指出传统操作系统中的缓存RAM(内存),对应为LLM OS中的上下文窗口,存储了当下正在处理的文本。而传统操作系统中的文件存储(硬盘),则对应LLM OS中的RAG技术,存储了外部知识库的数据。基于此,我们把它类比成最常见的计算机系统之后,可以发现,随着技术的发展,内存的容量虽然在不断增加,但总会存在一个上限,这个上限取决于当前技术的限制和经济成本,并且通常不会超过硬盘的容量。因此,内存和硬盘各有其用途,它们在计算机系统中协同工作,以满足不同的需求。此外,这种协同作用反映了计算机体系结构中不同类型的存储和处理之间的协作关系。
从这个角度出发,超长上下文LLM和RAG在LLM OS中相得益彰,它们共同协作,以适应不同的应用场景和需求。超长上下文LLM通过延长上下文窗口,允许系统处理更长的文本序列,而RAG则通过访问外部知识库,为系统提供更广泛的信息支持。这两种技术的结合,不仅提升了系统的处理能力,也极大地丰富了其应用范围,使得LLM OS能够更加灵活和高效地应对各种复杂的任务。
各有千秋,合作胜于竞争
尽管有一种方法优于另一种方法的争论,但认识到RAG和超长上下文LLM并不相互排斥是至关重要的。RAG技术和超长上下文LLM技术两者各有千秋,各有独特的优势,合作胜于竞争。为了更清晰的对比两种技术之间的差异,图2将从成本、性能和效率、可解释性等多方面进行全面对比。
超长上下文LLM | RAG | |
成本和效率 | 处理大量文本是昂贵;效果可能受限于模型的上下文窗口大小,在窗口范围内,生成文本时速度较快,因为不需要额外的检索步骤。 | 它只检索最相关的信息,使其更快、更具成本效益。 |
准确性 | 基于已学习的模式生成内容,可能会生成与事实不符的“幻觉”,尤其是在处理它们未曾见过或训练数据中不常见的信息时。 | 基于检索到的最相关的信息生成内容,可以降低幻觉的风险,提高事实的准确性。 |
检索和推理动态 | 在整个解码过程中集成检索和推理的优势,允许更细致和适应性更强的响应。 | 它的设计是预先检索信息,这可能会限制其在动态发展的对话或复杂推理任务中的灵活性。 |
可扩展性 | 可以通过增加模型参数来提高性能,但这会增加训练和部署的难度。 | 它的可扩展性体现在它可以接入更大、更多样化的知识库,只要检索系统足够强大。 |
可解释性 | 大模型的决策过程往往是黑箱的,输出难以解释,用户难以了解模型如何做出决策。 | 可以提供更多的透明度和可解释性,因为检索的文档可以被审查。 |
可溯源性 | 输出缺乏可溯源性,无法明确指出信息的原始来源。 | 它在可溯源性方面具有优势,因为它可以引用具体的文档或数据点,提高了信息的可溯源性。 |
专业数据 | 在处理结构化或非结构化数据时,可能需要特定的调整或预处理步骤来适应不同的数据类型。 | 它能够处理多种类型的数据源,包括结构化和非结构化数据,但需要有效的索引策略来管理复杂数据 |
从表中可以看出,单纯的超长上下文LLM在处理大量数据时有其优势,但它在容量、成本、性能和效率这几个方面仍存在明显的局限性。例如,在处理超长文档时,超长上下文LLM可能需要使用大量Token,这会显著增加推理的成本。尽管这样可以使模型快速阅读文本,但如果每次回答问题都把所有资料从头到尾阅读一遍,这会影响效率。而RAG技术的出现在一定程度上缓解了上述问题,但它过于依赖有效的信息检索机制,如果检索系统未能找到相关或正确的信息,那么生成的内容质量会受到影响;即使检索到了相关文档,模型的上下文窗口可能限制了它的处理能力,导致生成的内容不恰当。
那是否可以将两者结合?答案是肯定的。例如,利用RAG在检索方面的精度可以增强超长上下文LLM的广泛推理能力,反之亦然。因此,超长上下文LLM+RAG的方式能充分发挥各自的优势,扩大模型处理信息的能力,大幅度提高数据处理的效率和精确性。最近,滑铁卢大学的研究工作也更进一步证实该观点,他们尝试将RAG和超长上下文LLM整个地结合了起来,提出LongRAG,效果领先GPT-4 Turbo和claude等模型。
展望未来
Oriol Vinyals指出,LLM的发展不应该被视为一场零和竞争,而是一场汇聚多方智慧、共同进步的协作探索。RAG与超长上下文LLM的结合,正是这种协作精神的体现,它们共同应对人工智能研究中遇到的多样化挑战。通过将RAG的检索增强能力与超长上下文LLM的深度理解能力相结合,我们能够构建出更为强大和灵活的人工智能系统。这种集成不仅提高了模型对复杂问题的回答质量,也为人工智能的实际应用开辟了新的道路。
引用链接
[1]
谷歌的Gemin 1.5 Pro在Greg Kamradt推广的“Needle in a Haystack”实验中,它实现了99.7%的召回率: https://storage.googleapis.com/deepmind-media/gemini/gemini_v1_5_report.pdf[2]
The Power of Noise: Redefining Retrieval for RAG Systems: https://arxiv.org/pdf/2401.14887