RAG 系统进化论(七):Multimodal RAG(多模态 RAG),当知识存在于表格、图片和页面中

本文导读: 企业知识不仅存在于文字中,还可能藏在扫描件、参数表格、结构图、截图和复杂页面布局里。本文将介绍 OCR(光学字符识别)、版面解析、表格结构保留、图片描述、多模态向量、页面检索与 VLM(视觉语言模型),理解 RAG 如何检索并回答非纯文本知识。
上一篇的 GraphRAG(基于知识图谱的 RAG)让系统能够连接跨文档实体和关系。
但到目前为止,我们处理的知识仍然主要是文本。
真实企业资料中,大量信息并不适合被简单抽取成纯文本:
text
PDF(Portable Document Format,便携式文档格式)中的参数表格
产品结构图和接线图
扫描合同和历史档案
带图例的统计图表
故障截图
页面中的标题、脚注和分栏布局
假设一份产品手册中有一页:
text
左侧:AX-2048-C 接收器连接示意图
右侧:不同指示灯颜色对应的状态表
底部:红灯闪烁三次时的重置说明
用户问:
text
图中红灯闪烁三次代表什么?应该按哪个按钮重置?
如果只提取文字,系统可能得到:
text
红灯 闪烁三次 重置 长按五秒

却不知道:
- 哪个状态对应哪一行;
- "长按五秒"指向图中的哪个按钮;
- 文字属于哪张图;
- 内容来自第几页的哪个区域。
这就是 Multimodal RAG 要解决的问题:
不只检索文本,还要保留并理解表格、图片、页面布局以及不同内容之间的对应关系。
什么是"多模态"?
Modality(模态)可以理解为信息的表现形式。
在 RAG 中,常见模态包括:
text
文本:段落、标题、列表
表格:行、列、表头和单元格
图片:照片、示意图、截图
页面:版面、阅读顺序、位置关系
音频或视频:语音、画面和时间轴
这一篇主要讨论文档场景中的文本、表格、图片和页面。
Multimodal RAG 的目标不是让所有内容都变成图片,也不是只调用一次视觉模型,而是:
text
正确解析不同模态
↓
为不同模态建立可检索索引
↓
根据问题召回文本、表格或页面
↓
使用适合的模型理解证据
↓
返回带页码和区域的答案
为什么纯文本 RAG 会丢失信息?
表格被打平成字符串
原始表格:
| 指示灯 | 闪烁次数 | 状态 | 处理方式 |
|---|---|---|---|
| 红色 | 3 | 配对信息丢失 | 长按连接按钮 5 秒 |
| 黄色 | 2 | 电量不足 | 连接充电线 |
错误的文本抽取可能变成:
text
红色 3 配对信息丢失 长按连接按钮 5 秒
黄色 2 电量不足 连接充电线
数据还在,但行列关系和表头含义变弱了。
图片中的信息无法被普通文本检索看到
按钮位置、零部件形状和趋势图变化可能只存在于图片像素中。
如果没有图片描述或多模态向量,文本检索器根本不知道图片里有什么。
页面布局被破坏
双栏页面、脚注、图注和侧边栏如果按错误顺序拼接,会产生不存在的语义。
例如左栏第一段可能被错误接到右栏第二段后面。
因此,多模态 RAG 的第一步仍然不是"大模型回答",而是正确解析文档。
多模态 RAG 的完整流程

