检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种技术,其中大语言模型与一个检索系统配对,该系统在模型生成响应之前从外部来源获取相关文本。模型并非仅依赖其在预训练期间编码于参数中的知识,而是使用在查询时检索到的段落,这些段落通常被插入到其提示中,并要求模型基于所提供的材料进行回答。这种方法使通用模型能够回答关于其从未训练过的内容的问题,包括私人文档、近期事件或大到无法一次性放入上下文窗口的语料库。
该技术以RAG之名由Meta AI(当时称为Facebook AI)的研究人员在2020年的一篇论文中提出,该论文将预训练的序列到序列模型与密集段落检索器相结合,证明了在知识密集型任务中,检索相比纯参数模型能提高事实准确性。这一思路建立在更早的信息检索和问答研究基础之上,但RAG的框架将其与生成式Transformer模型紧密联系,并自2022年起成为行业标准术语,被聊天助手和企业搜索产品广泛采用。
架构
典型的RAG流水线包含两个阶段。在检索阶段,查询被转换为数值表示,即嵌入,并与文档集合的预计算嵌入索引进行比对,该索引通常存储在向量数据库中以实现高效的最近邻查找;这一阶段与语义搜索密切相关,后者按含义而非精确关键词匹配进行检索。在生成阶段,排名靠前的段落被插入到模型的提示中,与用户的原始问题一同呈现,模型则基于检索到的上下文生成答案,利用其通用语言能力,同时受所提供的具体事实引导。许多生产系统还会增加额外步骤,例如使用单独的模型对检索到的段落进行重排序、将文档切分为重叠片段,或针对复杂问题发起多次检索查询。
动机:幻觉与时效性
RAG被广泛用作缓解幻觉的手段,幻觉是指语言模型倾向于生成听起来合理但虚假或未经证实的陈述。由于模型的参数化知识在预训练结束时即已固定,可能过时、不完整,或对于小众及私人话题完全缺失,因此将响应基于检索到的源文本,可以让模型引用具体段落,从而减少(尽管不能完全消除)错误陈述的产生。此外,RAG还允许同一模型应用于多个私有数据集,例如公司内部文档或客户的个人文件,而无需进行微调,因为检索索引可以独立于模型本身进行替换或更新。
应用与局限
RAG支撑了大多数企业级“与文档对话”产品、基于知识库的客户支持助手,以及在回答前检索相关文件或文档的编程助手。它也是AI代理系统中的常见架构组件,代理可以在多步骤任务中将检索调用作为可用操作之一。其局限包括对检索质量的敏感性--如果检索到的段落不相关或不完整,模型仍可能产生幻觉或给出错误答案;此外,维护索引会带来额外的延迟和基础设施成本;而且检索仅在所需信息确实存在于索引语料库中时才有效。随着上下文窗口扩展到数十万token,一些从业者开始争论,在某些情况下是否可以直接将完整文档放入提示中而取代检索,但对于过大而无法整体放入上下文的语料库,以及需要保持大型文档集合可搜索且及时更新的场景,RAG仍然是标准做法。