多模态
纯文本 RAG 已经很成熟,但真实文档从不配合:产品手册一半篇幅是截图,财务报告里关键数据全在图表里,PPT 的信息主要靠排版。多模态 RAG 要解决的就是:这些非文本信息怎么检索、怎么用。本文对比我们实践过的三条技术路线。
路线一:图转文(最简单,先跑通)
原理:用多模态大模型给每张图生成详细描述,把描述文本入库,走纯文本检索。
defindex_document(pdf):forpageinpdf.pages:texts=extract_text(page)forimginextract_images(page):caption=vlm.generate(image=img,prompt="详细描述这张图的内容、数据和专业含义,""包括图中文字、坐标轴、关键数值")index.add(text=caption,meta={"source_img":img})``` 优点是链路简单、复用全部文本 RAG 设施。缺点也明显:描述有损,复杂图表的数字关系(趋势、对比)经常丢;且每张图一次 VLM 调用,入库成本高。**适用**:图片是"插图"性质的文档,追求快速上线。## 路线二:CLIP 式统一向量空间(检索快,粒度粗)原理:图文编码到同一向量空间(CLIP、SigLIP、Chinese-CLIP),图片本身作为检索单元。 ```pythonfromcn_clipimportload_model,image_transforms model,preprocess=load_model("ViT-B/16")img_vec=model.encode_image(preprocess(img))# 图片直接向量化txt_vec=model.encode_text(tokenize("红色曲线代表什么"))# 文本向量化# 同一空间内算相似度即可跨模态检索优点:入库便宜(一次前向)、检索毫秒级、支持"以文搜图、以图搜图"。缺点:CLIP 类模型对文字密集型图表(表格截图、代码截图)效果差——它的训练数据是自然图片,不是财报。
适用:自然图片为主的语料(电商、设计素材库),不适合文档型图表。
路线三:ColBERT 式多向量 + 版面理解(效果上限最高)
原理:用版面分析模型(如 LayoutLMv3、DocOwl)先做文档结构解析,图片中的表格用表格识别模型转成结构化文本(HTML/Markdown),再与文本一起做细粒度索引。
PDF → 版面分析 → 文本块/表格/图片分流 ├─ 表格 → 表格识别 → Markdown 入库(保留行列关系) ├─ 图片 → 路线一生成描述 + 原图存档 └─ 文本 → 常规分块 检索命中 → 携带原图/原表 → 多模态大模型联合推理 ``` 这是当前文档问答效果最好的架构。关键在最后一步:**检索命中图片时,把原图直接塞给多模态大模型**,而不是只给它文字描述——数字关系、曲线趋势由 VLM 现场读图,绕开了描述有损的问题。 ## 实测对比(200 页含图表的产品手册,80 条标注问题) ```text 路线 端到端准确率 入库成本 检索延迟 纯文本(OCR) 54% 低 快 路线一:图转文 71% 高 快 路线二:CLIP 63% 低 快 路线三:版面+VLM 86% 中 中落地建议
别一步到位上路线三。我们的路径是:先用路线一一周内跑通基线,收集 bad case;表格类问题多就补表格识别(路线三的局部);自然图片多再上 CLIP 做联合召回。多模态 RAG 的答案往往不是单一路线,而是按内容类型路由的混合架构。
记住核心原则:文字描述会丢失信息,能带原图/原表到推理环节的,就别只带描述。