为什么需要RAG?

从2022年ChatGPT爆火,到今年deepseek的爆火,大型语言模型(LLM)通过实现类似人类的文本生成和自然语言理解,彻底改变了人工智能。

但是模型们总是会说一些“过时”的话,他们对静态训练数据的依赖限制了他们响应动态实时查询的能力,从而导致输出过时或不准确。

检索增强生成(RAG)已成为一种解决方案,它通过集成实时数据检索来增强 LLM,以提供与上下文相关的最新响应。

尽管前景广阔,但传统的 RAG 系统受到静态工作流程的限制,缺乏多步骤推理和复杂任务管理所需的适应性。而RAG的进化史就是AI迈向“实用化”的缩影。

在聊rag发展史之前,我们先简单聊一聊rag的基础组件。

rag核心组件.png

主要核心组件,从用户的输入,到检索,对检索到的信息的加工处理,再到大模型的生成,最后把生成结果返回给用户。

像deepseek等app应用的联网搜索功能其实就是rag的一种应用。


一、RAG的“原始时代”:Naive RAG

navierag.png

总的来说:基础但差点意思

  • 原理:像传统搜索引擎,依赖于简单的基于关键字的检索技术(例如 TF-IDF 和 BM25)从静态数据集中获取文档。然后,检索到的文档用于增强语言模型的生成功能。

  • 特点:简单易实施,使其适用于涉及基于事实的查询的任务,上下文复杂性最小。

  • 局限:

    • 缺乏上下文感知:由于依赖词汇匹配而不是语义理解,检索到的文档通常无法捕捉到查询的语义细微差别。

    • 碎片化输出:缺乏高级预处理或上下文集成通常会导致脱节或过于通用的响应。

    • 可扩展性问题:基于关键字的检索技术难以处理大型数据集,通常无法识别最相关的信息。

  • 典型场景:早期客服机器人、百科问答。

尽管存在这些限制,但 Naive RAG 系统为集成检索与生成提供了关键的概念验证,为更复杂的范式奠定了基础。


二、RAG的“进阶版”:Advanced RAG

advancedrag.png

关键词:语义理解及重排序

  • 技术突破:

    • 密集向量搜索:查询和文档在高维向量空间中表示,从而在用户查询和检索到的文档之间实现更好的语义对齐。

    • 上下文重新排序:神经模型对检索到的文档进行重新排序,以优先考虑与上下文最相关的信息。对于检索到的数据,可以进一步使用rerank模型来进行数据相关性的重排序。

    • 迭代检索:Advanced RAG 引入了多跳检索机制,支持跨多个文档进行复杂查询的推理。

  • 效果提升:答案更精准,适合科研分析、个性化推荐。

  • 遗留问题:流程固定,无法应对复杂任务(如需实时调用API的计算题)。

这些提升使 Advanced RAG 适用于需要高精度和细致入微理解的应用,例如研究综合和个性化推荐。但是,计算开销和可扩展性受限等挑战仍然存在,尤其是在处理大型数据集或多步骤查询时。

在这里小胖想要展开说说,其实有些东西在自己开发rag系统的时候是很直观的。就比如说,根据用户对话的历史记录对用户当前问题进行查询关键词提取、改写,判断当前问题应该走哪一个查询分支。


三、RAG的“乐高化”:Modular RAG

modulerag.png

关键词:灵活组装

  • 核心理念:把RAG拆成可替换的模块(检索器、生成器、工具接口),按需定制。

  • 主要创新:

    • 混合检索策略:将稀疏检索方法(例如,稀疏编码器 BM25)与密集检索技术 [21](例如 DPR - Dense Passage Retrieval)相结合,以最大限度地提高不同查询类型的准确性。

    • 工具集成:整合外部 API、数据库或计算工具来处理专业任务,例如实时数据分析或特定领域的计算。

    • 可组合管道:模块化 RAG 支持独立更换、增强或重新配置检索器、发电机和其他组件,从而对特定用例具有高度适应性。

  • 应用场景举例:

    • 金融场景:实时股票API + 历史数据检索 + 投资建议生成;

    • 教育场景:教材库搜索 + 错题分析工具 + 个性化解析。

  • 意义:打破“一刀切”,成为企业落地RAG的主流选择。


四、RAG的“关系大师”:Graph RAG

graphrag.png

去年7月,微软开源了 GraphRAG,一种基于图的检索增强生成 (RAG) 方法,后续又出现了很多类似的图rag,比如小胖以前提过的lightrag,fast-graphrag等。

