【LLM】RAG mRAG

RAG

一、什么是 RAG?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索 与大语言模型生成相结合的架构范式。它的核心思想是:在让模型生成回答之前,先从外部知识库中检索出与问题最相关的文档片段,再将这些片段作为上下文(Context)一并输入给模型,从而引导模型生成更准确、更可靠、有据可查的回答。

RAG 的提出主要是为了解决纯 LLM 的两大痛点:知识截止问题 (模型不了解训练后的新知识)和幻觉问题(模型凭空编造事实)。


二、RAG 的核心架构

RAG 的完整流程分为三个阶段。

第一阶段:索引(Indexing)

这是离线预处理阶段。将原始文档切割成若干文本块(Chunk),再通过 Embedding 模型将每个 Chunk 编码为向量,存入向量数据库(如 FAISS、Pinecone、Milvus 等)。

第二阶段:检索(Retrieval)

当用户提出问题时,系统将问题同样编码为向量,然后在向量数据库中执行相似度搜索,召回 Top-K 个最相关的文档块。常见的检索策略有稠密检索(Dense Retrieval)、稀疏检索(Sparse Retrieval / BM25)和混合检索(Hybrid Retrieval)。

第三阶段:生成(Generation)

将检索到的文档块与原始问题拼接成一个 Prompt,输入大语言模型(如 GPT、LLaMA 等),由模型基于这些上下文生成最终答案。


三、重要公式

1. 余弦相似度(Cosine Similarity)

稠密检索中最核心的相似度计算公式,用于衡量查询向量与文档向量之间的相关性:

sim(q,d)=q⃗⋅d⃗∣q⃗∣⋅∣d⃗∣ \text{sim}(q, d) = \frac{\vec{q} \cdot \vec{d}}{|\vec{q}| \cdot |\vec{d}|} sim(q,d)=∣q ∣⋅∣d ∣q ⋅d

其中 q⃗\vec{q}q 是查询的嵌入向量,d⃗\vec{d}d 是文档块的嵌入向量。值域为 −1,1-1, 1−1,1,越接近 1 表示越相似。

2. BM25(稀疏检索)

BM25 是经典的基于词频的检索算法,是稀疏检索的标准实现:

BM25(D,Q)=∑i=1nIDF(qi)⋅f(qi,D)⋅(k1+1)f(qi,D)+k1⋅(1−b+b⋅∣D∣avgdl) \text{BM25}(D, Q) = \sum_{i=1}^{n} \text{IDF}(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{\text{avgdl}}\right)} BM25(D,Q)=i=1∑nIDF(qi)⋅f(qi,D)+k1⋅(1−b+b⋅avgdl∣D∣)f(qi,D)⋅(k1+1)

其中 f(qi,D)f(q_i, D)f(qi,D) 是词 qiq_iqi 在文档 DDD 中的词频,∣D∣|D|∣D∣ 是文档长度,avgdl\text{avgdl}avgdl 是语料库的平均文档长度,k1k_1k1 和 bbb 是超参数(通常 k1∈1.2,2.0k_1 \in 1.2, 2.0k1∈1.2,2.0,b=0.75b = 0.75b=0.75)。

IDF 部分定义为:

IDF(qi)=log⁡N−n(qi)+0.5n(qi)+0.5 \text{IDF}(q_i) = \log \frac{N - n(q_i) + 0.5}{n(q_i) + 0.5} IDF(qi)=logn(qi)+0.5N−n(qi)+0.5

NNN 为总文档数,n(qi)n(q_i)n(qi) 为包含词 qiq_iqi 的文档数。

3. TF-IDF(更基础的稀疏检索)

TF-IDF(t,d)=TF(t,d)×IDF(t)=f(t,d)∑kf(k,d)×log⁡Ndf(t) \text{TF-IDF}(t, d) = \text{TF}(t, d) \times \text{IDF}(t) = \frac{f(t,d)}{\sum_k f(k,d)} \times \log \frac{N}{df(t)} TF-IDF(t,d)=TF(t,d)×IDF(t)=∑kf(k,d)f(t,d)×logdf(t)N

4. 混合检索分数融合(RRF,Reciprocal Rank Fusion)

混合检索时,将稠密检索和稀疏检索的结果合并排名常用 RRF:

