【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.0]k_1 \in [1.2, 2.0]k1∈[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 解决的是知识结构化问题,将文档中的实体关系抽取成知识图谱,从而支持多跳推理。两者可以结合,比如在多模态文档上构建知识图谱,同时保留图像内容的检索能力。

相关推荐
eastyuxiao1 小时前
数字孪生教程(软件篇)官方学习路径
大数据·人工智能·学习·数字孪生
茉莉玫瑰花茶1 小时前
LangGraph 入门教程:构建 AI 工作流 [ 案例三 ]
前端·人工智能·python
我有医保我先冲1 小时前
【无标题】
java·大数据·人工智能
染指11101 小时前
2.AI大模型-链式思考TOC让AI实现思考-优秀提示词设计技巧
大数据·数据库·人工智能
Daydream.V1 小时前
从零搭建 AI Agent:LLM Agent+Function Calling+Dify 本地部署 + Coze 实战全攻略
人工智能·langchain·ollama·functioncalling·大模型部署
数据智研1 小时前
【数据分享】中国第三产业统计年鉴(1991-2025)(1993-1994、2001-2005末出版)
大数据·人工智能·信息可视化·数据分析
HyperAI超神经1 小时前
在线教程丨单卡即可爆改,面壁智能等开源MiniCPM-V-4.6,1.3B端侧模型支持图像理解/视频理解/OCR/多轮多模态对话
人工智能·ai·ocr
科技测评-阿博2 小时前
律师案源开发指南:精准获客方法,附实操模板
大数据·人工智能
Wanderer X2 小时前
【入门】搜索
人工智能