🔍 实战复盘 | 基于视觉模型的多模态 RAG 系统,我们踩过的坑与收获
📋 项目背景
在 KnowFlow 内部交流群的同学都知道,近期我们团队在做一款基于视觉模型的多模态 RAG 系统。经过 2 周左右密集开发,我们进行了全方位的测试,在群内公开召集难啃的文档,现在整体上对于多模态 RAG 有了更加深入的认识。
本文旨在为同行开发者和有意向的客户提供一些建议和思考,遵循客观、理性的视角,分享我们的实战经验。
🤔 什么是多模态 RAG?
传统 RAG vs 多模态 RAG
方案类型 | 处理方式 | 优势 | 劣势 |
---|---|---|---|
传统 RAG | OCR 解析 → 文本/表格/图片 → 向量存储 | 成熟稳定,成本较低 | 可能丢失布局信息 |
多模态 RAG | 文档图片 → 视觉模型向量化 → 直接检索 | 保持完整视觉信息 | 计算成本较高 |
🔄 多模态 RAG 工作流程
- 文档预处理:将文档转换为图片格式
- 向量化存储:使用 ColPali 等框架进行向量化
- 相似度检索:通过相似度得分获取高关联性图片
- 视觉理解:将图片信息输入视觉模型(如 Qwen2.5 VL)
- 结果生成:视觉模型返回最终答案
🧠 什么是 ColPali
ColPali 基于 ColBERT(Contextualized Late Interaction over BERT)方法,并结合视觉语言模型(如 PaliGemma-3B)处理文档的视觉和文本信息。
🔑 核心创新
- 多向量嵌入:通过文档图像生成 multi-vector embeddings
- 无需 OCR:直接利用文档的视觉特征进行检索
- 布局保持:无需复杂的布局分析,保持原始文档结构
通过 ColPali,我们无需传统 OCR 解析,直接对文档图片进行嵌入处理,大大节省了预处理时间。
🔧 技术实现流程
步骤 1:文档预处理
将文档按页截图处理,然后输入 ColPali 进行存储
步骤 2:多向量嵌入生成
- 图像分割:ColPali 将文档图像分割成多个图像块(patches)
- 嵌入生成:通过视觉语言模型(如 PaliGemma)处理图像块
- 向量表示:为每个图像块生成独立的嵌入向量,保留细粒度信息
步骤 3:检索匹配
- 晚交互机制:使用 ColBERT 的晚交互机制
- 相似度计算:查询嵌入与文档多个嵌入向量逐一匹配
- 得分汇总:计算查询与文档的总体相关性得分
📊 实测效果
在我们的系统实测中:
指标 | 表现 | 说明 |
---|---|---|
检索准确率 | ~90% | 大大超出预期 |
响应速度 | 接近传统 OCR | GPU 加速下表现优异 |
存储方案 | Milvus 向量数据库 | 稳定可靠 |
检索准确率达到 90%,在 GPU 加持下速度接近传统 OCR 解析耗时。
视觉模型选择
考虑到模型的扩展性,我们采用了 LiteLLM 来接入视觉模型,目前支持 Ollama 和兼容 OpenAPI 协议的在线模型,如硅基流动和 Qwen API。
在项目实测过程中,我们挑选了:
- Ollama 本地部署的 Qwen2.5 VL 32B 模型
- 在线 Qwen 2.5VL 72B API
其中硬件配置 RTX 单卡4090 48G 显存运行 Qwen2.5 VL 32B 很流畅,24G 没有实测过,预估可能会有点卡顿。
实测效果演示
在交流群内公开召集了一些文档,这些文档大多数结构比较复杂,传统的如 RAGFlow RAG 系统处理的不是特别好。
案例 1:本科在辽宁招生计划.pdf
Q: 南昌航空大学科技学院招生情况?
A: 大家可以比对下,基本上完美回答。
案例 2:公路桥梁钢结构防腐涂装技术条件.pdf
Q: 非封闭环境内涂层体系?
A: 也是完美回答。
案例 3:公路桥梁抗震设计规范JTG T 2231 01 2020_2020抗震规范.pdf
Q: 桥梁抗震措施等级
A: 此处回答中规中矩,命中了表格内的部分数据。
案例 4:公路桥梁抗震设计规范JTG T 2231 01 2020_2020抗震规范.pdf
Q: 桥梁抗震设防目标
A: 此处回答的有点不符合预期,没有正确识别到问题语义。
结论与思考
基于视觉模型的多模态 RAG 系统,针对一些复杂文档结构的样例确实展示出了他的优越性,基本无损的还原和理解文档的信息,基于视觉模型的能力后续可以在图片上进一步做增强,比如圈选和理解。
优势
- 检索准确率高:检索这块大大超出预期,基本上能快速检索出目标图像
- 结构保持完整:对于复杂文档结构能够很好地保持原有布局和格式
- 无需复杂预处理:省去了传统 OCR 的复杂解析步骤
挑战与限制
-
视觉模型瓶颈:目前该系统的瓶颈在于视觉模型,在实际测试过程中基于本地部署的 Qwen2.5 VL 32B 模型,经常会出现语义理解失败、图片理解幻觉等问题。
-
成本考量:72B 的在线模型这些问题基本上不存在了,但付出的成本可想而知,商业一定是要考虑 ROI。
-
人工干预困难:同时基于图片的 RAG 识别方案,天然决定了人工标注和干预的能力大打折扣,我们无法做到像 RAGFlow 一样人工的修正 chunk 的数据。也就是说,当然国外也有一些针对于图片的标注方案,但实施成本反而很高。
最终结论
基于上述分析,我们给出一个结论:多模态 RAG 系统的天花板很高,但付出的成本也很大,ROI 整体来看不是那么高,短期的市场内,一定取代不了以文本为主的 RAG 系统。
但随着新的多模态向量化模型以及视觉模型的不断涌现,最终会渐渐的走入 RAG 的舞台。至于是什么时候,无法预料,但最终肯定会。
KVisualRAG 未来展望
对于 KVisualRAG,我们实现了基于纯向量化的检索匹配,依照国外一些成熟的技术方案,在保证检索准确率的前提下,为用户提供了一个可以实际使用的多模态 RAG 解决方案。
虽然目前还存在一些挑战,但我们相信随着技术的不断发展,多模态 RAG 将会成为文档处理领域的重要发展方向。我们将持续关注这一领域的技术进展,并不断优化我们的解决方案。
项目已开源,欢迎大家关注和参与贡献!