RRF_score(d)=∑r∈rankers1k+r(d) \text{RRF\score}(d) = \sum{r \in \text{rankers}} \frac{1}{k + r(d)} RRF_score(d)=r∈rankers∑k+r(d)1

其中 r(d)r(d)r(d) 是文档 ddd 在某个检索器中的排名,kkk 通常取 60,是平滑常数。

5. 评估指标:ROUGE-N

用于评估生成答案与参考答案的重叠程度:

ROUGE-N=∑s∈Reference∑gramn∈sCountmatch(gramn)∑s∈Reference∑gramn∈sCount(gramn) \text{ROUGE-N} = \frac{\sum_{s \in \text{Reference}} \sum_{\text{gram}n \in s} \text{Count}{\text{match}}(\text{gram}n)}{\sum{s \in \text{Reference}} \sum_{\text{gram}_n \in s} \text{Count}(\text{gram}_n)} ROUGE-N=∑s∈Reference∑gramn∈sCount(gramn)∑s∈Reference∑gramn∈sCountmatch(gramn)


四、RAG 进阶技术

理解这些进阶方向对面试非常重要。

Naive RAG → Advanced RAG → Modular RAG 是 RAG 的演进路线。Advanced RAG 中有几个关键技术:

  • Query Rewriting(查询改写):用 LLM 将用户原始问题改写为更适合检索的形式,提升召回率。
  • HyDE(Hypothetical Document Embeddings):让 LLM 先生成一个假设性答案,用假设答案的向量去检索,而不是用问题向量。
  • Re-ranking(重排序):对初步召回的 Top-K 结果,用 Cross-Encoder 精排,提升精度。
  • Chunking 策略:文本切割方式(固定长度、语义切割、父子 Chunk 等)对检索质量影响极大。
  • Self-RAG:模型自主判断何时需要检索,并对检索结果的质量进行反思和评分。

五、面试高频问题及回答策略

Q1:RAG 和 Fine-tuning 有什么区别?什么时候用哪个?

这是最经典的对比题。核心回答思路是:Fine-tuning 是把知识"烧"进模型权重,适合学习固定的风格、格式或领域能力;RAG 是在推理时动态"查"知识,适合知识频繁更新、需要溯源的场景。两者不互斥,生产中常结合使用------先 Fine-tuning 让模型适应领域格式,再用 RAG 补充实时知识。关键判断维度是:知识是否频繁变动、数据量是否足够支撑 Fine-tuning、是否需要可解释性(RAG 可以返回来源)。

Q2:RAG 的检索质量差怎么办?如何优化?

这道题考察工程经验。可以从以下角度回答:①优化 Chunking 策略,比如使用语义切割或父子结构;②使用更好的 Embedding 模型;③引入 Query Rewriting 或 HyDE;④换用混合检索(BM25 + Dense)+ RRF 融合;⑤加入 Re-ranking 模型(如 BGE-reranker、Cohere Rerank);⑥构建评估体系,用 RAGAS 等框架定量评估召回率和答案质量。

Q3:如何评估一个 RAG 系统的好坏?

可以从两个维度回答:检索侧指标包括 Recall@K(相关文档是否被召回)、MRR(平均倒数排名)、NDCG;生成侧指标包括 Faithfulness(答案是否忠实于检索到的文档,这是最重要的防幻觉指标)、Answer Relevancy(答案是否和问题相关)、Context Precision/Recall。推荐提到 RAGAS 框架,它是目前主流的 RAG 评估工具。

Q4:RAG 中的 Chunk 大小如何确定?

Chunk 大小是一个 trade-off 问题。太小则每个 Chunk 语义不完整,缺乏上下文;太大则引入噪声,且占满 LLM 的 context window,导致"迷失在中间"(Lost in the Middle)问题。实践中通常推荐 256~512 tokens 作为起点,并用 overlap(重叠区域,如 50 tokens)来避免语义在边界处截断。也可以使用父子 Chunk 策略:用小 Chunk 检索(精度高),但送给 LLM 的是其父 Chunk(上下文完整)。

Q5:什么是"Lost in the Middle"问题?

这是一个重要的研究发现。研究表明,当多个检索到的文档拼接成长上下文后,LLM 对位于上下文中间位置的信息利用率显著低于开头和结尾。解决方案包括:减少送入的文档数量(提升 precision)、对文档重新排序(把最相关的放在首尾)、使用支持更长且注意力更均匀的模型。