小胖还花费了很多很多token对faster-graphrag进行了测试~

https://www.lllyyb.com/archives/Sswvm6p1https://www.lllyyb.com/archives/9Fm0NCHK

关键词:知识图谱

  • 创新点:通过集成基于图的数据结构扩展了传统的检索增强生成系统。这些系统利用图形数据中的关系和层次结构来增强多跳推理和上下文丰富。通过整合基于图形的检索,Graph RAG 可实现更丰富、更准确的生成输出,特别是对于需要关系理解的任务。

    • 节点连接:捕获和推理实体之间的关系。

    • 分层知识管理:通过基于图形的层次结构处理结构化和非结构化数据。

  • 局限性:

    • 有限的可扩展性:对图形结构的依赖会限制可扩展性,尤其是在数据源广泛的情况下。

    • 数据依赖性:高质量的图形数据对于有意义的输出至关重要,这限制了其在非结构化或注释不佳的数据集中的适用性。

    • 集成复杂性:将图形数据与非结构化检索系统集成会增加设计和实施的复杂性。

  • 典型案例:

    • 医疗诊断:从“糖尿病”关联到“心血管风险因素”;

    • 法律研究:通过案例引用链追溯判例依据。

  • 短板:依赖高质量图谱数据,搭建成本高。

这里小胖又想补充一下,在rag系统中,文档处理是一个很核心的模块,文档处理的好与坏会很大程度的影响后续的检索结果和回答生成效果,就像一句话说的那样:Garbage In, Garbage Out,垃圾的输入文本只会导致垃圾的输出结果。针对文档的处理,其实也出了很多开源的项目,比如说小胖原来测试过的微软的markitdown,还有基于模型的分片处理Agentic Chunking,等等。

https://www.lllyyb.com/archives/8z4bUX5n

因为模型有输入token的限制,并且避免输入过多不太相关文档的干扰及回复时间的影响,常规的rag系统对于文档的处理都会经常分片,分片的策略或是根据字符长度、或是根据token长度,也有根据特定分割符的拆分策略。这些策略都无法避免将一些本该在一块的内容拆开。

以GraphRag为代表的这类型的rag主要是在文档处理部分下了功夫,像上面提到的rag文档拆分的问题,图rag可以从文档中提取丰富的关系和层次结构,能够轻松处理需要多步推理的复杂任务。


五、RAG的“终极形态”?Agentic RAG

agenticrag.png

关键词:AI自主决策

  • 创新点:Agentic RAG 通过引入能够进行动态决策和工作流程优化的自主代理,代表了一种范式转变。与静态系统不同,Agentic RAG 采用迭代优化和自适应检索策略来处理复杂、实时和多域的查询。此范例利用检索和生成过程的模块化,同时引入基于代理的自主性。

    • 自我反思:检查答案是否合理,自动纠错;

    • 多智能体协作:分工查数据库、搜网络、调API,像团队一样配合;

    • 动态调整:根据问题难度切换策略(简单问题直答,复杂问题多步推理)。

  • 应用前景:

    • 医疗:自动整合患者病史、最新论文、药品数据库,生成诊疗方案;

    • 金融:实时解读财报+舆情分析,输出投资风险评估。

  • 挑战:

    • 协调复杂性:管理代理之间的交互需要复杂的编排机制。

    • 计算开销:使用多个代理会增加复杂工作流的资源需求。

    • 可扩展性限制:虽然可扩展,但系统的动态特性可能会使高查询量的计算资源紧张。


RAG技术五大范式对比

范式对比.png

文章有点长,不妨给小胖点个赞支持一下。这里小胖再分享一个比较常见的rag不太好的效果的例子:

rag失败例子.png

我前两天用coze搞了一个飞牛NAS的知识库,然后把我以前的文章给导入了这个知识库,在一篇说搭建电子书阅读服务的文章,里面有一句话提到可以参考另一个部署新闻资讯平台的docker配置。

rag张冠李戴.png

然后我的这个问题正好命中了这一段话,这个问题想必搞过rag的朋友都遇到过,由于拆分的不合理以及没有进行回答前的重排序等机制,导致模型最终答非所问、张冠李戴~ 不过不知道各位朋友你们是怎么解决的,不妨留言分享一些经验 ~


Agentic RAG Systems

