深度解析RAG技术在大模型时代的原理与实践
在QCon北京2024上,一个明显的趋势是:大模型应用落地的讨论已从“能不能做”转向了“怎么做”。在众多解决方案中,“AI Agent”和“RAG”是两个出现频率最高的关键词。RAG常常出现在Agent的思维链(CoT)或多智能体协作的流程中。上篇我们聊了聊AI Agent,那么,RAG到底是什么?本文就结合QCon上的见闻,深入聊聊RAG的核心组件、常见范式、应用场景和评估方法,看看各大公司是如何用它来支撑实际业务的。
什么是RAG?
在LLM时代,RAG(检索增强生成)的定义其实很具体:当模型需要回答问题或生成文本时,它不会凭空捏造,而是先从一个庞大的文档库中“检索”出最相关的信息片段,再根据这些信息来“生成”最终的答案。这就像是给一个博闻强识但偶有发挥失常的学者,配上了一套随时可以翻阅的百科全书。
一个通用的RAG流程,主要包含三个步骤:
- 将文档切分成小块,把它们编码成向量的形式,然后存进一个向量数据库里。
索引:
- 根据用户问题的语义相似度,从这个库里找出与问题最相关的前几个数据块。
检索:
- 把原始问题和检索到的这些数据块一起喂给大语言模型,让它生成最终的答案。
生成:
RAG文本问答
RAG多模态问答
为什么用RAG?
大模型的挑战
大型语言模型虽然能力惊人,但“幻觉”、知识过时和推理过程不透明这三大“硬伤”也一直是业界难题。RAG的出现,就像是给大模型搭上了一根“外接网线”。它通过整合外部数据库的知识,让生成的内容不再是无源之水,准确性和可信度都上了一个台阶。RAG把模型的内在知识和外部动态知识库巧妙地结合在了一起,对于处理知识密集型任务来说,确实是一把利器。
大语言模型挑战 | RAG技术解决方案 |
| 虚构信息 | 通过整合外部数据库的知识,提升生成的准确性和可信度 |
| 过时知识 | 允许持续知识更新和集成领域特定信息 |
| 非透明推理 | RAG将LLMs固有的知识与外部数据库庞大、动态的知识库有机结合,提高透明度和可追溯性 |
RAG与其它技术比较
在大模型优化的工具箱里,除了RAG,常见的还有微调(Fine-tuning, FT)和提示工程。这三者各有侧重,我们可以用一个象限图从“外部知识需求”和“模型适配需求”两个维度来看它们的差异。
- 几乎不依赖外部知识和模型改动,纯粹利用模型已有的能力解决问题。
提示工程:
- 可以把它看作一个“量身定制的教科书检索模型”,非常适合做精确的信息检索。早期的朴素RAG(Naive RAG)甚至几乎不需要对模型本身做任何修改。
RAG:
- 则像是让学生“内化知识”——需要针对不同的下游任务重新训练整个模型,适用于需要复制特定写作风格或格式的场景。
FT:
很多人会问:既然有微调,为什么还要用RAG?简单对比一下就能看出各自的适用场景,这有助于我们在实际问题中权衡利弊。
RAG | 微调 (Fine-tuning) | |
知识更新 | 直接更新检索知识库即可,无需频繁重新训练,非常适合动态数据环境。 | 存储的是静态数据,知识或数据更新就需要重新训练。 |
外部知识 | 擅长利用外部资源,特别适合处理文档或其他结构化/非结构化数据库。 | 可用于将预训练中习得的外部知识与模型对齐,但对于频繁变化的数据源不太实用。 |
数据处理 | 对数据的处理和操作要求极低。 | 高度依赖高质量的数据集,有限的数据集可能无法显著提高性能。 |
模型定制 | 侧重于信息检索和融合外部知识,可能无法充分定制模型的行为或写作风格。 | 允许根据特定风格或术语调整模型的行为、写作风格或特定领域知识。 |
可解释性 | 答案能追溯到具体的数据来源,提供更高的可解释性和可追踪性。 | 就像个黑盒子,你并不总能明白模型为什么会给出某个反应,可解释性相对较低。 |
计算资源 | 需要资源支持检索策略和数据库技术,外部数据源的整合和更新需持续维护。 | 需要准备、整理高质量的训练数据集,并确定微调目标,投入相应的计算资源。 |
延迟要求 | 因涉及数据检索,可能带来较高的延迟。 | 微调后的模型可以不经过检索直接给出回应,延迟更低。 |
降低幻觉 | 由于每个回答都基于检索到的实际证据,本质上更不容易产生错误或虚构的答案。 | 根据特定领域数据训练模型有助于减少幻觉,但面对未训练过的输入时,仍可能出现幻觉。 |
伦理和隐私问题 | 从外部数据库存储和检索文本可能引起伦理和隐私方面的担忧。 | 训练数据中的敏感内容同样可能引起伦理和隐私问题。 |
RAG的分类
从演进范式角度分类
RAG的研究和实践范式在不断演进,大致可以分为三个阶段:朴素RAG、高级RAG和模块化RAG。早期的朴素RAG成本效益不错,性能也优于传统LLM,但面临不少挑战。高级RAG和模块化RAG就是专门为解决这些不足而生的。
- 主要由索引、检索和生成三部分组成,流程简单直接:输入数据向量化,去向量数据库里匹配,再把匹配结果和原始输入一起交给大模型生成答案。
朴素RAG:
- 在朴素RAG的基础上增加了数据预筛选,围绕预检索和后检索提出了多种优化策略,虽然流程相似,但效果提升明显。
高级RAG:
- 继承了前两者的思想,但灵活性更高。它引入了多种特定功能模块,并且可以替换现有模块。整个过程不再局限于顺序检索和生成,还包括迭代检索、自适应检索等多种方式。
模块化RAG:
从检索与生成协同角度
按照检索器如何增强生成器的方式,RAG的基础范式又可以细分为四种:
- 用用户的问题检索相关文档,然后把检索结果和问题拼在一起,作为生成模型的输入。这是目前最主流的范式,也是最直接的利用外部知识方式。
基于查询的RAG:
- 检索到相关文档后,获取文档的向量表征,并在生成模型生成阶段融入这些表征信息。这是一种更隐晦的利用外部知识的方式。
基于潜在表征的RAG:
- 在生成模型解码阶段计算下一个词的概率时,同时考虑模型自身的预测和检索模块返回的信息。检索和生成被视为两条独立链路,最后联合计算logit值。
基于Logit的RAG:
- 用检索模块来替代部分生成模块,主要用于节省资源和加速文本生成。它会提供一段候选回复,让生成模型来判断是否采用。
Speculative RAG:
RAG核心结构
检索:
生成:
增强:
RAG的增强功能
RAG的增强是整个体系的核心。从多个角度来看,提升RAG性能的方法可以归纳为五类:从输入、检索器、生成器、结果和整个管道流程入手。单看检索这一个环节,增强方法又可以细分为迭代检索、递归检索和自适应检索三种。
检索增强分类
除了最普通的一次性检索,RAG的检索增强过程还有三种形态:
- 检索和生成交替进行,每一步都能从知识库中获取更丰富、更有针对性的上下文。
迭代检索:
- 把用户的问题拆解成子问题,然后通过“检索-生成”的循环不断解决这些子问题,非常适合处理复杂任务。
递归检索:
- 让RAG系统自己决定是否需要外部知识,以及何时停止检索和生成,通常利用LLM生成的特殊Token来控制。
自适应检索:
RAG过程增强分类
从视角来看,RAG的增强又可以分为针对输入、检索器、生成器、结果和整个管道这五个部分的优化。每个部分都有其特定的增强方向和方法。
RAG评估
随着RAG在NLP领域的快速发展和广泛应用,怎么评估它就成了一个前沿课题。把RAG技术引入到大模型应用场景,我们需要知道如何评估它在不同场景下的表现。下面我们就简要聊聊RAG的主要下游任务、相关数据集以及通用的评估方法。
RAG的下游任务
RAG的核心任务仍然是机器问答,包括传统的单跳/多跳问答、选择题、特定领域的问答,以及适合RAG的长文本场景。除此之外,RAG的应用范围正在不断扩展,比如信息提取、对话生成和代码搜索等。以下是RAG的主要下游任务及其相应的数据集总结:
| 任务 | 子任务 | 数据集 |
|---|---|---|
问答 |
Single-hop | Natural Question(NQ)/TrivaQA(TQA)/SQuAD/Web Questions(WebQ)/PopQA/MS MARCO |
| Multi-hop | HotpotQA/2WikiMultiHopQA/MuSiQue | |
| Long-form QA | ELI5/NarrativeQA(MQA)/ASQA/QMSum(QM) | |
| Domain QA | Qasper/COVID-QA/CMB/MMCU_Medical | |
| Multi-Choice QA | QuALITY/ARC/CommonsenseQA | |
| Graph QA | GraphQA | |
对话 |
Dialog Gentration | Wizard of Wikipedia(WoW) |
| Personal Dialog | KBP/DuleMon | |
| Task-oriented Dialog | CamRest | |
| Recommmendation | Amazon(Toys, Sport, Beauty) | |
信息抽取 |
Event Argument Extraction | WikeEvent/RAMS |
| Relation Extraction | T-REx, ZsRE | |
推理 |
Commonsense Reasoning | HellaSwag |
| CoT Reasoning | CoT Reasoning | |
| Complex Reasoning | CSQA | |
其它 |
Language Understanding | MMLU |
| Language Modeling | WikiText-103/StrategyQA | |
| Fact Checking/Verification | FEVER/PubHealth | |
| Text Gentration | Biography | |
| Text Summarization | WikiASP/XSum | |
| Text Classification | VioLens/TREC | |
| Sentiment | SST-2 | |
| Code Search | CodeSearchNet | |
| Robustness Evaluation | NoMIRACL | |
| Math | GSM8K | |
| Machine Translation | JRC-Acquis |
RAG的评估项及度量指标
目前,RAG模型的评估实践主要围绕三个“质量分数”和四个“基本能力”展开,共同服务于“检索”和“生成”这两个核心目标。
质量分数:
基本能力:
以下表格总结了适用于RAG评估的指标,分别对应上述的质量分数和基本能力。

