RAG 面试题
什么是 RAG?它的核心思想是什么?
RAG 是 Retrieval-Augmented Generation(检索增强生成)的缩写。
RAG 是一种结合了 信息检索(Retrieval) 和 生成模型(Generation) 的技术架构,主要用于解决大规模知识和上下文无法完全存储在单个语言模型中的问题。它通过先从外部知识库或文档库中检索相关信息,再将这些检索到的内容作为上下文输入给生成模型,辅助模型生成更准确、详实且有依据的回答。
RAG 的核心思想
-
先检索,后生成:
先利用检索器(如基于向量搜索的 dense retriever 或基于关键词的 sparse retriever)从大规模文档库中快速找到与输入问题最相关的文本片段或文档。 -
结合检索内容生成回答:
将检索结果作为生成模型(如 GPT、BART 等)的附加上下文,一起输入生成模型,使模型能够基于更丰富、更准确的外部知识,生成高质量回答。 -
动态利用外部知识库:
不依赖模型自身参数记忆的知识,能实时访问和利用外部海量动态更新的知识库,克服纯生成模型在知识时效性和覆盖面的局限。
RAG 的优势
- 提高回答的准确性和信息丰富度。
- 支持海量知识库的动态访问。
- 解决大模型参数有限导致的知识遗忘问题。
- 可应用于问答系统、对话系统、知识库问答、文档总结等多种场景。
RAG 与传统的 Seq2Seq 模型有何本质区别?
这是个非常经典且重要的问题!下面帮你详细分析 RAG 和传统 Seq2Seq 模型的本质区别:
1. 基础架构区别
-
传统 Seq2Seq 模型
传统的序列到序列(Seq2Seq)模型(比如基于 Transformer 的模型)只依赖于自身的参数来“记忆”和生成信息。模型把输入编码成隐藏表示,直接生成输出,完全依赖训练时学到的知识。 -
RAG(Retrieval-Augmented Generation)
RAG 在生成之前,先从外部知识库检索相关信息,然后把检索结果和输入一起传给生成模型。也就是说,RAG 是“检索 + 生成”的组合,生成过程是基于外部知识的增强生成。
2. 记忆机制差异
-
Seq2Seq 模型知识完全存在于模型参数里,参数越大,记忆越多,但仍有限制;知识难以实时更新。
-
RAG 利用外部数据库或文档库,动态访问最新、海量的信息,模型参数可以保持相对较小,但通过检索机制调用广泛知识。
3. 应对知识范围和时效的能力
-
传统 Seq2Seq 模型知识范围受限,且训练完成后难以更新,容易出现“知识过时”。
-
RAG 通过实时检索外部数据,具有更强的知识时效性和覆盖面,更灵活。
4. 生成内容的准确性与可解释性
-
纯 Seq2Seq 生成有时会产生“幻觉”或无依据的回答。
-
RAG 的回答可以追溯到检索到的具体文档片段,提高生成内容的可信度和可解释性。
5. 复杂度和系统设计
-
Seq2Seq 模型单一,训练和推理流程简单。
-
RAG 系统设计更复杂,需要集成检索模块(如向量数据库)、检索策略和生成模块,系统工程难度更大。
总结
维度 | 传统 Seq2Seq | RAG |
---|---|---|
知识来源 | 模型参数 | 模型参数 + 外部检索 |
知识更新 | 重新训练模型 | 动态检索,实时更新 |
生成依据 | 仅靠训练得到的知识 | 结合检索到的外部文档 |
准确性 | 易出现幻觉 | 可追溯且更准确 |
系统复杂度 | 较低 | 较高,需检索与生成模块协同工作 |
应用场景 | 问答、翻译、摘要等 | 需要海量知识支持的问答、对话、检索辅助生成 |
RAG 为什么能够缓解 LLM 的幻觉问题?
RAG 能缓解 LLM(大型语言模型)幻觉问题,关键在于它引入了外部知识检索,为生成内容提供了“有据可依”的信息源,具体原因如下:
1. 生成基于真实检索内容
- 传统 LLM 纯靠模型内参数生成回答,有时会凭“模型内隐含知识”编造不真实的内容,即“幻觉”。
- RAG 先检索相关文档片段,将这些真实存在且相关的文本作为上下文,辅助模型生成。
- 这样生成的回答会更贴近检索到的事实,减少无根据的“胡说”。
2. 提供可追溯的依据
- RAG 可以输出检索的具体文档或证据片段,用户和系统能查验生成内容的来源。
- 这让模型生成不再“闭环自说自话”,而是建立在可验证的外部知识上。
3. 动态更新的知识库避免陈旧信息
- LLM 参数静态,知识可能过时,导致回答错误。
- RAG 访问外部实时更新的知识库,提供最新、准确的信息,减少因知识陈旧导致的错误生成。
4. 降低生成模型盲目“联想”风险
- 在无检索信息时,LLM 会凭“语言模式”猜测或联想回答,容易偏离事实。
- 检索结果为生成提供“锚点”,引导模型输出符合检索内容的回答,减少“幻想”。
5. 多文档融合提升答案严谨度
- RAG 可检索多条相关文档,生成时综合多来源信息,降低单一错误源带来的幻觉。
总结
传统 LLM 幻觉原因 | RAG 如何缓解 |
---|---|
依赖参数隐含知识,可能出错 | 依赖外部检索内容,信息真实可查 |
无法动态更新知识库 | 检索动态更新的知识库,知识更准确 |
纯语言模式推理易幻想 | 检索提供事实锚点,引导生成内容 |
无法给出明确证据 | 可追溯生成内容来源,提高可信度 |
RAG 的工作流程是怎样的?
RAG(Retrieval-Augmented Generation)的工作流程大致可以分为以下几个步骤:
RAG 的典型工作流程
-
输入接收(Input)
用户输入一个查询或问题,比如“什么是量子计算?” -
检索阶段(Retrieval)
-
使用检索器(Retriever)从外部知识库(如文档库、数据库、向量索引)中找出与输入最相关的若干文档或文本片段。
-
检索方法一般分为:
- 基于向量的相似度搜索(Dense Retrieval)
- 基于关键词的传统搜索(Sparse Retrieval)
-
-
上下文构建(Context Construction)
- 将检索到的文本片段与原始输入结合起来,形成一个更丰富的上下文。
- 这个上下文会作为生成模型的输入。
-
生成阶段(Generation)
- 生成模型(如 GPT、BART 等)接收扩展后的上下文,根据检索内容和用户输入生成回答或文本。
- 生成的内容会尽量基于检索到的事实,减少幻觉。
-
输出(Output)
- 返回给用户最终生成的答案,通常也可以附带检索到的文档来源,方便验证和参考。
简单流程图示意
用户输入 -> 检索器 -> 从知识库检索相关文档 -> 将检索结果和输入拼接 -> 生成模型生成回答 -> 返回结果给用户
额外说明
- 有些系统会进行多轮检索与生成,逐步完善答案。
- 检索器和生成器通常是联动训练(end-to-end)或独立训练。
- 生成模型可以基于多条检索结果综合推理。
RAG 中的检索器(Retriever)通常使用什么技术?
RAG 中的检索器(Retriever)通常使用以下几类技术:
1. 稀疏检索(Sparse Retrieval)
-
基于关键词匹配,类似传统的搜索引擎技术。
-
经典方法包括:
- BM25(Okapi BM25):基于词频和逆文档频率(TF-IDF)计算文本相似度。
- TF-IDF 向量匹配:用词频统计建立向量空间模型,计算查询与文档的相似度。
-
优点:简单高效,解释性好;缺点:难捕捉语义层面相似。
2. 密集检索(Dense Retrieval)
-
利用深度学习模型,将查询和文档编码成低维向量,在向量空间中计算相似度。
-
常用技术:
- Siamese 网络或双塔模型(Dual Encoder):分别编码查询和文档,计算余弦相似度。
- 基于 Transformer 的编码器,例如使用 BERT、RoBERTa、DistilBERT 等预训练模型做编码。
- Sentence-BERT(SBERT):专门优化句子级语义向量表示。
-
优点:更好捕捉语义相似度,适合复杂查询;缺点:训练和检索资源消耗大。
3. 混合检索(Hybrid Retrieval)
- 结合稀疏和密集检索的优点,综合关键词匹配和语义匹配结果,提升召回率和准确度。
- 例如:先用 BM25 召回一批候选,再用密集向量模型重新排序。
4. 其他技术
- 基于反向索引的快速检索结构,如 FAISS、Annoy、HNSW,用于加速向量检索。
- 语义搜索平台:比如 ElasticSearch + Dense Vector 插件,支持混合检索。
总结
检索类型 | 代表技术 | 优点 | 缺点 |
---|---|---|---|
稀疏检索 | BM25、TF-IDF | 简单、高效、解释性好 | 语义捕捉能力弱 |
密集检索 | BERT/SBERT、Dual Encoder | 语义匹配能力强 | 计算资源要求高,训练复杂 |
混合检索 | BM25 + Dense Vector | 综合优势,准确率更高 | 系统复杂度更高 |
RAG 中的生成器(Generator)通常使用什么模型?
RAG 中的生成器(Generator)通常使用以下几类模型:
1. 预训练的序列生成模型(Seq2Seq)
-
BART
一个基于 Transformer 的编码器-解码器模型,预训练时结合了自编码和自回归目标,适合生成流畅且上下文连贯的文本。 -
T5(Text-to-Text Transfer Transformer)
通用的文本转换模型,输入输出均为文本,广泛用于问答、翻译、摘要等生成任务。
2. 自回归语言模型(Autoregressive LM)
-
GPT 系列(GPT-2、GPT-3、GPT-4 等)
纯解码器结构的模型,强大的文本生成能力,常用作自然语言生成的基础。 -
在 RAG 框架中,GPT 模型一般会被改造成带有条件输入(比如拼接检索结果和问题)的生成器。
3. 结合检索上下文的定制生成模型
-
生成器接收拼接了检索结果的输入,结合问题和相关文档上下文,生成基于事实的回答。
-
这类模型可能是对 BART、T5、GPT 等模型的微调版本,专门针对检索增强生成任务进行优化。
4. 具体开源实现中的选择
-
Facebook 的 RAG 论文和实现中,通常用 BART-large 作为生成器。
-
也有基于 T5 及其变体的实现。
总结
生成模型类型 | 代表模型 | 特点 |
---|---|---|
编码器-解码器模型 | BART、T5 | 适合条件生成,能结合上下文信息 |
自回归语言模型 | GPT 系列 | 强大的自然语言生成能力 |
定制微调版本 | 针对检索结果优化 | 更好融合检索上下文,提高生成准确性 |
RAG 如何结合向量检索与生成?
RAG 结合向量检索与生成的关键,是把检索到的向量对应的文档内容作为上下文输入给生成模型,从而实现“检索增强生成”。具体流程如下:
RAG 结合向量检索与生成的步骤
-
向量化查询
将用户输入(查询)用检索编码器(通常是BERT或类似模型)编码成一个 dense vector(稠密向量)。 -
向量检索
利用向量搜索引擎(如 FAISS)在文档库对应的向量索引中,找到与查询向量距离最近的若干条文档向量,获得对应的文档内容。 -
拼接上下文
将检索到的文档内容和用户查询文本拼接成一个更丰富的上下文(prompt)。
例如:“问题 + 检索到的相关文档1 + 检索到的相关文档2 + ...” -
条件生成
把这个拼接后的上下文输入到生成模型(如 BART、T5 或 GPT),生成模型基于这个上下文生成回答。生成过程既利用了用户查询,也利用了检索到的具体文档事实。 -
输出回答
返回生成模型的输出作为最终回答,通常准确度更高且更具事实依据。
结合示意图
用户查询 → 编码器生成查询向量 → 向量检索引擎找相关文档 → 拼接查询与文档上下文 → 生成模型生成回答 → 返回结果
关键点
- 查询编码器和文档编码器通常共享权重或相似结构,保证语义空间一致。
- 检索到的文档直接影响生成内容,增强事实准确性。
- 生成模型输入包含了“检索+查询”,而非单独的查询,避免幻觉。
RAG 训练
完全对!RAG 本质上包含两个核心模型:
- 检索器(Retriever) —— 通常是一个 embedding 模型,负责把查询和文档都编码成向量,做相似度检索。
- 生成模型(Generator,通常是 LLM) —— 基于检索到的文档上下文,生成最终回答或文本。
分别训练 vs 端到端联合训练的区别
方面 | 分别训练 | 端到端联合训练 |
---|---|---|
训练方式 | 检索器和生成模型分别训练,互不影响 | 同时训练检索器和生成器,联合优化 |
优点 | 训练简单,利用预训练模型效果较好 | 检索器和生成器协同,整体性能更优 |
缺点 | 不能针对生成效果优化检索,限制整体表现 | 训练复杂,检索模块不可微分,需特殊技巧 |
适用场景 | 快速构建原型或资源有限时 | 追求更高质量和复杂场景 |
梯度流动 | 生成模型只接收生成相关梯度,检索器无梯度 | 梯度通过生成模型反传,部分梯度影响检索器参数 |
模型耦合度 | 松耦合 | 高度耦合 |
简单说,分阶段训练就是先让 embedding 模型学会“找对文档”,再让 LLM 学会“读懂文档生成回答”;而端到端训练让两个模型“联动”,检索器能被生成器的生成效果反馈驱动,更好地为生成任务服务。
维度 | Sentence-BERT (SBERT) | OpenAI Embedding (text-embedding-ada-002 ) |
---|---|---|
架构 | 基于 BERT/Transformer 的 Siamese 网络 | 基于 GPT 家族大模型训练的专用嵌入模型 |
训练目标 | 对比学习(如相似/不相似句对)以优化语义相似度 | 专为高质量语义表示和向量搜索优化的大规模训练 |
部署方式 | 本地部署,可微调(开源) | 需调用 OpenAI API(闭源) |
可控性 | 可完全掌握模型,支持细粒度调优 | 无法训练或修改,只能调参数 |
质量表现 | 中小规模应用表现稳定,语义检索能力强 | 质量极高,跨领域、跨语言表现优秀,召回能力更强 |
响应速度 | 快(本地部署) | 受限于网络/API 延迟 |
典型用途 | 本地 RAG、定制语义搜索、教育/研究 | 商业语义搜索、企业级 RAG、嵌入大规模向量库 |