第一步:OCR 识别扫描文字
OCR 的全称是 Optical Character Recognition(光学字符识别)。
它把扫描件或图片中的文字转换成可以搜索的文本。
OCR 适合处理:
- 扫描 PDF;
- 拍照文档;
- 图片中的标签;
- 无文本层的历史档案。
但 OCR 只解决"看见文字",不自动理解:
- 文字属于哪个表格单元格;
- 标签指向图中的哪个部件;
- 页面应该按什么顺序阅读;
- 识别结果是否因为模糊而出错。
因此,OCR 结果还需要位置坐标和置信度。
ts
interface OCRBlock {
// 保存识别出的文字内容
text: string;
// 保存文字位于页面中的矩形区域
boundingBox: BoundingBox;
// 保存 OCR 对本次识别结果的置信度
confidence: number;
// 保存页码,便于后续回到原始页面
pageNumber: number;
}
第二步:Layout-aware Parsing 保留页面结构
Layout-aware Parsing(布局感知解析)识别页面中的标题、段落、图片、表格、页眉、页脚和阅读顺序。
它不会只输出一长串文字,而是输出带类型和坐标的页面元素:
text
标题:4.2 接收器故障
正文:红灯闪烁表示......
图片:接收器正面结构图
图注:图 4-3 连接按钮位置
表格:指示灯状态与处理方式
布局信息可以帮助系统:
- 把图片和对应图注放在一起;
- 保留表头与单元格关系;
- 删除重复页眉和页脚;
- 按正确顺序组织双栏页面;
- 返回具体证据区域。
ts
async function parsePage(
page: PDFPage,
) {
// 同时读取页面文本层和视觉布局,识别不同区域
const layout = await detectLayout(page);
// 对没有文本层的区域执行 OCR,并保留坐标与置信度
const ocrBlocks = await runOCRForImageRegions(
page,
layout.imageRegions,
);
// 将标题、段落、表格、图片和图注按阅读顺序组织
return assemblePageElements(layout, ocrBlocks);
}
第三步:保留表格的行列关系
Table Extraction(表格抽取)将表格解析为表头、行、列和单元格,而不是只保留视觉上的文字顺序。
可以为同一张表保存三种表示:
text
结构化数据:
适合精确读取单元格和执行计算
Markdown 表格:
适合放入大模型上下文
自然语言摘要:
适合通过语义向量检索
例如,为前面的状态表生成摘要:
text
该表描述机械键盘指示灯状态。
红灯闪烁三次表示配对信息丢失,需要长按连接按钮五秒。
黄灯闪烁两次表示电量不足,需要连接充电线。
摘要负责帮助召回,最终回答仍应回到原始表格行,避免摘要遗漏条件。
ts
async function indexTable(
table: ParsedTable,
) {
// 保存表头、行列和单元格,保留可精确查询的结构
await structuredTableStore.save(table);
// 生成用于语义检索的表格摘要,但不替代原始数据
const summary = await summarizeTable(table);
// 为摘要建立向量,并关联原表、页码和坐标
await vectorStore.add({
content: summary,
metadata: {
type: "table",
tableId: table.id,
pageNumber: table.pageNumber,
boundingBox: table.boundingBox,
},
});
}
第四步:让图片可以被检索
普通文本向量库无法直接理解图片。
常见做法有两种。
Image Captioning:先生成图片描述
Image Captioning(图片描述生成)使用视觉模型为图片生成文字说明:
text
图片描述:
AX-2048-C 无线接收器正面示意图,
连接按钮位于 USB 接口右侧,标记为 B。
然后对描述建立文本向量。
优点是可以复用现有文本检索系统;缺点是描述可能遗漏细节,也可能产生错误描述。
Multimodal Embedding:把文本和图片映射到同一空间
Multimodal Embedding(多模态向量表示)可以把文本和图片转换到可比较的向量空间。

