RAG的演进:从朴素RAG到高级RAG,再到模块化RAG架构
作者: 新慧团 来源: 新慧团
点击
上方蓝字关注我们
RAG是一种逐步发展的架构,从朴素RAG、高级RAG到模块化RAG,通过语义相似度计算从外部知识库检索相关信息,从而增强LLM,并通过预/后检索策略、模块重组等技术来优化其检索和生成能力。
技术介绍
大型语言模型 (LLM) 彻底改变了人工智能领域,ChatGPT、Bard、Claude等模型在自然语言任务甚至其他领域的成功足以证明这一点。这些LLM能够生成从创意写作到复杂代码的各种文本。然而,LLM也面临着诸多挑战,例如内容幻觉、知识过时以及推理过程不透明、不可追溯等问题。检索增强生成 (RAG) 作为一种很有前景的解决方案应运而生,为LLM集成了外部数据库中的知识信息。这显著提高了生成内容的准确性和可信度(特别是在知识密集型任务中),并支持知识的持续更新和特定领域信息的集成。
RAG通过语义相似度计算,从外部知识库中检索相关的文档块,以此来增强LLM。通过参考外部知识,RAG有效地减少了生成不符合事实内容的问题。RAG与LLM的集成使其被广泛采用,并成为推进聊天机器人技术和增强LLM在实际应用中可用性的关键技术。当用户向LLM询问问题时,AI模型会将查询以机器可读的数值形式进行转换(这种转换后的形式有时称为嵌入或向量)。RAG将LLM与嵌入模型和向量数据库相结合。嵌入模型随后将这些数值与可用的知识库的机器可读索引中的向量进行比较。当它找到一个或多个匹配项时,它会检索相关数据,将其转换为人类可读的词语,再传递回LLM。最后,LLM将检索到的词语和对查询的响应组合成最终答案呈现给用户,并可能引用嵌入模型找到的来源。
RAG 的研究范式在不断发展,可以将RAG分为三个阶段:朴素RAG、高级RAG和模块化RAG。尽管RAG方法在成本效益上优势显著,并且已经超越了原生LLM的性能,但它也表现出一些局限性。高级RAG和模块化RAG的发展正是为了克服朴素RAG存在的具体缺陷。
朴素RAG:朴素RAG的研究范式代表了最早期的RAG方法,在ChatGPT被广泛采用后不久就得到了广泛的关注。朴素RAG遵循包括索引、检索和生成在内的传统过程,也被称为“检索-阅读”框架。索引从清理和提取PDF、HTML、Word和Markdown等不同格式的原始数据开始,这些数据随后被转换为统一的纯文本格式。
-
检索:当收到用户查询时,RAG系统采用与索引阶段相同的编码模型将查询转换为向量表示。然后,它计算查询向量和索引语料库中各块向量之间的相似度得分。系统会优先考虑并检索与查询最相似的K个 top 数据块。这些块随后在prompt中用作扩展上下文。
-
生成:将提出的查询和选定的文档合成一个连贯的 prompt,LLM据此生成响应。
然而,朴素RAG也面临着一些显著的缺点:
-
检索挑战;检索阶段常常难以兼顾查准率和查全率,导致了错误或不相关内容块的选取以及重要信息的缺失。
-
生成困难:在生成响应的过程中,模型可能面临内容幻觉的问题,产生检索到的上下文不支持的内容。
-
增强障碍:将检索到的信息与不同的任务相集成可能具有挑战性,有时会导致不连贯或不一致的输出。此外,生成模型可能会过度依赖增强信息,导致输出的内容只是简单地重复检索到的内容,而没有深入见解或综合信息。
高级RAG:高级RAG引入了特定的改进以克服朴素RAG的局限性。它着重于提高检索质量,采用了检索前和检索后两种策略。为了解决索引问题,高级RAG通过滑动窗口分割、细粒度分段和加入元数据等方式来改进索引技术。此外,它还结合了一些优化方法来简化检索过程。检索前流程主要的重点是优化索引结构和原始查询。优化索引旨在提高被索引内容的质量。这包括多种策略:增强数据粒度、优化索引结构、添加元数据、进行对齐优化,以及混合检索。查询优化的目标是使用户的原始问题更清晰、更适合检索。常用的方法包括查询重写、查询转换、查询扩展,以及其他技术。
模块化RAG:模块化RAG架构超越了前两种RAG范式,提供了更高的适应性和通用性。它整合了多种改善RAG组件的策略,例如添加搜索模块以进行相似性搜索,以及通过微调来改进检索器。为了解决具体挑战,人们提出了重组RAG模块和重新排列RAG流水线等创新方法。向模块化RAG方法的转变正在变得司空见惯,支持跨组件的顺序处理和集成端到端训练。尽管有其独特性,模块化RAG还是建立在高级RAG和朴素RAG的基本原理之上的,体现了RAG系列内的发展和改进。
-
新模块:模块化RAG框架引入了额外的专业化组件来增强检索和处理能力。搜索模块能够适应特定的场景,支持使用LLM生成的代码与查询语言,直接在各种数据源(如搜索引擎、数据库和知识图谱)上进行精确搜索。RAG融合通过采用多查询策略扩展用户查询的视角,并利用并行向量搜索和智能重排序来发现显式和隐式知识。记忆模块利用LLM的记忆来引导检索,通过迭代自增强的方式创建了一种无界限的记忆池,使文本的数据分布更为紧密。RAG系统中的路由则可以导航不同的数据源,为查询选择最佳的路径,无论是摘要、特定的数据库搜索,还是合并不同的信息流。预测模块致力于减少冗余和噪音,通过LLM直接生成上下文,确保相关性和准确性。最后,任务适配器模块根据各种下游任务定制RAG,为零样本输入进行自动提示检索,并通过少量样本的查询生成来创建特定于任务的检索器。
-
新模式:模块化RAG通过允许模块替换或重新配置来解决特定挑战,从而提供了显著的适应性。这已经超出了朴素RAG和高级RAG以简单的“检索”和“阅读”机制为特征的固定结构。此外,模块化RAG通过集成新模块或调整现有模块之间的交互流程来扩展这种灵活性,增强了其在不同任务中的适用性。
总之,RAG作为一种引入外部知识库的方案,已经成为颇具前景的解决方案。这显著提高了生成内容的准确性和可信度(特别是在知识密集型任务中),并支持知识的持续更新和特定领域信息的集成。RAG通过语义相似度计算,从外部知识库中检索相关的文档块,以此来增强LLM。RAG的研究范式在不断发展,RAG可以分为三个阶段:朴素RAG、高级RAG和模块化RAG。朴素RAG有几个局限性,包括检索挑战和生成困难。为了解决这些问题,后两种RAG架构应运而生:高级RAG和模块化RAG。由于模块化RAG的可扩展架构,它已成为构建RAG应用程序的标准范式。
论文下载
在公众号后台,发送消息『0017 』可自动获取论文 链接。
⇩ 关注「奇点智源」,探索「人工智能」⇩
更多AI工具,参考Github-AiBard123,国内AiBard123