一、前言
什么是RAG?
你是否遇到过这样的场景?向ChatGPT询问昨晚的欧冠赛果,它却给出两年前的比赛数据;让文心一言分析最新的政策文件,它开始编造不存在的条款。这是因为大模型的知识来源为训练时的静态数据,这些数据不会随着时间推移而自动更新。
在大模型(LLM,Large Language Model)的发展过程中,信息的获取和生成能力一直是核心关注点。然而,传统大模型在处理实时信息、长尾知识或特定领域数据时,常常面临知识更新滞后、存储成本高昂以及幻觉(hallucination)问题。
既然大模型自己本身的知识库是死的,那我们给它外置一个不断更新的知识库不就行了?
为了解决这些问题,检索增强生成(Retrieval-Augmented Generation,RAG)技术应运而生。
RAG的基本原理
RAG是一种结合了信息检索(Retrieval)和文本生成(Generation)的混合架构,它允许大模型在回答问题时,不仅依赖于自身训练时获得的知识,还能动态地从外部知识库中检索相关信息,以提高生成内容的准确性和可信度。简而言之,RAG可以被理解为“先查资料,再回答问题”的智能问答系统。
RAG通常由两个主要模块组成:
- 检索模块(Retriever):从外部数据库或文档集合中提取与输入查询最相关的信息。
- 生成模块(Generator):基于检索到的内容,结合大模型已有的语言能力,生成最终的回答。
这种方法的优势在于,它可以让大模型具备“短期记忆”能力,使其能够处理时效性强、知识更新频繁或需要引用外部文献的任务。例如,在金融、医疗、法律等领域,RAG可以帮助模型提供更具权威性的答案,而不是仅凭预训练数据“猜测”答案。
- RAG技术通过检索外部知识库,避免了幻觉问题的困扰。相较于单纯依赖大型语言模型对海量文本数据的学习,RAG允许模型在生成文本时从事实丰富的外部知识库中检索相关信息。
- RAG技术的时效性优势使其在处理实效性较强的问题时更为可靠。通过与外部知识库的连接,RAG确保了模型可以获取最新的信息,及时适应当前的事件和知识。
- 与传统的知识库问答(KBQA)相比,RAG技术在知识检索方面更加灵活,不仅能够从结构化的知识库中检索信息,还能够应对非结构化的自然语言文本。
在接下来的部分,我们将深入探讨RAG的技术细节,包括其工作流程、主要应用场景,以及当前面临的挑战和改进方向。
二、RAG的实现原理
RAG系统的运作遵循“检索-增强-生成”的循环逻辑,其标准流程可分为以下三个阶段:
阶段一:查询处理与检索
- 查询解析:对用户输入的原始查询(如“2023年诺贝尔经济学奖得主是谁?”)进行语义理解,可能涉及关键词提取、实体识别、查询扩展(例如补充“获奖原因”“研究领域”等潜在关联词)。
- 向量化检索:将查询转换为高维向量(embedding),通过相似度计算(余弦相似度、点积等)从知识库中召回Top-K相关文档片段。例如使用BERT等模型生成语义向量,配合HNSW(Hierarchical Navigable Small World)等高效索引结构加速检索。
阶段二:上下文增强
信息融合:将检索到的多个文档片段(如新闻稿、维基百科条目、学术论文摘要)与原始查询拼接,形成增强的输入上下文。例如构造如下Prompt:
[question] 2023年诺贝尔经济学奖得主是谁?她的主要贡献是什么? 向量检索到的文档: [information1] 2023年诺贝尔经济学奖授予克劳迪娅·戈尔丁(Claudia Goldin),以表彰她对女性劳动力市场历史演变的研究... [information2] 戈尔丁的著作《职业与婚姻:一个世纪的性别差距》揭示了...
噪声过滤:通过重排序(Re-ranking)模型(如Cross-Encoder)对初步检索结果进行精排,剔除低相关性内容,提升上下文质量。
阶段三:生成与验证
条件生成:将增强后的上下文输入生成模型(如GPT-4、Qwen 2.5),通过注意力机制动态聚焦关键信息,生成最终回答。
你是一个{task}方面的专家,请结合给定的资料,并回答最终的问题。请如实回答,如果问题在资料中找不到答案,请回答不知道。 问题:{question} 资料: - {information1} - {information2} - {information3}
事实校验(可选):对生成内容进行一致性检查,例如对比检索片段中的实体、时间、数据,防止生成矛盾或虚构信息。
在论文综述「Retrieval-Augmented Generation for Large Language Models: A Survey」中,作者将RAG技术按照复杂度继续划分为Naive RAG,Advanced RAG、Modular RAG。
技术类型 | 描述 |
---|---|
Naive RAG | Naive RAG是RAG技术的最基本形式,也被称为经典RAG。包括索引、检索、生成三个基本步骤。索引阶段将文档库分割成短的Chunk,并构建向量索引。检索阶段根据问题和Chunks的相似度检索相关文档片段。生成阶段以检索到的上下文为条件,生成问题的回答。 |
Advanced RAG | Advanced RAG在Naive RAG的基础上进行优化和增强。包含额外处理步骤,分别在数据索引、检索前和检索后进行。包括更精细的数据清洗、设计文档结构和添加元数据,以提升文本一致性、准确性和检索效率。在检索前使用问题的重写、路由和扩充等方式对齐问题和文档块之间的语义差异。在检索后通过重排序避免“Lost in the Middle”现象,或通过上下文筛选与压缩缩短窗口长度。 |
Modular RAG | Modular RAG引入更多具体功能模块,例如查询搜索引擎、融合多个回答等。技术上融合了检索与微调、强化学习等。流程上对RAG模块进行设计和编排,出现多种不同RAG模式。提供更大灵活性,系统可以根据应用需求选择合适的功能模块组合。模块化RAG的引入使得系统更自由、灵活,适应不同场景和需求。 |
三、RAG还是SFT?
在大模型落地的过程中,开发者常常面临技术路线选择:究竟是采用检索增强生成(RAG),还是通过监督微调(Supervised Fine-Tuning, SFT) 让模型直接学习领域知识?这两种技术路径各有优劣,需要根据具体场景权衡取舍。
1.SFT:让大模型成为领域专家
监督微调通过向预训练大模型注入特定领域的标注数据(如问答对、任务指令),使其逐步掌握专业知识和表达风格。例如:
- 法律领域:用法律条文、判决书、律师函等数据微调,让模型学会引用《刑法》第XX条。
- 医疗领域:输入病历、医学文献、药品说明书,使模型能准确解析“肌钙蛋白升高”的临床意义。
# 典型的SFT数据格式示例 { "instruction": "根据《民法典》分析房屋租赁合同违约条款是否有效", "input": "合同约定:租客提前退租需支付全年租金50%作为违约金", "output": "依据《民法典》第585条,违约金不得超过实际损失的30%..." }
SFT的优势是可以将外部的知识内化,模型将领域知识编码进参数,无需外部依赖即可生成专业内容,经过专业微调后可精确调整输出格式(如法律文书的严谨性、客服对话的亲和力)。对于需要多步逻辑推导的任务(数学证明、代码调试),微调后的模型的性能表现会显著更好。
一般来说,现在主要用SFT来蒸馏小模型,比如Ds就用R1全量版蒸出一堆推理性能很不错的R1 Qwen小模型。 这种方法通过教师采样生成序列,以 SFT 的方式训练学生模型,因此也被称为硬蒸馏(Hard Distillation)或「蒸馏+SFT」。
但,SFT也有其缺点:
- 前期数据清洗成本高,数据本身对大部分企业来说就是问题
- 微调成本高,训练不确定性强,需要养一个专业的工程团队
- 基础模型更新速度快,可能当前SFT出的特化模型三个月后在对应领域表现不如最新一代的基座模型
2.RAG:赋予模型动态知识库
与SFT不同,RAG不改变模型参数,而是通过实时检索外部知识库来增强生成能力。例如:
- 企业知识库:连接内部文档(产品手册、技术白皮书、会议纪要),解决员工查询问题。
- 实时资讯:接入新闻API、社交媒体流,让模型能解读“今日美股走势”。
- 长尾知识:针对“冷门电影票房数据”“小众学术概念”提供精准答案。
# RAG系统典型架构 用户问题 → 向量化检索 → 知识库 → 上下文拼接 → 大模型生成 ↑ 实时更新(每日/每小时)
RAG的优势就是系统低耦合,模型无需训练即可接入新知识源,适合知识频繁变更的场景(如政策法规更新)。因为有外部知识库,所以回答可信度显著会高一截,答案附有来源引用,规避“模型虚构法条”风险。对于中小团队而言,RAG的成本也要显著低于SFT,维护知识库比重新训练模型更轻量化,性价比非常高。
四、前沿RAG系统案例—GraphRAG
微软的GraphRAG是一种基于知识图谱的检索增强生成(RAG)技术,于2024年7月2日正式开源。其核心目标是通过结合大型语言模型(LLM)与图机器学习技术,解决传统RAG在处理全局性、抽象性问题时的局限性,例如回答“数据集的整体主题”或跨文档的复杂语义推理。
微软的作者认为,目前的RAG技术很难解决诸如「当前数据集」的主题是什么这种较为「高级」「高维」的问题,此类应用场景本质上是一种聚焦于查询的总结性(QueryFocused Summarization,QFS)任务,单纯只做数据检索是无法解决的。
与利用图索引的结构化检索和遍历功能的相关工作相比(子节 4.2),我们关注的是在此背景下图的一个先前未被探索的特性:其固有的模块性(Newman,2006)以及社区检测算法将图划分为紧密相关节点的模块社区的能力(例如,Louvain,Blondel et al.,2008;Leiden,Traag et al.,2019)。LLM生成的这些社区描述的摘要提供了对基础图索引及其所代表的输入文档的完全覆盖。然后,利用映射-归约方法实现整个语料库的查询聚焦摘要:首先使用每个社区摘要独立并并行地回答查询,然后将所有相关的部分答案汇总成最终的全局答案。
微软的解决方法是,与其他RAG系统类似,GraphRAG整个Pipeline也可划分为索引(Indexing)与查询(Query)两个阶段。索引过程利用LLM提取出节点(如实体)、边(如关系)和协变量(如 claim),然后利用社区检测技术对整个知识图谱进行划分,再利用LLM进一步总结。最终针对特定的查询,可以汇总所有与之相关的社区摘要生成一个全局性的答案。
这么做的优势就是,通过社区分层和知识图谱的拓扑结构,GraphRAG能捕捉数据集的整体语义,回答传统RAG难以处理的抽象问题(如“数据中的前五主题”),在全面性、多样性等指标上显著优于基线RAG。
但劣势也很明显,构建索引需要依赖LLM多次调用,例如处理19万字文档需约4分30秒,且使用GPT-4时单次索引成本可达12美元,对计算资源要求较高;知识图谱的构建涉及实体消歧、层次聚类等多步骤流程,开发与维护成本较高,且社区划分的准确性直接影响结果质量。此外,全局搜索需遍历多层社区结构,响应速度较慢,难以满足高实时性需求。
不过后续改进版本LazyGraphRAG通过动态索引优化了此问题
参见
[1] 阿水, 鱼遇雨欲语与余 Coggle 30 Days of ML(24年1/2月)
[2] Edge D, Trinh H, Cheng N, et al. From local to global: A graph rag approach to query-focused summarization[J]. arXiv preprint arXiv:2404.16130, 2024.