图:文本和图片分别转换为向量后进入同一个向量空间;语义越相关,两种向量之间的距离越近。
这样,文本问题可以直接召回相关图片。
两种方法可以组合:图片描述帮助关键词和文本检索,多模态向量负责跨模态召回。
第五步:直接检索完整页面
有些信息很难被拆成独立元素:
- 图和说明文字共同表达含义;
- 多个箭头连接不同部件;
- 图例和数据点相互对应;
- 页面布局本身决定阅读方式。
这时可以使用 Page Screenshot Retrieval(页面截图检索):
text
PDF 每一页渲染为图片
↓
为页面图片生成多模态向量
↓
根据问题召回相关页面
↓
把完整页面交给视觉语言模型理解
这种方式保留的信息更完整,但页面粒度较大,也会增加视觉模型的推理成本。
因此常见组合是:
text
元素级索引:用于快速精确召回文本、表格和图片
页面级索引:用于保留复杂布局和整体语境
第六步:使用 VLM 理解最终证据
VLM 的全称是 Vision-Language Model(视觉语言模型)。
它能够同时接收文字和图片,用于:
- 读取图表趋势;
- 理解示意图中的箭头和标签;
- 对照问题定位表格行;
- 结合页面文字与图片回答。
VLM 不应该默认读取整份 PDF。
更合理的方式仍然是先检索,再把少量相关页面或区域交给它:
text
100 页产品手册
↓ 检索
第 23 页状态表 + 第 24 页结构图
↓ VLM
回答红灯状态和按钮位置
这保留了 RAG 的核心思想:
先缩小证据范围,再让模型理解证据。
第七步:返回页码和 Evidence Region
Evidence Region(证据区域)记录答案来自页面中的哪个位置。
一条多模态证据至少应该包含:
text
文档 ID
页码
内容类型
区域坐标
原始文字或图片
解析版本
更新时间
用户不仅可以看到"来源于产品手册第 23 页",还可以在页面预览中高亮对应表格行或图片区域。
这对合同、财务报告和技术手册尤其重要。
把七个步骤串成多模态索引过程
ts
async function buildMultimodalIndex(
document: PDFDocument,
) {
// 逐页渲染文档,保留页面截图作为完整视觉证据
const pages = await renderDocumentPages(document);
for (const page of pages) {
// 识别页面布局、文本、表格、图片及其坐标
const elements = await parsePage(page);
// 为文本段落建立普通文本索引和向量索引
await indexTextElements(elements.textBlocks);
// 保存表格结构,并为表格摘要建立语义索引
await Promise.all(
elements.tables.map(indexTable),
);
// 为图片生成描述和多模态向量,并关联图注
await indexImages(
elements.images,
elements.captions,
);
// 为完整页面建立多模态向量,保留复杂布局
await indexPageScreenshot(page);
}
}
完整的多模态查询过程
ts
async function answerWithMultimodalRAG(
question: string,
) {
// 判断问题更可能需要文本、表格、图片还是完整页面
const intent = await classifyModalities(question);
// 并行检索与问题有关的不同模态证据
const candidates = await retrieveByModalities(
question,
intent,
);
// 对候选结果去重和重排,只保留少量相关页面与区域
const evidence = await rerankMultimodalEvidence(
question,
candidates,
);
// 让视觉语言模型结合文字、表格和页面图片回答
const answer = await generateWithVLM(
question,
evidence,
);
// 返回答案、页码和区域坐标,支持原页面高亮
return attachEvidenceRegions(answer, evidence);
}

