🧠 图解记忆:多模态文档解析Pipeline;点击图片可查看原图。
💡 答案要点
核心区别:
| 维度 | 传统文本RAG | 多模态RAG |
|---|---|---|
| 索引内容 | 文本块 + 向量 | 图像块 + 文本块 + 跨模态对齐 |
| 检索方式 | 文本→向量→相似度 | 文本/图像→多模态向量→跨模态检索 |
| 生成输入 | 文本上下文 | 图像+文本统一上下文 |
| 典型场景 | 文档问答 | 图文混合知识库问答 |
多模态RAG架构:
┌──────────────────────────────────────────────────────┐
│ 多模态RAG 架构 │
├──────────────────────────────────────────────────────┤
│ 索引阶段: │
│ 文档 → PDF解析 │
│ → 文本块(直接嵌入) │
│ → 图像块(OCR+描述生成→嵌入) │
│ → 跨模态对齐(文本-图像pair) │
│ │
│ 检索阶段: │
│ 用户Query → 文本向量检索 │
│ → 可选:图像向量检索(以图搜图) │
│ → 跨模态检索(文本Query→相关图像) │
│ │
│ 生成阶段: │
│ 检索结果(文本+图像)→ 多模态LLM → 融合回答 │
└──────────────────────────────────────────────────────┘多模态文档解析Pipeline:
python
def parse_multimodal_doc(pdf_path):
doc = pymupdf.open(pdf_path)
chunks = {"text": [], "images": []}
for page in doc:
# 提取文本
text = page.get_text()
if text.strip():
chunks["text"].append({"content": text, "page": page.number})
# 提取图像
for img_index, img in enumerate(page.get_images()):
pix = fitz.Pixmap(doc, img)
img_data = pix.tobytes("png")
img_obj = Image.open(io.BytesIO(img_data))
# 用GPT-4V生成图像描述
description = gpt4v.analyze_image(img_obj, prompt=
"简要描述这张图片的核心内容,用于检索匹配。"
)
chunks["images"].append({
"image": img_data,
"description": description,
"page": page.number,
"image_index": img_index
})
return chunks面试话术:
"多模态RAG的核心是'让图像也能被检索'。我的方案是:文档解析时同时提取文本和图像,图像用GPT-4V生成描述,文本和描述分别向量存储。检索时用跨模态索引,支持'用户问文字,系统返回包含答案的图片'。"
📚 参考:CLIP(图文混合检索的多模态对齐基础)