Q6:RAG 中如何处理多跳推理(Multi-hop Reasoning)?

标准 RAG 只做一次检索,难以处理需要多步推理的问题(如"A 的老板的母校在哪里")。解决方案有:①Iterative RAG,多轮检索,每轮用上一轮的结果细化查询;②Self-RAG,模型自主决策是否继续检索;③Graph RAG,将知识组织成知识图谱,利用图结构做多跳推理,微软的 GraphRAG 是代表性工作。

Q7:向量数据库的近似最近邻(ANN)搜索原理是什么?

这道题考察底层原理。ANN 算法的目标是在海量向量中快速找到最相似的向量,常用算法包括:HNSW (Hierarchical Navigable Small World,分层可导航小世界图)是目前最主流的方案,通过构建多层图结构实现 O(log⁡N)O(\log N)O(logN) 级别的查询;IVF (Inverted File Index,倒排文件索引)将向量空间划分为多个聚类,查询时只在最近的聚类内搜索;PQ(Product Quantization,乘积量化)用于压缩向量存储空间,降低内存消耗。


MRAG

一、MRAG 是什么?

MRAG 通常指 Multimodal RAG(多模态检索增强生成) ,是对标准 RAG 的重要扩展。标准 RAG 只处理纯文本的输入、检索和生成,而 MRAG 将整个流程扩展到多种数据模态,包括文本、图像、表格、图表、音频乃至视频。

这一需求在现实场景中极为普遍------企业的知识库往往是充满图表的 PDF 报告、含有截图的技术文档、混杂表格和文字的财务报告,纯文本 RAG 在这些场景下会丢失大量信息。


二、MRAG 与标准 RAG 的核心区别

数据层面

标准 RAG 的知识库只有文本,而 MRAG 的知识库是异构的,需要同时管理文本块、图像、表格、图表等不同类型的内容。这意味着文档解析阶段变得极其关键且复杂。

Embedding 层面

标准 RAG 使用纯文本 Embedding 模型(如 BGE、text-embedding-ada),而 MRAG 需要引入多模态 Embedding 模型 ,使不同模态的内容能被映射到同一个向量空间中,才能实现跨模态检索(例如用文字查询检索到最相关的图片)。代表性模型包括 CLIP (OpenAI)、ImageBind (Meta)、BGE-VL 等。

其核心是将不同模态对齐到同一语义空间,用对比学习(Contrastive Learning)训练,损失函数通常为:

L=−1N∑i=1Nlog⁡exp⁡(sim(q⃗i,d⃗i)/τ)∑j=1Nexp⁡(sim(q⃗i,d⃗j)/τ) \mathcal{L} = -\frac{1}{N} \sum_{i=1}^{N} \log \frac{\exp(\text{sim}(\vec{q}_i, \vec{d}i) / \tau)}{\sum{j=1}^{N} \exp(\text{sim}(\vec{q}_i, \vec{d}_j) / \tau)} L=−N1i=1∑Nlog∑j=1Nexp(sim(q i,d j)/τ)exp(sim(q i,d i)/τ)

其中 (\tau) 是温度系数,(\text{sim}) 是余弦相似度,正样本是匹配的文本-图像对。

检索层面

MRAG 面临跨模态检索挑战,即查询和文档可能不是同一模态。常见组合有文本查文本、文本查图片、图片查文本等。

生成层面

最终的生成模型必须是多模态大语言模型(MLLM),如 GPT-4o、Gemini、LLaVA、Qwen-VL 等,而不能只是纯文本 LLM,因为它需要理解图像和文本混合的上下文。


三、MRAG 的主流实现策略

目前业界有三种主要路线,各有优劣。

策略一:Caption 转文本(最简单)

将图像、图表等非文本内容,用多模态模型预先生成文字描述(Caption),然后把 Caption 当作文本存入向量库,后续走标准 RAG 流程。优点是实现简单、兼容性好;缺点是 Caption 可能丢失细节,且 OCR/图表理解质量参差不齐。

策略二:多路并行检索(最常用)

文本内容走文本 Embedding,图像内容走图像 Embedding,分别存储在不同的索引中,检索时并行查询,再用 RRF 或学习式排序模型融合两路结果,最终将文本和图像一起送给 MLLM 生成。

