什么是检索增强生成(RAG)?
检索增强生成(RAG) 这是一种人工智能架构,它能在查询时检索相关的外部文档,并基于这些文档对大型语言模型进行预训练,从而生成基于最新、可验证信息的答案。与仅依赖训练权重的纯大型语言模型不同,RAG系统将模型所处理的内容与知道 从……来看抬头,因此非常适合需要兼顾准确性和时效性的任务。
RAG 的工作原理
RAG 由两个组件构成:一个用于定位相关段落的检索器,以及一个用于读取这些段落并生成响应的生成器(即大型语言模型)。 帕特里克·刘易斯(Patrick Lewis)及其合著者在 2020 年 NeurIPS 大会上介绍了该架构,该架构将一个预训练的 seq2seq 模型(参数化记忆)与通过神经检索器(非参数化记忆)访问的维基百科密集向量索引相结合。 他们的论文指出,与仅采用参数化模型的基线相比,RAG生成的输出“更具体、更丰富且更符合事实”(Lewis 等,面向知识密集型自然语言处理任务的检索增强生成(NeurIPS 2020),arXiv 2005.11401, 2020)。
在运行时,该管道分为三个步骤。首先,将用户的查询编码为向量,并与预先索引的文档存储库进行比对,以筛选出最相关的段落。其次,将这些段落作为额外输入追加到模型的上下文窗口中。 第三,大型语言模型(LLM)生成响应,将自身的参数化知识与检索到的证据相结合。
文档存储通常是一种向量数据库:该系统用于存储文本片段的高维嵌入,并支持快速的近似最近邻搜索。支持 RAG 应用的向量数据库同比增长了 377%,这是所有被追踪的大语言模型(LLM)相关技术类别中增长最快的(Databricks,《数据与人工智能现状》(企业采用与增长趋势), 2024)。
为什么RAG成为标准的归因方法
大型语言模型(LLMs)会在预训练结束时冻结其知识。 任何在此截止点之后发生变化的事实——无论是价格、法规还是产品规格——都需要重新进行训练或引入检索层。RAG 能够以较低成本解决这一问题。无需重新训练,只需更新文档存储库,模型便会在下次收到相关查询时自动引用最新信息。
企业的采用情况反映了这种实用性。RAG已成为将大型语言模型(LLMs)锚定在专有数据或当前数据上的主流方法,其采用率从前一年的31%上升至2024年的51%(Menlo Ventures,2024:《企业生成式人工智能现状》, 2024)。
第二个优势是可审计性。由于检索到的文档属于上下文窗口的一部分,开发人员可以检查模型使用了哪些段落,并将论点追溯到来源。而对于纯参数化模型而言,这一点很难甚至无法实现。
使用场景
企业知识库。 内部文档、法律文件和支持内容经常发生变化。RAG 管道会对这些文档进行索引,使员工或客户能够使用自然语言进行查询,而无需等待下一次模型微调。
面向人工智能代理的实时网络数据。 AI 代理需要实时信息、产品页面、新闻和搜索结果,而这些是任何静态语料库都无法提供的。将实时网络内容输入检索层,可为代理提供准确、最新的上下文信息。 Massive 的 Web Render API 可在此充当新鲜网络数据源层:Search 端点会返回已渲染的搜索结果(包括通过awaiting=ai),而“Browsing”端点可从任何公开的URL返回纯净的HTML或Markdown格式内容,这两种格式均适合进行分块处理并嵌入到RAG管道中。
代码和 API 文档。 库的 API 会随着每次发布而变化。在版本化的文档语料库上运行 RAG,可让编码助手引用当前使用版本的正确方法签名,而不是生成过时的签名。
客户支持自动化。 基于实时产品目录、退货政策文件和已知问题列表构建的客服机器人能够准确回答问题并引用相关政策,从而减少问题升级。
最佳实践
块大小很重要。 分块过小会丢失上下文;分块过大则会稀释相关信号。大多数从业者通常从256-512个令牌的分块开始,并设置10-20%的重叠度,以避免在句子中间进行分割。
请先清理源文档。 检索到的页面中的模板内容、导航文本和广告会产生噪声嵌入,从而降低答案质量。如果提取实时网页内容,请在索引前将其解析为干净的 Markdown 或纯文本。
分别评估检索和生成。 糟糕的答案可能是由于检索不佳(未返回正确的文档)或生成不佳(模型忽略了正确的文档)造成的。为每个阶段分别设置指标,有助于您找出并修复正确的组件。
根据与源数据变更频率相匹配的计划刷新索引。 每天更新的产品目录需要每天重新建立索引。每季度更新的法律语料库则可以减少重新建立索引的频率。检索存储库中过时的文档是导致 RAG 错误的常见原因。
注意上下文窗口的限制。 每个检索到的片段都会消耗令牌。当段落数量较多时,可能会超出模型的上下文窗口范围,或导致信号被稀释。根据相关性对检索到的片段进行重新排序,并仅保留排名前三至五位的片段,是一种切实可行的解决方法。
结论
RAG 解决了大型语言模型(LLM)最常见的生产故障模式:由于模型无法获取训练截止点之外的信息,生成的答案虽然看似合理,但可能过时或错误。通过将检索与生成分离,该架构使生成模型专注于推理,而检索组件则负责获取当前事实。 2024年,企业采用率已突破51%大关,而支撑该架构的基础设施——包括向量数据库、检索API以及实时网络访问层——现已足够成熟,大多数团队即使没有专业的机器学习知识,也能构建出可运行的RAG管道。 工程方面面临的主要挑战已不再是是否采用 RAG,而是从哪些数据源进行检索,以及如何确保这些数据源保持最新且干净。
常见问题解答
微调是通过额外训练将新知识融入模型权重中的过程。RAG 则保持权重不变,并在推理时通过检索文档来提供最新信息。微调更适合教会模型新的风格或任务;RAG 则更适合以最低成本保持答案的时效性。
RAG 通过向模型提供源文本作为答案的依据来减少幻觉现象,但并不能完全消除这些现象。模型仍然可能忽略检索到的段落、误读内容,或者用虚构的细节填补空白。检索质量、提示词设计以及生成后的验证都会影响幻觉现象的发生频率。
RAG 可从任何可分块和嵌入的文本中检索信息:PDF、HTML 页面、数据库记录、Markdown 文件、代码或结构化表格。检索质量取决于源文档在索引前经过清理和分块的程度。
向量数据库存储文本片段的嵌入向量,并支持快速相似度搜索。当收到查询时,检索层会对查询进行嵌入处理,并在向量数据库中搜索最匹配的片段。这种相似度搜索是每个 RAG 系统中检索步骤的核心。
是的。检索层不再使用预先构建的静态索引,而是在查询时直接获取实时网页,提取相关文本后再将其传递给大型语言模型(LLM)。这种方法以牺牲每条查询的延迟为代价,用实时准确性取代了稳定索引的可预测性。