RAG多模态数据处理

3 阅读9分钟

多模态 RAG 可以理解为:

不只处理文本,还能处理 图片、PDF、表格、音频、视频 等多种数据,然后通过检索增强,让大模型基于这些资料回答问题。

传统 RAG 主要是:

文档文本 → 切分 → 向量化 → 检索 → 大模型回答

多模态 RAG 是:

文本 / 图片 / 表格 / 音频 / 视频 / PDF
        ↓
多模态解析
        ↓
文本化 + 向量化 + 结构化
        ↓
多路检索
        ↓
结果融合
        ↓
大模型生成答案

一、整体处理流程

1. 数据接入

多模态 RAG 首先要接入不同类型的数据。

常见数据包括:

类型示例
文本Word、Markdown、网页、合同、制度文档
PDF扫描 PDF、电子 PDF、论文、报告
图片截图、票据、商品图、架构图
表格Excel、CSV、数据库表
音频会议录音、客服录音
视频培训视频、监控视频、课程视频

二、多模态数据解析

不同数据不能直接丢进向量库,需要先解析。

1. 文本数据处理

文本数据最简单。

流程:

文档读取
 ↓
清洗文本
 ↓
按段落 / 标题 / token 切分
 ↓
生成 Embedding
 ↓
存入向量库

比如:

公司报销制度.docx

处理后可能变成:

{
  "content": "员工出差住宿标准为每天不超过 500 元。",
  "metadata": {
    "fileName": "公司报销制度.docx",
    "page": 3,
    "section": "出差报销"
  }
}

2. PDF 数据处理

PDF 比普通文本复杂,因为 PDF 可能包含:

  • 正文文本
  • 图片
  • 表格
  • 扫描件
  • 页眉页脚
  • 多栏排版

处理方式通常是:

PDF
 ↓
判断是电子 PDF 还是扫描 PDF
 ↓
提取文本 / OCR 识别
 ↓
识别表格 / 图片
 ↓
按页码、标题、段落切分
 ↓
生成向量
 ↓
存储

PDF 处理重点

内容处理方式
普通文字PDF Parser 提取
扫描图片OCR 识别
表格表格识别,转 Markdown / JSON
图片图片描述生成 Caption
页码存入 metadata

例如 PDF 里有一张架构图,可以先让视觉模型生成描述:

该图片展示了一个 RAG 系统架构,包括数据接入、向量化、向量库、检索器、重排序和大模型生成模块。

然后把这段描述也存入向量库。


3. 图片数据处理

图片不能直接像文本一样切分,所以一般有两种处理方式。

方式一:图片转文字

使用 OCR 或视觉模型把图片内容转成文本。

图片
 ↓
OCR / 视觉模型识别
 ↓
图片描述 Caption
 ↓
文本向量化
 ↓
存入向量库

例如发票图片:

{
  "content": "这是一张增值税发票,金额为 1280 元,购买方为某某公司。",
  "metadata": {
    "type": "image",
    "fileName": "invoice.png"
  }
}

方式二:图片直接向量化

使用多模态向量模型,例如 CLIP 类模型,把图片直接转成图片向量。

图片
 ↓
Image Embedding
 ↓
存入向量库

查询时,如果用户问:

找一下包含系统架构图的图片

系统可以通过图片向量进行相似度检索。


4. 表格数据处理

表格数据不能简单当普通文本处理,否则容易丢失结构。

例如 Excel:

日期商品销售额
2026-05-01手机30000
2026-05-02电脑50000

处理方式可以是:

方式一:转 Markdown

| 日期 | 商品 | 销售额 |
|---|---|---|
| 2026-05-01 | 手机 | 30000 |
| 2026-05-02 | 电脑 | 50000 |

方式二:转 JSON

[  {    "日期": "2026-05-01",    "商品": "手机",    "销售额": 30000  },  {    "日期": "2026-05-02",    "商品": "电脑",    "销售额": 50000  }]

方式三:入库查询

如果是业务表,比如订单、支付、退款数据,最好进入数据库或 ClickHouse。

Excel / MySQL / CSV
 ↓
结构化入库
 ↓
SQL 查询
 ↓
查询结果交给大模型总结

这种场景不一定适合完全靠向量库。


5. 音频数据处理

音频一般要先转文字。

音频文件
 ↓
ASR 语音识别
 ↓
生成文字稿
 ↓
按时间片段切分
 ↓
向量化
 ↓
存入向量库

例如客服录音:

{
  "content": "客户表示订单已经付款,但系统显示未支付。",
  "metadata": {
    "audioFile": "customer-call.mp3",
    "startTime": "00:01:25",
    "endTime": "00:01:42"
  }
}

这样用户问:

哪个客户反馈过付款后订单状态异常?

系统可以检索到对应音频片段。


6. 视频数据处理

视频最复杂,因为视频包含:

  • 画面
  • 字幕
  • 语音
  • 关键帧
  • 时间轴

处理流程通常是:

视频
 ↓
抽取音频
 ↓
ASR 语音转文字
 ↓
抽取关键帧
 ↓
图片理解 / OCR
 ↓
按时间段切分
 ↓
文本向量 + 图片向量
 ↓
存入向量库

例如培训视频:

{
  "content": "讲师正在介绍 RAG 的检索增强生成流程。",
  "metadata": {
    "videoFile": "rag-training.mp4",
    "startTime": "00:08:10",
    "endTime": "00:09:30",
    "frame": "frame_0810.jpg"
  }
}

三、多模态 RAG 的核心架构

可以理解为下面这个流程:

用户问题
  ↓
问题理解
  ↓
判断查询类型
  ↓
文本检索 / 图片检索 / 表格查询 / 音频检索 / 视频检索
  ↓
