04. 多模态 RAG 和纯文本 RAG 有什么区别?
多模态 RAG 与纯文本 RAG 的核心差异。
简单回答
多模态 RAG 需要检索和理解的不仅是文本,还包括图片、表格、图表等多种模态的内容。核心区别在两个层面:索引端需要对非文本内容做处理(图片描述、表格结构化、多模态 Embedding),检索端需要能跨模态匹配(用文本 query 检索到相关图片或表格)。额外的挑战是多模态内容的信息损失——非文本内容在转换过程中往往会丢失关键信息。
详细解释
和纯文本 RAG 的核心差异
纯文本 RAG 的数据流很清晰——文档是文本 → 切 Chunk 是文本 → Embedding 是文本向量 → 检索匹配是文本相似度 → 送给 LLM 的上下文是文本。整条链路的数据类型一致。
多模态 RAG 的知识库里除了文本还有图片(产品图、架构图、流程图)、表格(数据表、对比表)、图表(柱状图、折线图)、甚至视频和音频。这些非文本内容要怎么索引、怎么检索、怎么作为上下文给模型,每一步都比纯文本复杂得多。
索引端的处理
第三章ARG的第 14 题(RAG 中处理非纯文本内容)已经详细讲过了,这里做一个多模态 RAG 视角的梳理。
纯文本内容和普通 RAG 一样——切 Chunk、文本 Embedding、存入向量库。
表格内容需要先提取和结构化(转 Markdown/HTML),然后可以作为文本 Chunk 做 Embedding。如果表格中包含大量数值数据,也可以灌入结构化数据库,检索时用 Text-to-SQL 精确查询。
图片内容有几种处理方式。一是用 VLM 生成图片描述文本,对描述文本做 Embedding(图片的"文本代理")。二是用多模态 Embedding 模型(如 CLIP)直接对图片编码成向量,和文本向量存在同一个空间。三是保留原始图片,在最终生成阶段直接传给 VLM 做理解。
图表(chart)需要特殊处理。一种方式是用 chart-to-data 模型提取图表中的原始数据和趋势描述。另一种是直接把图表截图传给 VLM 理解。后者在简单图表上效果不错,但复杂图表(密集数据点、多系列叠加)上 VLM 的准确率还不够。
检索端的跨模态匹配
纯文本 RAG 的检索是文本到文本的匹配。多模态 RAG 需要跨模态检索——用文本 query 匹配到相关的图片、表格、图表。
如果非文本内容已经被转换成了文本描述(图片描述、表格 Markdown),那检索方式和纯文本 RAG 一样。但文本描述可能丢失关键信息——一张复杂的架构图用文字描述后,很多细节会丢失。
如果用了多模态 Embedding(CLIP 系列),可以直接用文本 query 的向量去匹配图片向量。但多模态 Embedding 在细粒度匹配上的精度通常不如纯文本 Embedding——比如用户问"第三季度的营收数据",多模态 Embedding 可能匹配到一张和"营收"相关但不是第三季度的图表。
实际中通常是多路检索——文本 query 同时检索文本 Chunk、图片描述、表格内容,合并结果后做 Rerank。
生成端的多模态输入
纯文本 RAG 把检索到的 Chunk 以文本形式拼进 Prompt 送给 LLM。多模态 RAG 的一个核心优势是可以把原始图片直接传给 VLM——让模型"看到"图片而不只是"读到"图片的文字描述。
比如用户问"这张架构图中有几个微服务",如果只把图片的文字描述传给模型,描述可能漏掉了某些微服务。但如果直接把架构图传给 VLM,模型可以"看到"图中所有的组件。
这要求 RAG 的生成端使用 VLM 而不是纯 LLM——增加了部署复杂度和推理成本。
评测的额外维度
多模态 RAG 的评测除了纯文本 RAG 的那些指标(Recall@K、Faithfulness 等),还需要评估跨模态检索的质量——文本 query 能不能正确匹配到相关的图片/表格,以及 VLM 对检索到的图片理解是否准确。
面试时可以这样答
多模态 RAG 在纯文本 RAG 的基础上增加了两层复杂度。索引端需要处理图片、表格、图表等非文本内容——要么转成文本描述后做文本 Embedding,要么用多模态 Embedding 直接编码。检索端需要跨模态匹配——用文本 query 找到相关的图片或表格。生成端如果要让模型直接"看"图片,就需要用 VLM 而不是纯 LLM。
核心挑战是信息损失。非文本内容转成文本描述时往往丢失关键细节,特别是复杂的架构图、密集的数据图表。多模态 Embedding 的跨模态匹配精度也不如纯文本的同模态匹配。
实际中通常是混合方案——文本内容走标准 RAG 流程,表格转 Markdown 也走文本流程,图片用 VLM 生成描述走文本检索,同时保留原图在生成阶段传给 VLM。多路检索合并后 Rerank。
常见追问
- 多模态 Embedding 和纯文本 Embedding 的检索精度差多少?
- 如果知识库中图片占比很高(比如 50%+),架构该怎么调整?
- ColPali 这类直接对文档页面截图做 Embedding 的方案你怎么看?