一问讲透什么是 RAG,为什么需要 RAG?
一. 为什么要用 RAG ?
假设你手里有一个训练好的大语言模型,想让它帮你处理个人数据,比如回答“我上个月的项目报告放在哪儿了”——结果模型一脸茫然。这种情况在企业内部更常见:拿模型去回答公司内部的规章制度、产品文档,它往往答非所问。根本原因在于,预训练模型的知识是静态的、通用的,没法覆盖你独有的信息。

那怎么让大模型“听懂”你的需求呢?主流的路线有三条:
- :通过精心设计的提示词来引导模型。比如常见的In-context Learning,你在提问时附带几个示例,告诉模型“请用这种风格回答”。它不改变模型本身,只改变输入方式,门槛最低。
Prompt Engineering(提示工程)
- :用特定领域的数据对模型进行二次训练。举个例子,一家公司可以用内部文件微调ChatGPT,让它准确回答“年假申请流程”之类的问题。但微调需要大量高质量、有代表性的数据集,而且效果有限——它不适合给模型注入全新知识,更不适合需要快速迭代的场景。
Fine-tuning(微调)
- :把神经语言模型和一个外部检索系统结合起来。检索系统从数据库或文档库里找出相关信息,语言模型再根据这些信息生成回答。打个比方:RAG相当于给模型配了一本教科书,让它每次回答前先翻书找答案。这种方法特别适合需要实时、最新或高度定制信息的场景,比如企业内部知识问答。但RAG不擅长让模型学习广泛领域的知识或新的语言风格。
RAG(Retrieval Augmented Generation,检索增强生成)
下面的对比表直观地反映了这三种方法的差异(引自Gao et al., 2023的综述):
目前大量研究已经证实,RAG在优化大模型方面相比其他方法有显著优势(Shuster et al., 2021; Yasunaga et al., 2022; Wang et al., 2023c; Borgeaud et al., 2022)。优势主要体现在六个维度:
- :通过外部知识源有效减少幻觉,回答更可信。
准确性
- :检索系统能获取用户提供的最新信息,保证回答不落伍。
及时性
- :RAG会引用信息来源,用户可以核查,信任度更高。
透明度
- :针对特定领域数据检索,能提供专业支撑。
定制能力
- :知识存储在数据库中,数据权限容易控制;相比之下,微调后的模型在数据管理上不够透明,企业风险较大。
安全性和隐私
- :不需要更新模型参数,处理大规模数据时成本更低。
经济效率
话说回来,这三种方法并非互斥,而是相辅相成的。把RAG和微调、提示工程结合起来,能让模型能力层层叠加——尤其在特定场景下,这种协同作用能把效果推到最佳。当然,整个过程往往需要多次迭代和调整。
下图展示了RAG实际应用的过程(引自Gao et al., 2023的综述):
二. 什么是 RAG ?
这一章展开讲讲RAG的具体流程和关键技术。简单说,RAG有两个核心环节:
检索(Retrieval)
生成(Generation)
- :从大规模知识库中找出最相关的前几个文档。
检索
- :把检索到的信息转化为自然流畅的文字。
生成
检索(Retrieval)
想让检索更精准,三个问题得解决好:如何获得准确的语义空间?如何匹配查询和文档的语义空间?如何让检索器的输出符合大语言模型的偏好?下面一一来看。
a.) 如何获得准确的语义空间
我们把查询和文档映射到多维空间里,这个空间就叫
语义空间
区块优化(Chunk Optimization)
处理外部文档时,先把它拆成小碎片,提取细粒度特征,然后用嵌入模型(Embedding Model)把这些碎片转化成向量。碎片太大或太小都会影响效果,需要考虑检索内容的性质、嵌入模型的最佳块大小、用户查询的预期长度和复杂度等。目前主流的方法有:
- :合并多个检索过程的相关信息,实现分层检索。
Sliding window technology(滑动窗口)
- :先用小文本块做初步搜索,再提供较大的相关文本块给语言模型。
Small2big
- :优先基于文档摘要做前K次检索,提供对全文的理解。
Abstract embedding
- :通过文档的元数据进行筛选。
Metadata filtering(元数据过滤)
- :把实体和关系转化为节点和连接,特别适合多跳问题。
Graph indexing(图索引)
微调嵌入模型(Fine-tuning Embedding Models)
确定了合适的块大小后,需要用嵌入模型把块和查询映射到语义空间。嵌入模型的效果至关重要。传统常用的有:
- :基于BERT的Python NLP套件,适合处理单句。
Sentence-Transformers
- :OpenAI的嵌入模型,适合处理256或512个token的文本块。
text-embedding-ada-002
如今更先进的嵌入模型,如AngIE、Voyage、BGE等,已经在大规模语料上预训练过。但应用到特定领域时,它们捕捉领域特定信息的能力可能不足,因此还需要微调。主要有两种微调方式:
- :嵌入模型的微调和大语言模型不同,它的数据集包括查询(Queries)、语料库(Corpus)和相关文档(Relevant Docs)。数据收集过程繁琐,LlamaIndex为此提供了专门的工具。
领域知识微调
- :例如PROMPTAGATOR用大语言模型来微调嵌入模型,解决数据不足的问题。
针对下游任务微调
b.) 如何协调查询和文档的语义空间?
有些检索器用同一个嵌入模型处理查询和文档,有些则用两个不同的模型。用户原始查询可能表述不清或缺少必要语义。两种主流做法:
查询重写(Query Rewriting)
比如Query2Doc和ITER-RETGEN,利用大语言模型把原始查询与额外指导信息结合起来,生成一个虚拟文档。其他方法如HyDE、RRR、STEP-BACK-PROMPTING也属于这类。
嵌入转换(Embedding Transformation)
相比查询重写,这是一种更微观的技术。LlamaIndex在查询编码器后加入一个特殊的适配器并微调,从而优化查询的嵌入表示,使其更契合特定任务。
c.) 根据 LLM 的需求调整检索结果
上面那些方法能提升检索效果,但不一定能提高大语言模型的准确度——因为检索结果可能不符合模型的口味。如何让检索结果向模型偏好靠拢,是一个重要的研究方向。
微调检索器(Fine-tuning Retrievers)
核心思路是用大语言模型产生的反馈信号来调整嵌入模型——用模型给的分数指导检索器训练,相当于让大语言模型给数据打标签。代表方法如AAR。
适配器(Adapters)
微调方法在实现上有难度,比如API限制和算力成本。所以有些研究在外接适配器来对齐模型,比如PRCA,在上下文提取阶段和奖励驱动阶段训练适配器,通过基于token的自回归策略优化检索器输出。
生成(Generation)
生成器负责把检索到的信息转换成连贯、流畅的文本。它的输入不仅包括通常的上下文,还包括检索器带来的相关文本片段,这让生成器能深入理解问题背景,产生更精准的回答。
但检索到的内容五花八门,所以一系列研究聚焦于提高生成器的适应性,让它能应对来自查询和文档的各种输入。
a.) 如何优化检索到的信息?
目前主流做法是直接调用训练好的大语言模型(如ChatGPT-4)来做生成,但这些模型仍有上下文长度限制、对冗余信息敏感等问题。因此,
检索后处理(Post-retrieval Processing)
信息压缩(Information Compression)
即使检索器能从海量知识里精准找到相关信息,海量信息本身也是挑战。简单扩大上下文长度不能根治——压缩是必要的。PRCA通过训练一个信息提取器来解决:给定输入文本Sinput,生成输出序列Cextracted,代表从输入中压缩得到的上下文,训练目标是最小化Cextracted与实际上下文Ctruth的差距。此外还有RECOMP、Filter-Ranker等方法。Filter-Ranker结合了大语言模型和小语言模型的优点——小模型做过滤器,大模型做排序器,显著提升信息提取任务的效果。
重排序(Reranking)
大语言模型在引入额外上下文时性能常会下降,重排序能有效解决这个问题。核心概念是重新排列文档记录,让最相关的项目排在最前面,同时限制文档总数,从而解决上下文窗口扩展的挑战,提升检索效率和响应速度。
b.) 如何根据检索到的信息优化生成器?
普通大语言模型输入通常只有一段文字查询,但在RAG里,输入是查询加检索到的各种文档(结构化和非结构化)。这种额外信息会明显影响模型的理解,尤其是较小的模型。此时,微调模型以适应“查询+检索文档”这个输入格式就很重要。生成器的微调方法和一般的大语言模型微调方法基本一样,这里简单提两个代表性方向:
通用优化流程
Self-mem采用传统训练方法:给定输入x,检索信息z,结合(x,z),模型生成输出y。论文探讨了两种主流微调架构:Joint-Encoder(联合编码器)和Dual-Encoder(双编码器)。Joint-Encoder使用标准的encoder-decoder模型,encoder先编码输入,decoder通过注意力机制结合编码结果自回归生成。Dual-Encoder则设置两个独立的encoder,分别编码输入(查询+上下文)和文档,输出再经过decoder做双向交叉注意力处理。两种都基于Transformer。
利用对比学习
传统训练数据只建立输入输出的配对,容易导致“暴露偏差”——模型只见过正确的输出,不知道其他可能的生成路径。SURGE提出使用图文对比学习,引入对比学习目标,促使模型产生多样且连贯的回应,从而减少过拟合、增强泛化能力。
三. RAG 生态系 ?
RAG的生态正在蓬勃生长。水平方向上,从最初的纯文本问答,RAG已扩展到图像、代码、结构化知识、音视频等多模态数据,相关研究成果不断涌现。
技术栈的发展也很快。LangChain和LlamaIndex这类关键工具随着ChatGPT的爆发迅速获得了人气,它们提供了大量与RAG相关的API,成为大语言模型领域的标杆。
同时,新兴技术栈也在崛起。比如Flowise AI采用低代码方法,用户通过拖拽界面就能部署包含RAG的AI应用。其他如HayStack、Meltano、Cohere Coral等也因其独特贡献受到关注。
除了纯粹的AI提供者,传统软件和云服务商也在扩展以RAG为中心的服务。向量数据库公司Wea viate推出的Verba专注于个人助理应用;亚马逊的Kendra提供智能企业搜索服务,让用户通过内置连接器在各种内容仓库中导航。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名