Multimodal RAG 引入了哪些技术和方案?
Multimodal RAG 并不是简单地把图片交给大模型。
它在传统文本 RAG 的基础上,增加了从文档解析、内容表示、跨模态检索到视觉理解的一组能力:
| 技术 | 主要作用 | 产生的内容 |
|---|---|---|
| OCR(光学字符识别) | 识别扫描件和图片中的文字 | 文字、位置坐标和识别置信度 |
| Layout-aware Parsing(布局感知解析) | 恢复标题、段落、分栏、表格和图注之间的位置关系 | 带类型和坐标的页面元素 |
| Table Extraction(表格抽取) | 保留表头、行列和单元格结构 | 结构化表格、Markdown 或 JSON |
| Image Captioning(图片描述生成) | 把图片主要内容转换成文字 | 可以参与关键词和文本向量检索的图片描述 |
| Multimodal Embedding(多模态向量) | 把文本和图片映射到同一个向量空间 | 文本向量、图片向量和跨模态相似度 |
| Page-level Indexing(页面级索引) | 把完整页面截图作为一个检索单元 | 页面图片、页面向量和页码 |
| Multimodal Reranking(多模态重排) | 同时判断问题与文本、表格、图片和页面的相关性 | 排序后的多模态证据 |
| VLM(视觉语言模型) | 结合文字和视觉内容理解最终证据 | 基于页面、表格和图片生成的答案 |
| Evidence Region(证据区域) | 记录答案来自页面的哪个位置 | 页码、区域坐标和高亮范围 |
这些技术不一定全部使用。常见落地方式可以分成三类。
方案一:文本增强型
text
OCR / 布局解析 / 表格抽取 / 图片描述
↓
统一转换为文本
↓
继续使用文本检索与文本模型
这种方案对原有 RAG 改动较小、成本较低,适合文字为主、偶尔包含表格和简单图片的文档。
它的局限是视觉信息最终仍被压缩成文字,复杂图形、空间关系和页面布局可能继续丢失。
方案二:多索引混合型
text
文本索引 + 表格索引 + 图片索引 + 页面索引
↓
并行检索与多模态重排
↓
VLM 生成答案
这种方案同时保留不同模态的独立索引。系统根据问题选择一个或多个索引,再融合检索结果。
它适合技术手册、产品资料和财务报告,是效果、成本和可控性之间较均衡的方案。
方案三:页面原生型
text
PDF 页面截图 → 页面向量检索 → VLM 直接理解完整页面
这种方案尽量保留原始页面,让模型直接看到表格、图片、图注和布局。
它适合版面关系决定含义的复杂 PDF,但页面图片占用更多存储和模型输入,检索与推理成本也更高。
实际系统经常把三种方案组合起来:
普通段落走文本检索,表格和图片建立独立索引,布局复杂的页面保留截图,最终只让 VLM 查看少量最相关证据。
Multimodal RAG 解决了什么?
1. 知识范围从文本扩展到多种模态
系统可以检索扫描件、表格、图片、图表和完整页面。
2. 减少纯文本抽取造成的信息损失
表格保留行列关系,图片保留视觉内容,页面保留布局和阅读顺序。
3. 支持跨模态问题
用户可以用文字问题查找图片,也可以让模型结合图和文字回答。
4. 引用可以精确到页面区域
答案能够回到原始页码、表格行或图片区域,而不是只提供文档名称。
应该选择哪种多模态方案?
| 文档特点 | 优先方案 |
|---|---|
| 以普通段落为主 | 文本解析与文本向量 |
| 包含大量规则表格 | 表格结构化抽取 + 表格摘要 |
| 图片内容相对简单 | 图片描述 + 文本检索 |
| 需要文本查图片 | 多模态向量 |
| 页面布局决定含义 | 页面截图检索 + VLM |
| 文档类型复杂 | 元素级索引与页面级索引组合 |
技术不是越多越好。
一份纯文本说明书没有必要让每一页都经过昂贵的视觉模型;一份复杂电路图也不能只依赖 OCR。
Multimodal RAG 还留下了什么问题?
解析和索引成本更高
同一份文档可能同时产生文本、表格、图片和页面索引,还要保存坐标与原始文件。
错误来源变多
OCR 可能识别错误,表格可能错位,图片描述可能遗漏细节,视觉模型也可能看错。
推理延迟更高
图片和完整页面占用更多输入空间,视觉模型的推理通常也比纯文本更重。
复杂任务仍需要人为规定步骤
假设用户提出:
text
分析过去六个月所有产品故障,
找出异常批次,对照结构图判断可能的零部件,
再给出调查计划。
系统需要:
- 拆解任务;
- 查询统计数据;
- 检索工单;
- 查看产品结构图;
- 根据中间结果继续调查;
- 决定什么时候结束。
固定的多模态检索流程并不足以完成这类开放式任务。
下一篇:Agentic RAG(智能体式 RAG)
下一篇进入 Agentic RAG。
系统将从:
text
用户提问 → 执行一次预设流程 → 返回答案
演进到:
text
理解目标 → 制订计划 → 选择工具
→ 多步检索 → 根据结果调整计划
→ 完成任务
Multimodal RAG 让系统能够理解更多形式的知识。
Agentic RAG 要解决的是:
面对开放式、多步骤任务,系统怎样自主决定先做什么、接下来查什么,以及何时停止?