策略三:统一多模态 Embedding(最先进)

用 ImageBind、CLIP 等模型将所有模态映射到同一向量空间,只维护一个统一的向量数据库,查询向量也来自同一个多模态 Encoder。这是最理想的方案,但对 Embedding 模型要求极高,且中文场景下模型选择有限。


四、MRAG 特有的注意事项与难点

文档解析是最大瓶颈

这一点在 MRAG 中的重要性远超标准 RAG。从 PDF 中准确提取表格结构、识别图表类型、保留布局信息,是整个链路质量的天花板。工具层面,PyMuPDF 适合结构化 PDF,Unstructured、LlamaParse、DocLayout-YOLO 等适合复杂版面,但没有任何工具是万能的,解析质量需要专门评估。

表格处理是独立难题

表格既不是纯图像也不是自然语言,直接转文本会丢失行列关系,直接存图会浪费语义检索能力。常见方案是:将表格序列化为 Markdown 格式(保留结构),同时生成一段自然语言 Summary,两者一起存储和索引。

Chunk 策略需要重新设计

在多模态场景下,一个"Chunk"可能是文字段落、可能是一张图、可能是一段图文混排。需要在切割时保留元数据(如该图片在第几页、其上方的标题是什么),这些上下文元数据往往对检索和生成都非常重要。

评估体系更复杂

标准 RAG 可以用 RAGAS 框架做评估,但 MRAG 没有统一的评估标准。图像的检索质量难以量化,生成答案是否正确地引用了图表中的数值,目前仍需人工评估或专门构建测试集。

计算成本显著上升

多模态 Embedding 的计算量、MLLM 的推理成本都远高于纯文本方案。特别是在构建索引阶段,对大量图像做 Embedding 会带来显著的时间和算力开销,需要在工程层面做好批处理和缓存。

幻觉问题更严重

多模态模型比纯文本模型更容易产生幻觉,尤其在图表数字解读上。模型可能"看懂"了一张折线图的趋势,但错误地读取了具体数值。在金融、医疗等精度敏感场景中,必须设计额外的校验机制。


五、面试中关于 MRAG 的高频问题

Q:MRAG 和标准 RAG 在 Embedding 阶段最大的挑战是什么?

核心挑战是跨模态语义对齐。要让文本查询能检索到图像,二者的 Embedding 必须在同一个语义空间中,且距离有意义。这依赖对比学习训练,但中文场景下高质量的多模态 Embedding 模型仍然是稀缺资源,CLIP 对中文的支持也不如英文。

Q:如果图片中有文字(如截图),你会如何处理?

首先用 OCR 提取图中文字,然后结合图片本身做双路索引:OCR 文本走文本 Embedding 管道,图片本身走视觉 Embedding 管道。同时在元数据中记录两者的关联。若图片是复杂图表(如折线图),还需用多模态模型生成结构化描述(包括数值信息)而不只是泛化的 Caption。

Q:如何处理一份既有文字又有图表的 PDF 报告?

这是非常实际的工程题。标准流程是:①用专业解析器(如 LlamaParse)做版面分析,将文字块、图像、表格分离提取;②文字块按语义切割并生成文本 Embedding;③图表用 MLLM 生成详细 Caption 和结构化描述,同时保留原图;④表格序列化为 Markdown 并生成 Summary;⑤所有内容附带页码、所在章节标题等元数据;⑥混合检索时,将召回的文本块和图像一起组织成多模态 Prompt 送给 MLLM。

Q:MRAG 和 GraphRAG 有什么区别?

两者解决不同问题。MRAG 解决的是模态异构 问题,让系统能理解图文混合内容;GraphRAG 解决的是知识结构化问题,将文档中的实体关系抽取成知识图谱,从而支持多跳推理。两者可以结合,比如在多模态文档上构建知识图谱,同时保留图像内容的检索能力。

相关推荐
2501_938140072 小时前
做内容很省心,2026好用AI笔记,支持抖音小红书视频无水印保存
人工智能
sell-cloud4 小时前
Prompt Engineering要凉了?Fable 5.5能“猜“意图,但银行正在封杀AI Agent——企业AI的真正护城河是什么
人工智能·prompt
Navicat中国6 小时前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI6 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区6 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris8 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy9 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V9 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI9 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技9 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人