多模态 RAG:把 PDF 版面、表格、图片和音频一起检索与引用
多模态 RAG 处理的不仅是纯文本,还包括 PDF 里的表格/图片、扫描件、截图、音频和视频。难点在解析和表示:OCR/版面分析会丢结构,图片需要视觉 embedding,表格要保留行列语义,音频要先转写。检索时可以用文本、图像或混合向量,生成时把文本和图片一起交给多模态模型。
典型链路:文档解析(Docling/OCR)→ 结构保留 → 分块/图像抽取 → 文本 embedding + 图像 embedding → 多向量检索 → 重排 → 多模态生成与引用。它比纯文本 RAG 更贵、更复杂,只在业务确实需要图表/扫描件时使用。
# Docling:解析 PDF,保留标题、表格、图片
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("manual.pdf")
doc = result.document
markdown = doc.export_to_markdown()
# 图像 embedding(CLIP 类模型)
from sentence_transformers import SentenceTransformer
from PIL import Image
model = SentenceTransformer("clip-ViT-B-32")
text_vec = model.encode(["设备面板上的红色指示灯"])
image_vec = model.encode([Image.open("panel.png")])
# 多向量写入向量库:文本块和图片各一条记录,共享文档/页码元数据
record = {
"id": "manual-p12-img1",
"vector": image_vec[0].tolist(),
"payload": {"doc_id": "manual", "page": 12, "type": "image",
"caption": "设备面板示意图", "tenant_id": 42},
}
生成时把检索到的文本块和图片一起放入多模态模型上下文,
要求回答附带文档名、页码和图片编号,便于人工核对。
合上页面,先回答,再展开对照。
小程序版
微信扫码,随时查命令