我们再详细聊一聊Agentic RAG Systems(智能体检索增强生成系统),这个rag系统是结合自主智能体与检索增强生成技术的人工智能系统,通过智能体的自主决策、迭代推理和自适应检索策略,提升系统在复杂任务中的表现。

  1. 核心原理

    • 智能体构成要素:由大语言模型(LLM)、记忆(短期和长期)、规划(含反思与自我批判)以及工具(向量搜索、网络搜索、API 等)组成。LLM 负责推理和对话,记忆用于记录上下文和数据,规划引导推理,工具拓展功能。

    • 智能体设计模式:包括反思(通过自我反馈提升输出质量)、规划(将复杂任务分解为子任务)、工具使用(借助外部资源拓展能力)和多智能体协作(实现任务分工与并行处理),这些模式提升了系统决策和适应能力。

    • 智能体工作流模式:如提示链(顺序处理任务以提高准确性)、路由(根据输入分类处理)、并行化(并发执行任务以减少延迟)、协调器 - 工作器(动态分配任务)和评估器 - 优化器(迭代改进输出),根据任务需求优化系统性能。

  2. 系统架构分类

    • 单智能体 Agentic RAG(路由器):由一个智能体管理信息检索、路由和集成,结构简单,适用于任务明确、资源有限的场景,如客户支持中查询订单配送状态。singlerag.png

    • 多智能体 Agentic RAG 系统:多个专业智能体协同工作,每个智能体负责特定类型数据检索或任务,可处理复杂工作流和多样查询,如多领域研究助手场景,但存在协调复杂等挑战。mrag.png

    • 分层 Agentic RAG 系统:采用分层结构,高层智能体管理和指导低层智能体,能进行战略决策和任务分配,处理复杂多面查询,如金融分析系统场景,但协调和资源分配有一定难度。fcrag.png

    • Agentic 纠正性 RAG:通过智能体评估检索结果、纠正错误、优化查询,提高响应准确性和相关性,如学术研究助手场景。jzrag.png

    • 自适应 Agentic RAG:根据查询复杂度动态调整检索策略,简单查询直接生成答案,复杂查询采用多步检索,提高资源利用效率和响应准确性,如客户支持场景。zsyrag.png

    • 基于图的 Agentic RAG:Agent - G 集成图知识库和非结构化文档检索,增强推理和检索准确性;GeAR 利用图扩展技术和智能体架构,提升多跳检索能力,处理复杂查询,如医疗诊断和多跳问答场景。turag.png

    • Agentic 文档工作流(ADW):通过实现端到端的知识工作自动化扩展了传统的rag范式。这些工作流精心安排以文档为中心的复杂流程,将文档解析、检索、推理和结构化输出与智能代理相集成。ADW 系统通过维护状态、协调多步骤工作流以及将特定领域逻辑应用于文档来解决智能文档处理和 RAG 的局限性。adwrag.png

​​

duibi.png

传统 RAG 为基本任务提供了简单性和易于部署,而 Agentic RAG 则通过多代理协作引入了增强的推理和可扩展性。ADW 通过提供强大的、以文档为中心的工作流程来促进端到端自动化以及与特定领域的流程集成,从而在这些进步的基础上构建。

就像小胖前面说的,在开发中其实很多东西都是很直观的,你会很容易就自己折腾出很多类似于多智能体 Agentic RAG 系统、Agentic 纠正性 RAG系统。我觉得rag效果的核心部分主要还是文档处理部分,好的分片策略或者好的知识库文档能够很多程度决定rag问答的效果,而后面的图rag也好,各种agentic rag测试都是在这个基础上的锦上添花。

然后随着模型的不断升级进化,一些早些时候的rag设定,现在都不太适用了,比如说最早期的模型的输入普遍只有4k、8k的,现在直接都是32k、128k了,在不考虑token成本的情况下,原先的分片设定chun_size就可以调高一点了,这样一个分片就能包含更多的信息,也会减少拆开相关信息的概率。

小胖最近打算好好测评一下各种rag系统,争取优化自己当前的系统,引入图rag、Agentic Chunking等技术,提升自己企业的知识库效果~ 也欢迎各位留言讨论,一起交流~

再次callback:RAG的终极目标,是让AI不仅"能说会道",更要"知行合一"。

本文部分图片观点参考自论文:https://arxiv.org/abs/2501.09136

也欢迎大家关注我的公众号《编程挺好玩》,交流讨论更方便~

Snipaste_2024-12-07_11-05-00.png