RAG的评估框架及Benchmark
业界推出了一系列基准测试和工具来促进RAG的评估。这些工具提供的定量指标,不仅能衡量RAG模型的性能,还能加深我们对模型能力各个维度的理解。像RGB、RECALL和CRUD这些知名基准,侧重于评估RAG模型的基本能力。而RAGAS、ARES和TruLens这类先进的自动化工具,则利用大语言模型本身来判断质量分数。这些工具和基准共同构成了一个强大的RAG评估框架。
评估框架 |
评估目标 |
评估方面 |
定量指标 |
| RGB† | 检索质量生成质量 | 噪声鲁棒性否定性拒绝信息集成反事实鲁棒性 | AccuracyEMAccuracyAccuracy |
| RECALL† | 生成质量 | 反事实鲁棒性 | R-Rate (再出现率) |
| RAGAS‡ | 检索质量生成质量 | 上下文相关性答案忠诚性答案相关性 | *余弦相似度 |
| ARES‡ | 检索质量生成质量 | 上下文相关性答案忠诚性答案相关性 | AccuracyAccuracyAccuracy |
| TruLens‡ | 检索质量生成质量 | 上下文相关性答案忠诚性答案相关性 | * |
| CRUD† | 检索质量生成质量 | 创意生成知识密集型 QA纠错总结 | BLEUROUGE-LBertScore RAGQuestEval |
† 代表基准,‡ 代表工具。* 表示自定义量化指标,偏离传统指标。建议读者根据需要查阅相关文献,了解这些指标背后的量化公式。
RAG的应用场景
RAG技术的应用场景相当广泛,在文本、代码、音频、视频等多个领域都能看到它的身影。
- 在领域,RAG可用于生成自然语言摘要、构建问答系统和进行对话生成。
文本
- 在领域,RAG能帮助自动生成代码注释、代码片段和解释性文档。
代码
- 在领域,它可应用于语音识别、语音生成和音频内容摘要。
音频
- 在领域,则可用于视频内容摘要、视频片段生成和视频字幕生成等。
视频
可以说,RAG技术正在成为一个强大的通用工具箱,能够在多种应用场景中提供更自然、更准确的生成和理解能力。
RAG的生态总结
下面这张全景图,基于前文对RAG各部分的梳理,整体展现了RAG的下游任务、范式、评估体系、核心技术以及未来展望。
业界的RAG实战
回到QCon现场,这次大会专门为RAG和向量数据库设了一个专题。我们从中挑几个典型的分享,看看各家公司在实战中是怎么做的,又取得了哪些成果。
RAG的落地实践问题
句子互动的联合创始人兼CTO分享了他们在RAG商业化落地中踩过的“坑”,内容很接地气。他们重点谈了表格数据的RAG方案、效果优化、Embedding相似度不够、模型幻觉,以及同一个问题多次回答结果不一致等现实难题。
坑一:表格数据如何RAG
坑二:表格数据RAG效果不佳
坑三:Embedding相似度不准
坑四:自行编造产品问题
坑五:多次回复稳定性不好
RAG的垂直场景应用
金山云人工智能产品中心总经理陈海彪,分享了基于RAG模式构建的“金山云轻舟智问”技术架构及其在各行各业的创新应用。他们围绕RAG体系做了很多能力建设。比如,他们研发了OCR模型、文档智能解析引擎、多模态文档识别引擎等一系列智能化组件。在检索准确性方面,采用了多路递进式召回策略,并且为了优化检索效果,还专门训练了自己的Embedding模型,并建立了一套包含自动和专家人工评测的闭环评估体系。目前,这套方案在金山云售后问答、政务法律、智能合同审查、公文写作助手等场景都已落地,效果不错。当然,他们也坦诚,“知识助手”的挑战依然艰巨,尤其是模型的可解释性和幻觉问题,将是一个需要长期攻克系统工程难题。
多模态的RAG探索
来自Fabara的解决方案负责人张红兵,介绍了他们基于多模态智能引擎的大模型知识库技术应用。针对企业数据源复杂、多源异构的现状,他们的方案提供了一种全新的解决思路:
- 元数据知识化
- 元数据智能补齐
- 元数据关联关系发现和构建
他们采用了一种“图+向量”融合的存储方式——用图来存储确定的知识,用向量来存储非结构化的知识,以此构建一个强大的企业知识中台。然后,借助低代码技术,快速搭建包括智能对话、摘要、标签、生成、text2data在内的各种知识应用,为企业大模型的落地提供了有效的技术支撑。此外,他们还有其他RAG案例,这里就不再一一展开了。
值得注意的是,RAG并非孤立存在,在Agent的复杂应用中,两者也常常结合在一起,共同驱动大模型应用从“能用”走向“好用”。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名