多路召回结果
  ↓
结果重排序
  ↓
上下文组装
  ↓
大模型生成答案

四、关键模块说明

1. 数据解析层

负责把各种原始文件处理成可检索的数据。

PDF Parser
OCR
ASR
Image Caption
Table Parser
Video Frame Extractor

2. 向量化层

不同模态可以使用不同 Embedding 模型。

数据类型向量化方式
文本Text Embedding
图片Image Embedding
图文Multimodal Embedding
音频转文字Text Embedding
视频字幕Text Embedding
视频关键帧Image Embedding

3. 存储层

多模态 RAG 通常不是只用一个向量库,而是组合存储。

存储类型存什么
对象存储原始 PDF、图片、音频、视频
MySQL/PostgreSQL文件元数据、任务状态、权限
向量库文本向量、图片向量
Elasticsearch关键词检索
ClickHouse大规模结构化分析
Redis缓存、任务状态、分布式锁

4. 检索层

多模态 RAG 常用 混合检索

关键词检索 BM25
+
向量检索 Embedding Search
+
结构化查询 SQL
+
图片相似度检索

例如用户问:

帮我找一下包含支付流程图的文档

系统可能同时做:

1. 文本检索:“支付流程图”
2. 图片 OCR 检索:“支付、订单、回调、退款”
3. 图片向量检索:查找类似流程图的图片
4. PDF 元数据检索:查找相关文件

5. 结果融合层

不同模态检索出来的结果需要合并。

例如:

文本段落 3 条
图片描述 2 条
表格数据 1 条
视频片段 1 条

系统需要根据相关性排序,组成最终上下文:

【文档片段】
...

【图片内容】
...

【表格数据】
...

【视频片段】
...

然后交给大模型回答。


五、一个完整示例

用户问:

这个 PDF 里 RAG 架构图表达了什么?

系统处理过程:

1. 读取 PDF
2. 提取 PDF 文本
3. 识别 PDF 中的图片
4. 对图片做 OCR
5. 对图片生成描述
6. 将文本、图片描述、页码一起存入向量库
7. 用户提问时检索相关内容
8. 找到对应页的架构图描述
9. 大模型根据检索结果总结

最终回答可能是:

这张图表达的是一个典型 RAG 流程:先进行文档加载,然后进行文本切分和向量化,接着存入向量数据库。用户提问后,系统先检索相关知识片段,再将问题和片段一起交给大模型生成答案。

六、多模态 RAG 和普通 RAG 的区别

对比项普通 RAG多模态 RAG
数据类型主要是文本文本、图片、表格、音频、视频
解析难度较低较高
检索方式文本向量检索文本检索 + 图片检索 + SQL + OCR
存储方式向量库为主向量库 + 对象存储 + 数据库
应用场景文档问答图文问答、视频问答、票据识别、会议分析
工程复杂度中等较高

七、实际落地架构建议

企业级多模态 RAG 可以这样设计:

前端上传
  ↓
文件服务
  ↓
任务队列 RabbitMQ
  ↓
多模态解析服务
  ├── 文本解析
  ├── PDF 解析
  ├── OCR 识别
  ├── 表格解析
  ├── 音频 ASR
  └── 视频抽帧
  ↓
Embedding 服务
  ↓
向量库
  ↓
检索服务
  ↓
重排序服务
  ↓
大模型问答服务

八、Java 后端落地可以这样分层

controller
 ├── FileUploadController
 ├── ChatController

service
 ├── DocumentParseService
 ├── OcrService
 ├── AsrService
 ├── EmbeddingService
 ├── VectorStoreService
 ├── RetrievalService
 ├── RerankService
 ├── RagChatService

domain
 ├── KnowledgeFile
 ├── KnowledgeChunk
 ├── VectorRecord
 ├── ParseTask

infrastructure
 ├── MySQL
 ├── Redis
 ├── RabbitMQ
 ├── MinIO
 ├── Milvus / Elasticsearch / pgvector

九、核心难点

1. 图片和表格不能粗暴转文本

图片、表格都有结构信息。
如果直接转成普通文本,容易丢失语义。

例如表格:

张三 100 李四 200

这种文本没有字段含义。

更好的方式是:

{
  "姓名": "张三",
  "金额": 100
}

2. PDF 版式容易乱

PDF 可能有多栏、页眉、页脚、图片、脚注。

所以需要:

去页眉页脚
保留标题层级
保留页码
保留表格结构
保留图片位置

3. 检索结果需要重排序

多模态数据召回后,结果可能很多,需要 rerank。

初步召回 50 条
 ↓
重排序
 ↓
保留最相关 5 条

否则上下文太多,大模型回答会混乱。


4. 权限控制很重要

企业知识库必须控制权限。

例如:

用户 A 只能查财务制度
用户 B 可以查合同和订单数据
用户 C 不能查人事薪资文件

所以每个 chunk 都应该带 metadata:

{
  "fileId": "xxx",
  "tenantId": "1001",
  "userId": "u001",
  "departmentId": "finance",
  "permission": "private"
}

检索时必须加权限过滤。


十、简单总结 🎯

多模态 RAG 的本质是:

把文本、图片、表格、音频、视频等不同类型数据,先解析成可理解、可检索、可追溯的知识片段,然后通过向量检索、关键词检索、结构化查询等方式找到相关内容,最后让大模型基于这些内容生成答案。

最核心的处理链路是:

多模态数据
 → 解析
 → 文本化 / 结构化 / 向量化
 → 存储
 → 检索
 → 重排序
 → 上下文拼接
 → 大模型回答

一句话说:

普通 RAG 主要解决“文档问答”,多模态 RAG 解决的是“所有资料都能问”。