一、写在前面
继Qcon上海2023后,又能有机会去参加了Qcon北京2024。如果说去年上海的qcon,大模型相关话题还只是占议程的半壁江山,此次北京Qcon的已然变成了大模型系列的主场。整个大会关于大模型的主题单元,也还是集中在几大方面:大模型数据、大模型训练及推理加速、大模型应用,其中应用还是以Agent和Rag应用模式为主。
继上篇文章大模型元年的反思与启示系列-AI Agent,继续结合上海和北京的见闻谈谈大模型应用-RAG。后面会根据个人时间,持续写下系列心得,目录如下:
●大模型元年的反思与启示系列-RAG
●大模型元年的反思与启示系列-LLM应用构建工具
●大模型元年的反思与启示系列-LLM训练及微调
注:有些观点纯属个人理解,工程视角,大家非喜勿喷。同时也希望大家指正,相互交流学习。
二、RAG的概念
大会议上涉及了很多大模型应用落地场景,出现比较多的应用模式关键词是:AI Agent和RAG(RAG也常被在Agent的Cot或是Mutil-Agent协作的流程中)。上篇针对AI Agent有过初步讲解,那什么是RAG?我会先基于探索和学习,将分别基于RAG的核心组件、RAG的常见范式,RAG的应用场景及RAG的评估。然后基于Qcon的见闻,讲讲当前大会各大公司使用RAG进行相应应用落地实践情况。
1. 什么是RAG
在LLM时代,RAG的具体定义指的是,当回答问题或生成文本时,首先从大量文档中检索相关信息。随后,利用这些检索到的信息来生成响应或文本,从而提高预测质量。一个通用的RAG管道 它主要由3个步骤组成:
-
索引:文档被分割成块,编码成向量,并存储在向量数据库中。
-
检索: 根据语义相似性检索与问题最相关的前 k 个块。
-
生成: 将原问题和检索到的词块一起输入大语言模型中,生成最终答案。
1.1 RAG文本问答
1.2 RAG多模态问答
2. 为什么用RAG
2.1 大模型碰到的挑战
大型语言模型展示了强大的能力,但也面临着幻觉、过时知识和不透明推理等挑战。检索增强生成(RAG)通过整合外部数据库的知识,提高了生成内容的准确性和可信度。RAG将大型语言模型的内在知识与外部数据库融合,为知识密集型任务带来了前景。
大语言模型挑战 | RAG技术解决方案 |
虚构信息 | 通过整合外部数据库的知识,提升生成的准确性和可信度 |
过时知识 | 允许持续知识更新和集成领域特定信息 |
非透明推理 | RAG将LLMs固有的知识与外部数据库庞大、动态的知识库有机结合,提高透明度和可追溯性 |
2.2 RAG与其它技术比较
在大语言模型的优化方法中,RAG经常与Fine-tuning(FT)和提示工程相比较。 我们用象限图从外部知识需求和模型适配需求两个维度来说明三种方法的差异。
-
提示工程:利用模型的固有功能,而对外部知识和模型适应的需求最少。
-
RAG:可以比作为信息检索提供量身定制的教科书模型,非常适合精确的信息检索任务。 早期阶段(Naive RAG),几乎不需要对模型进行修改
-
FT:需要进一步训练模型,针对不同下游特定任务,需要重新训练整个庞大的模型;相当于学生随着时间的推移内化知识,适用于需要复制特定结构、风格或格式的场景。
有人提出过这个疑问,为什么要用RAG来做增强,而不选择比较容易想到的微调来做,这里提及了RAG的优势以及和微调的差异,在这里列出两者的对比,主要是为了让大家在进行问题定位和解决方案思考时能参考,权衡好什么时候该用哪些部分。
RAG | 微调 (Fine-tuning) | |
知识更新 | 直接更新检索知识库,确保信息持续更新,无需频繁重新训练,非常适合动态变化的数据环境。 | 存储静态数据,需要重新训练用于知识和数据的更新。 |
外部知识 | 擅长利用外部资源,特别适合处理文档或其他结构化/非结构化数据库。 | 可用于将预训练中外部学习到的知识与大语言模型保持一致,但对于频繁变化的数据源可能不太实用。 |
数据处理 | 对数据的处理和操作要求极低。 | 依赖于构建高质量的数据集,有限的数据集可能无法显著提高性能。 |
模型定制 | 侧重于信息检索和融合外部知识,但可能无法充分定制模型行为或写作风格。 | 允许根据特定风格或术语调整 LLM 行为、写作风格或特定领域知识。 |
可解释性 | 答案能够追溯到具体的数据来源,提供更高的可解释性和可追踪性。 | 就像一个黑盒子,并不总是清楚模型为什么会做出某种反应,可解释性相对较低。 |
计算资源 | 需要计算资源来支持检索策略和数据库相关技术。外部数据源的整合和更新需保持维护。 | 有必要准备和整理高质量的训练数据集,确定微调目标,并提供相应的计算资源。 |
延迟要求 | 因涉及数据检索,可能带来较高的延迟。 | 经过微调的大语言模型 (LLM) 可以不通过检索直接回应,降低延迟。 |
降低幻觉 | 由于每个回答都基于检索到的实际证据,因此本质上更不容易产生错误或虚构的回答。 | 根据特定领域的数据训练模型,有助于减少幻觉,但面对未训练过的输入时仍可能出现幻觉。 |
伦理和隐私问题 | 从外部数据库存储和检索文本可能引起伦理和隐私方面的担忧。 | 训练数据中的敏感内容可能会引起伦理和隐私方面的问题。 |
三、RAG的分类
3.1 从演进范式角度分类
RAG研究范式在不断发展和演进,我们将其分为三个阶段:初级 RAG、高级 RAG 和模块化 RAG。虽然早期的 RAG 在成本效益上表现良好,并且性能优于传统的大语言模型 (LLM),但它仍面临着诸多挑战。高级 RAG 和模块化 RAG 的设计是为了解决原始 RAG (Naive RAG) 的特定不足。下面是三种开发范式解释和相应用组件部分示意图
-
朴素RAG:主要由三部分组成:索引、检索和生成,直接将输入数据向量化,然后对向量数据库进行匹配,最后将输入数据与向量数据库匹配结果共同放入大模型中生成最终结果;
-
高级RAG:增加了对数据的预筛选,围绕预检索和后检索提出了多种优化策略,其过程与朴素RAG相似,仍然遵循链式结构。
-
模块化RAG:继承和发展了以前的范式,整体上显示出更大的灵活性。这体现在引入多个特定的功能模块和替换现有模块上。整个过程不仅限于顺序检索和生成,还包括迭代和自适应检索等方法。
3.2 从检索与生成协同角度
根据检索器如何增强生成器,我们将 RAG 基础范式分为 4 个不同类别:
-
基于查询的RAG:利用用户query检索得到相关文档,将检索结果跟用户query拼接到一起作为生成模型的输入。这种方式是直接利用外部检索知识来指导生成模型,是目前RAG的主流范式。
-
基于潜在表征的RAG:利用用户query检索得到相关文档,并获取对应文档的向量表征,在生成模型生成阶段融入知识文档的表征信息。这是一种隐式利用外部检索知识指导生成模型的方式。
-
基于Logit的RAG:生成模型在decoder阶段计算下一个token的logit时,同时考虑生成预测的结果跟检索模块返回的信息。这种方式将检索模块与生成模块视为两个独立的链路,再联合两者的logit值。
-
Speculative RAG:利用检索模块来替代生成模块的方式,主要用于节省资源跟加速文本生成。这种方式提供一段候选回复,让生成模型判断这段候选回复是否适合作为最终结果。
四、RAG核心结构
RAG 流程中不可或缺的核心技术,主要是“检索”、“生成”和“增强”三个部分,通过整理一个脑图,简述下这些技术间如何错综复杂地协作以形成一个有凝聚力且有效的 RAG框架。
-
检索:从数据源中高效检索相关文档至关重要。 其中涉及到几个关键问题,如检索源、检索粒度、检索的预处理以及相应嵌入模型的选择等。
-
生成:检索后,将所有检索到的信息直接输入大语言模型来回答问题并不是一个好的做法。 需要从调整检索内容和调整大语言模型两个角度介绍调整。
-
增强:在 RAG 领域,标准实践通常涉及单个(一次)检索步骤,然后生成,这可能导致效率低下,有时通常不足以满足需要多步骤推理的复杂问题。
4.1 RAG的增强功能
RAG增强是整体体系的重点,从多个角度我整理了下增强 RAG 性能的方法。 从整个RAG 流程角度,我们根据现有方法的增强目标将其分为 5 个不同的组:输入、检索器、生成器、结果和整个管道。单从RAG检索一个点来看,检索增强可以包含迭代、递归&自适应三个方法。
4.1.1 检索增强分类
除了最常见的一次检索之外,RAG 还包括三种类型的检索增强过程。
-
迭代检索:涉及检索和生成之间的交替,允许在每一步从知识库中获得更丰富、更有针对性的上下文。
-
递归检索:涉及逐步细化用户查询并将问题分解为子问题,然后通过检索和生成不断解决复杂问题。
-
自适应检索:侧重于使 RAG 系统能够自主确定是否需要外部知识检索以及何时停止检索和生成,通常利用 LLM 生成的特殊 Token 进行控制。
4.1.1 RAG过程增强分类
根据现有方法的增强目标将其分为 5 个不同的部分:输入、检索器、生成器、结果和整个管道。针对这些部分有针对性的相应增强方式和方法。
五、RAG评估
RAG 在 NLP 领域的快速发展和广泛采用,将 RAG 模型的评估推向了大语言模型界研究的前沿。 将RAG技术引进到大模型应用场景,我们需要了解和优化 RAG 模型在不同应用场景下的性能。下面简要讲讲 RAG 的主要下游任务、数据集以及如何评估 RAG 系统。
5.1 RAG的下游任务
RAG的核心任务仍然是问答(QA),包括传统的单跳/多跳QA、多选、特定领域的QA以及适合RAG的长格式场景。 除了QA之外,RAG正在不断扩展到多个下游任务,例如信息提取(IE)、对话生成、代码搜索等。 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 |
5.2 RAG的评估项及度量指标
RAG 模型的当代评估实践强调三个主要质量分数和四个基本能力,它们共同指导 RAG 模型的两个主要目标的评估:检索和生成。其中
-
质量分数:上下文相关性,答案忠实性,答案相关性
-
基本能力:噪声鲁棒性,否定拒绝,信息集成,反事实稳健性
适用于 RAG 评估方面的指标摘要,分别对应质量分数和基本能力对应的度量标准,如下表所示:
上下文相关性 | 答案忠诚性 | 回答相关性 | 噪音鲁棒性 | 否定拒绝 | 信息整合 | 反事实稳健性 | |
Accuracy | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
EM | ✓ | ||||||
Recall | ✓ | ||||||
Precision | ✓ | ✓ | |||||
R-Rate | ✓ | ||||||
Cosine Similarity | ✓ | ||||||
Hit Rate | ✓ | ||||||
MRR | ✓ | ||||||
NDCG | ✓ | ||||||
BLEU | ✓ | ✓ | ✓ | ||||
ROUGE/ROUGE-L | ✓ | ✓ | ✓ |
5.3 RAG的评估框架及Benchmark
业界提出了一系列基准测试和工具来促进 RAG 的评估。这些工具提供的定量指标不仅可以衡量 RAG 模型的性能,还可以增强对模型在各个评估方面的能力的理解。 RGB、RECALL 和 CRUD 等著名基准,专注于评估 RAG 模型的基本能力。 同时,最先进的自动化工具如 RAGAS、ARES和 TruLens雇用大语言模型来判定质量分数。 这些工具和基准共同构成了用于系统评估 RAG 模型的强大框架,如表所示:
评估框架 | 评估目标 | 评估方面 | 定量指标 |
RGB† | 检索质量 生成质量 | 噪声鲁棒性 否定性拒绝 信息集成 反事实鲁棒性 | Accuracy EM Accuracy Accuracy |
RECALL† | 生成质量 | 反事实鲁棒性 | R-Rate (再出现率) |
RAGAS‡ | 检索质量 生成质量 | 上下文相关性 答案忠诚性 答案相关性 | * 余弦相似度 |
ARES‡ | 检索质量 生成质量 | 上下文相关性 答案忠诚性 答案相关性 | Accuracy Accuracy Accuracy |
TruLens‡ | 检索质量 生成质量 | 上下文相关性 答案忠诚性 答案相关性 | * |
CRUD† | 检索质量 生成质量 | 创意生成 知识密集型 QA 纠错 总结 | BLEU ROUGE-L BertScore RAGQuestEval |
† 代表基准,‡ 代表工具。* 表示自定义量化指标,偏离传统指标。鼓励读者根据需要查阅相关文献,了解与这些指标相关的具体量化公式。
六、RAG的应用场景
RAG技术具有广泛的应用场景,可以在文本、代码、音频、视频等多个领域发挥作用。在文本领域,RAG可用于生成自然语言文本摘要、问答系统和对话生成。在代码领域,RAG可以帮助自动生成代码注释、代码片段和解释性文档。在音频领域,RAG可用于语音识别、语音生成和音频内容摘要。在视频领域,RAG可以应用于视频内容摘要、视频片段生成和视频字幕生成等。总的来说,RAG技术的广泛应用使其成为一个强大的工具,能够在各种领域中提供自然、准确的生成和理解能力。
七、RAG的生态总结
下面是基于前面RAG各部分的一个生态全景图,包含了RAG的下游任务、RAG范式,RAG评估、RAG的核心技术,RAG的展望等。
八、业界的RAG实战
回到场景里,从整个北京Qcon的分享来看,此次RAG和向量数据库有一个专门的专项,我先挑几个主题大致减少一下,他们的实战及成果。
8.1 RAG的落地实践问题
句子互动联合创始人&CTO分享了他们在RAG商业化落地碰到的各种问题,整个分享展示简单,内容朴素,但还是十分落地的。他分别从表格数据的RAG方案,效果优化,Embedding相似度不够、模型幻觉、多次同样问题回复不准确等多个实践方面进行了分享。
坑一:表格数据如何RAG
坑二:表格数据RAG效果不佳
坑三:Embedding相似度不准
坑四:自行编造产品问题
坑五:多次回复稳定性不好
8.2 RAG的垂直场景应用
金山云人工智能产品中心总经理-陈海彪,分享了其基于RAG模式的金山云轻舟智问的技术架构,及其在各行各业如何实现创新应用。其中围绕着RAG体系,进行了相关能力构建的讲解。
大模型的技术发展,结合知识库,带了一种全新的应用模式"知识助手"(通过RAG技术)
RAG的升级为以解释性检索为中心的RCG
检索的关键,如何高效建设索引。他们做了很多能力建设,如一些智能能力的搭建,如:OCR模型、文档智能解析、多模态文档识别引擎等;文档智能的处理流程;利用多路递进式召回策略进行检索准确性;
检索的重要第二步,训练Embedding模型
检索的效果好坏,需要闭环的专业评测体系,他们基于RAG的评测方法论,也自建了一套自动和专家人工评测
最后他分享了在金山云售后问答、政务&法律、智能合同审查、公文智能写作助手等场景都有落地且效果不错。但知识助手的挑战也异常艰巨,其中,模型的可解释性和幻觉将一直他们需要解决的长期系统工程。
8.3 多模态的RAG探索
来自Fabara的解决方案负责人-张红兵,介绍了他们基于多模态智能引擎的大模型知识库技术应用,它们结合落地案例实践经验,针对企业实际、复杂的数据现状,提供全新的解决方式——基于多模智能引擎的大模型知识库方案。
对企业多源、异构数据的现状,需对这些不规范数据进行解析,智能抽取数据之间的关系并提供低代码方式进行数据探查;
-
元数据知识化
-
元数据智能补齐
-
元数据关联关系发现和构建
在多模态智能引擎中以图的形式存储确定的知识,以向量的形式存储非结构化的知识,以图和向量融合的方式构建大语言模型驱动的企业知识中台。
利用低代码技术快速构建包括智能对话、摘要、标签、生成、text2data 在内的各种知识应用,为企业大模型用落地提供有效的技术支撑。
还有其的RAG案例,这里就不一一展开了。RAG也不是单独存在的,Agent中也时常会和RAG一起结合进行大模型的复杂应用的构建。