Retrieval-Augmented Generation(RAG)

发布时间:2026/7/4 21:41:30

Retrieval-Augmented Generation(RAG) Retrieval-Augmented GenerationRAG1. 使用背景大语言模型虽然很强但一直有两个很典型的问题知识会过时容易幻觉。第一个问题很好理解。模型的参数一旦训练完里面的知识基本就固定了。现实世界的信息却在不断变化所以模型很容易“知道得很多但不是最新的”。第二个问题也很常见。即使模型表面上说得很流畅它也可能把不确定的信息编得像真的一样。这在知识密集型任务里尤其麻烦比如问答、检索问答、企业知识库问答、法律医疗类咨询等。所以后面就有一个很自然的思路不要指望模型光靠参数记住一切而是在生成前先去外部知识库里查再把查到的内容喂给模型。这就是RAG最核心的想法把“检索Retrieval”和“生成Generation”接起来让模型在回答之前先从外部知识源中取回相关信息。2. 理论基础1参数知识和外部知识如果只看普通大模型它的知识主要存在参数里也就是所谓的parametric memory。这种知识当然有用但它有几个天然限制更新不方便很难精确追溯来源对长尾事实和最新知识不够稳定很容易在回答时把“记忆”和“猜测”混在一起。RAG的一个核心变化就是引入外部知识库也就是某种non-parametric memory。所以从更高一层看RAG做的事情其实很简单把原来“全靠参数回答”改成“参数知识 外部检索共同回答”。2一个最基本的RAG视角对于用户问题xxx传统生成模型更像是在直接建模p(y∣x) p(y\mid x)p(y∣x)也就是“给定问题xxx直接生成答案yyy”。而RAG会先检索出相关文档zzz然后建模p(y∣x,z) p(y\mid x,z)p(y∣x,z)或者进一步写成p(y∣x)∑zp(y∣x,z) p(z∣x) p(y\mid x)\sum_z p(y\mid x,z)\,p(z\mid x)p(y∣x)z∑​p(y∣x,z)p(z∣x)这个式子其实就把RAG的核心写出来了先根据问题xxx检索文档zzz再在文档zzz的辅助下生成答案yyy。所以RAG并不是一个“新语言模型”而更像是一个检索 条件生成的框架。3. 最基本的RAG流程1文档准备在真正问答之前通常先要把外部知识源整理好比如网页PDF内部文档产品手册论文数据库记录。然后做切分、清洗、索引形成可检索的知识库。这一步虽然看上去不“模型”但其实非常关键。因为检索质量很大程度上取决于知识库本身怎么组织。2检索用户输入问题后系统先去知识库里查找相关片段。最常见的做法有两类稀疏检索比如BM25这类关键词匹配稠密检索也就是把问题和文档编码成向量再做相似度搜索。近几年RAG里更常见的是稠密检索因为它更适合做语义匹配而不只是字面关键词匹配。3增强检索到的文档片段不会直接当答案而是会和原始问题一起拼成新的提示输入给生成模型。比如一个很常见的形式就是问题 若干检索片段 生成指令这样模型在回答时既能看见用户问题也能看见外部证据。4生成最后生成模型根据增强后的上下文输出答案。所以RAG最基本的流水线其实就四步建库检索拼接上下文生成答案。4. 原始RAG论文在做什么1Lewis等人的基本设定原始RAG论文的一个重要贡献是把这套“检索 生成”体系写成了一个比较完整的神经框架。它的设定大致是一个seq2seq生成模型负责根据问题和文档生成答案一个dense retriever负责从文档库中找相关文档一个外部文档索引作为非参数知识库。所以原始RAG并不是泛指一切“带检索的生成”而是有一个相对具体的技术设定。2RAG-Sequence原始论文里一个形式叫RAG-Sequence。它的思路是在生成整个答案的过程中都使用同一组检索到的文档。换句话说一旦检索阶段结束后面整段生成都基于同样的文档集合。这种做法简单直接适合很多普通问答场景。3RAG-Token另一个形式叫RAG-Token。它更激进一些允许模型在生成不同token时对应不同的检索文档。也就是说它不要求整段回答始终绑定同一组文档而是让检索上下文在更细粒度上参与生成。从表达能力上看RAG-Token更灵活但从实现和计算上看它也更复杂。4这两种形式的区别可以粗略理解成RAG-Sequence更像“整段回答参考同一批资料”RAG-Token更像“回答的不同局部可以动态参考不同资料”。所以原始RAG论文里其实已经把一个很重要的问题摆出来了检索到底应该是回答前做一次还是在生成过程中更细粒度地参与。5. 为什么RAG有效1知识不必全塞进参数里RAG最直接的好处就是模型不用把所有知识都背在参数里。有些知识完全可以放在外部文档库里需要时再取。这样做有两个明显好处更新知识更方便更容易提供证据来源。2对长尾知识更友好很多长尾事实、冷门知识、企业私有知识本来就不太可能在预训练里被稳定记住。这时候让模型自己“回忆”往往不可靠反而不如直接检索出来给它看。所以RAG特别适合知识密集型、事实依赖强的任务。3比纯微调更灵活如果想让模型知道新知识一种办法是重新训练或微调但这样成本高也不适合频繁更新。RAG的好处就在于很多时候只需要更新知识库不一定要重新训练模型。6. RAG最核心的几个模块1Chunking文档不能直接整篇拿来检索通常需要先切成片段也就是chunk。这一步非常关键因为切得太大检索会不准切得太小又可能丢上下文。所以很多RAG系统里第一个真正影响效果的地方往往不是模型本身而是文档到底怎么切。2Embedding / Index文档切好之后通常要编码成向量并建立索引便于后续快速召回。这一步决定的是问题和文档能不能在同一个语义空间里匹配上。所以后面很多RAG优化都会专门去改embedding model而不是只改生成模型。3RetrieverRetriever负责从大规模知识库中先召回一批候选文档。它更像是RAG里的第一道筛子。如果这一步就找歪了后面generator再强也很难完全救回来。4Reranker很多系统不会只靠一次召回而是会在召回之后再加一个reranker对候选片段重新排序。它的作用就是从“可能相关”里再筛出“最值得给模型看”的那几个。所以一个比较成熟的RAG系统通常不是“检索一次就完”而是“召回 重排”。5Generator最后才是生成模型本身。generator的任务不是单纯复述检索结果而是要读懂问题理解文档综合多段证据组织成自然语言答案。所以RAG的generator本质上更像“带证据的回答器”。7. RAG的问题出在哪1检索错了后面基本都跟着错RAG一个非常现实的问题就是上游检索错误会直接传递到下游生成。如果召回的文档本来就不相关生成模型再强也很可能是在“错误证据”上认真作答。所以RAG并不是消灭幻觉而是把一部分问题转移成了“检索误差”。2检索到了不代表模型就会用这也是一个常见误区。很多人以为只要把正确文档塞进上下文模型自然就会用。其实不一定。模型可能会忽略证据只用了一部分证据把不同证据拼错仍然凭参数记忆胡乱补充。所以RAG真正难的地方不仅是“找得到”还有“用得对”。3上下文窗口不是无限的检索结果越多不一定越好。因为上下文窗口有限放太多无关片段反而会干扰模型。所以后面很多RAG工作都强调不是召回越多越强而是召回得越准越强。4知识碎片化如果文档切分得太碎模型看到的可能只是很多局部信息。这对简单事实问答还好但对于复杂推理、多跳问题、跨文档综合问题就会很麻烦。这也是后来GraphRAG、LightRAG这类方法出现的重要背景。8. Self-RAG为什么又要“自反思”1普通RAG的问题很多普通RAG系统其实有一个默认前提不管问题需不需要检索都先检索一批文档进来。但现实里并不是所有问题都需要查资料。有些问题模型本来就能回答有些问题检索回来一堆无关文档反而更糟。此外传统RAG通常也是“固定检索几条”缺少更灵活的判断机制。2Self-RAG的核心想法Self-RAG做的一个很重要的改动是让模型自己学会什么时候该检索什么时候不该检索以及拿到检索结果后怎么自我反思。它引入了一些特殊的reflection tokens让模型在生成过程中显式表达是否需要检索检索结果是否有帮助当前生成是否有证据支持。所以Self-RAG不是简单“给RAG加个后处理”而是试图把“检索—生成—批判”整合成一个更统一的过程。3为什么这一步重要因为它把一个默认静态流程改成了更动态的策略不是所有问题都同样检索不是所有检索结果都照单全收。这其实比普通RAG更像人类写作有时候需要查资料有时候不需要查完资料也还得判断这资料到底靠不靠谱、够不够用。9. GraphRAG / LightRAG为什么又开始引图结构1普通RAG更像“扁平检索”在很多基础RAG系统里知识库是按独立chunk来索引和召回的。这意味着检索到的往往是一段一段彼此分散的文本片段。这样对单跳事实问答通常够用但对复杂问题就容易出问题。因为很多知识并不是“某一小段文字里就完整给出”而是分散在多个实体、多个文档和多个关系之中。2GraphRAG这类思路所以后面很多工作就开始往图结构走。它们会尝试把知识里的实体、事件、关系抽出来再组织成图。这样一来检索就不只是“找最相似的文本段”而是可以进一步利用实体之间的关系多跳连接全局结构信息。这类方法大体可以叫GraphRAG路线。3LightRAG的思路LightRAG这条线可以理解成想用更轻量、但又不只是扁平文本块的方式把局部信息和全局结构结合起来。它强调双层检索一方面照顾局部具体信息另一方面也去利用更高层的关联结构。所以LightRAG代表的是一种很现实的改进方向普通RAG太碎纯图方法又可能太重那么能不能在结构化和轻量化之间找个平衡。10. 从更高一层看RAG到底是什么1它不是单一模型RAG严格来说不是某个单独的神经网络结构。它更像是一类框架一种范式。这个范式的核心是让生成模型在回答之前能够访问外部知识。所以RAG最本质的变化不是Transformer内部结构变了而是整个系统的知识来源变了。2它把“知道”和“查到”分开了我觉得RAG最重要的思想就是这一点模型不必什么都记住它可以去查。这件事看起来简单但很关键。因为一旦允许“查”很多原来很难靠参数解决的问题就变得可处理了最新知识更新企业私有知识接入证据引用领域知识扩展。3它本质上是系统问题不只是模型问题这也是RAG和很多“纯模型论文”很不一样的地方。RAG强不强不只看LLM强不强还要看文档怎么切向量怎么建检索器好不好重排器好不好提示词怎么写生成模型会不会用证据。所以RAG做深了以后其实非常像一个系统工程。11. 为什么RAG会越来越重要1因为现实知识总在变大模型再强也不可能把现实世界所有新信息都稳定记在参数里。只要知识会变RAG这种“外部接入知识”的思路就会一直有价值。2因为企业应用特别需要它在很多真实场景里用户并不需要一个“会聊天但不一定对”的模型而是需要一个能接企业知识库、能给出依据、能随着文档更新而更新的系统。这类需求和RAG天然贴得很近。3因为它给了大模型一个更现实的工作方式纯参数模型更像“闭卷考试”RAG更像“开卷考试”。在很多知识密集型任务里后者本来就更符合真实工作方式。12. 一点理解1RAG最漂亮的地方我觉得RAG最漂亮的地方不是它把检索和生成拼到一起而是它把一个很朴素的现实重新带回来了不知道的时候就去查。这件事对人来说太自然了但对早期大模型却不是默认能力。RAG等于把这种能力显式做成了系统结构。2它为什么很强但也很“麻烦”RAG强是因为它确实能显著增强知识获取能力RAG麻烦是因为它会把问题从“模型会不会答”扩展成“整条流水线会不会协同工作”。所以它不是一个“加个模块就自动变强”的东西而是需要认真打磨每个环节。3怎么记RAG如果只是为了学习我觉得可以把RAG记成四句话纯参数模型有知识过时和幻觉问题RAG先检索外部知识再结合证据生成答案原始RAG已经把“检索一次”与“生成时更细粒度利用检索”区分开了后面的Self-RAG、GraphRAG、LightRAG本质上都在继续解决“何时检索、如何检索、怎么更好利用检索结果”这几个问题。13. 参考鸣谢Retrieval-Augmented Generation for Knowledge-Intensive NLP Taskshttps://arxiv.org/abs/2005.11401Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflectionhttps://arxiv.org/abs/2310.11511LightRAG: Simple and Fast Retrieval-Augmented Generationhttps://arxiv.org/abs/2410.05779Retrieval-Augmented Generation for AI-Generated Content: A Surveyhttps://arxiv.org/abs/2402.1947314. 注这篇主要是个人学习整理重点放在主线理解文中主要写的是文本RAG里最常见的基本范式很多工程细节如query rewriting、hybrid retrieval、reranking、citation grounding、agentic RAG等没有展开才疏学浅欢迎批评、指导和交流有错误望大家及时指正

相关新闻