Gemma3+Mistral-OCR+RAG:实现多模态文档问答系统
我在这个项目中使用 Gemma3 + Mistral OCR + RAG 创建了一个能够支持包含表格、发票、文本和图表的多模态 PDF 文档问答系统。等你看完这篇文章后,你会明白是什么让 Mistral OCR 和 Gemma 3 与众不同,Gemma 3 是如何训练的,以及我们如何利用 Gemma 3、Mistral-OCR 和 RAG 创建一个强大的多模态文档问答系统。首先看一下我们最终的问答
我在这个项目中使用 Gemma3 + Mistral OCR + RAG 创建了一个能够支持包含表格、发票、文本和图表的多模态 PDF 文档问答系统。
等你看完这篇文章后,你会明白是什么让 Mistral OCR 和 Gemma 3 与众不同,Gemma 3 是如何训练的,以及我们如何利用 Gemma 3、Mistral-OCR 和 RAG 创建一个强大的多模态文档问答系统。
首先看一下我们最终的问答系统演示:

我打开了 Streamlit 应用,通过侧边栏输入了 Mistral 和谷歌 API 的密钥。如果密钥有效,则初始化 Mistral 和谷歌客户端。
API 连接成功后,我会上传一个包含表格、发票、文本和图表的 PDF 文件。上传 PDF 后我会点击“处理 PDF”按钮,文件会在侧边栏显示。它会创建一个临时目录来管理文件。
如果上传过程中出错,它会捕获并抛出带有清晰消息的 ValueError 异常。如果上传的是图像,它会将图像转换为 Markdown 格式,并遍历 images_dict 中的每个键值对。在替换所有图像占位符后,它会返回嵌入 base64 图像的修改后的 Markdown 字符串。
然后,它会处理多页 OCR 提取的 Markdown 及其相关图像。它会创建一个空的 markdowns 列表来存储每页处理后的 Markdown 内容。通过 bypage.images 迭代,提取每个图像的 ID 作为键,base64 编码字符串作为值。然后将更新后的 Markdown 添加到 markdowns 列表中,并将所有处理过的 Markdown 部分合并,确保页面之间有清晰的分隔。接着,它会检查文档来源类型以确定如何处理文档。
是什么让 Mistral OCR 与众不同?
Mistral AI 发布了一款被称为“全球最佳 OCR 模型”的新产品——Mistral OCR。
Mistral OCR 不仅仅是一个 OCR 工具,与其他 OCR 模型不同,它擅长理解复杂的文档元素。Mistral OCR 能够以惊艳的准确性和认知能力理解文档中的每个元素(图片、文本、表格、公式)。
它可以输入图像和 PDF 文件,并从有序交错的文本和图像中提取内容。

它天然支持多语言和多模态,其轻量级设计使其速度远超同类模型,单节点每分钟可处理高达 2000 页文档。本地部署选项还能让敏感数据触手可及。
更重要的是,它能将读取的数据转换为 Markdown 格式。这具有革命性意义,因为 AI 模型本身就能轻松理解 Markdown 格式的数据,从而更好地理解文档数据。
因此,Mistral OCR 是与 RAG 系统结合使用的理想模型,能够处理多模态文档,如幻灯片或复杂的 PDF 文件。
是什么让 Gemma 3 与众不同?
谷歌声称 Gemma 3 是“全球最佳单加速器模型”,在单 GPU 的主机上性能超越了 Meta、DeepSeek 和 OpenAI 等竞争对手。新模型的视觉编码器得到了增强,支持高分辨率和非方形图像。
在初步评估中,它开箱即支持超过 35 种语言,并为超过 140 种语言进行了预训练。它能无缝分析图像、文本和短视频,128K token 的巨大上下文窗口让你的应用一次处理并理解大量数据。
Gemma 3 是如何训练的?
Gemma 3 使用了蒸馏技术,并在预训练和后训练阶段通过强化学习和模型融合进行优化。这种方法可以提升数学、编码和指令执行的性能。
此外,Gemma 3 使用了全新的分词器,支持超过 140 种语言,并在谷歌 TPU 上使用 JAX 框架训练。
在后训练阶段,Gemma 3 主要使用了 4 个组件:
-
从更大的指令模型提取到 Gemma 3 预训练检查点。
-
通过人类反馈的强化学习(RLHF)使模型预测与人类偏好对齐。
-
机器反馈强化学习(RLMF)增强数学推理能力。
-
执行反馈强化学习(RLEF)提升编码能力。
这些更新显著提升了模型的数学、编程和指令跟随能力,使 Gemma 3 在 LMArena 中获得 1338 分。
开始编码吧
现在让我们一步步探索如何打造一个强大的多模态文档问答应用。
我设计了 upload_pdf 函数来安全地将 PDF 上传到 Mistral 的 OCR API 并获取用于进一步处理的签名 URL。我首先检查是否提供了客户端对象;如果为 None,则抛出错误,因为该函数需要正确初始化的 Mistral API 客户端。

我创建一个临时目录,定义文件路径并写入 PDF 内容。然后以 “rb” 模式打开文件并使用客户端上传到 Mistral API,指定文件名、内容和“目的”为 “ocr”。
上传成功后,我通过客户端获取签名 URL 以访问文件。如果发生错误,我会捕获异常并抛出带有清晰消息的 ValueError。最后,如果临时文件存在,我会确保清理它。
然后我创建了 replace_images_in_markdown 函数,它接受一个 Markdown 字符串和一个将图像名称映射到 base64 编码图像的字典。我遍历字典,其中每个键代表图像占位符,每个值包含相应的 base64 字符串。

接着我定义了 get_combined_markdown 函数来处理多页 OCR 提取的 Markdown 及其图像。我创建一个空的 markdowns 列表来存储每页处理后的 Markdown。我遍历 ocr_response.pages,通过将图像 ID 映射到其 base64 编码表示来收集图像数据。
我使用 replace_images_in_markdown 替换每页 Markdown 中的图像占位符,并将修改后的内容添加到 markdowns 列表中。最后,我使用 “\n\n”.join(markdowns) 合并所有处理过的 Markdown 部分,确保页面之间有清晰的分隔。

然后,我创建了 process_ocr 函数来检查是否提供了客户端;如果没有,我会抛出错误,因为需要初始化的 Mistral 客户端。我检查 document_source 以确定是处理文档 URL 还是图像 URL。如果是 “document_url”,我调用 client.ocr.process() 并使用 DocumentURLChunk;如果是 “image_url”,我使用 ImageURLChunk。
我指定 “mistral-ocr-latest” 模型并启用 include_image_base64=True 以包含 base64 编码的图像。如果来源类型无法识别,我会抛出带有清晰错误消息的 ValueError。

我通过配置 API 密钥来初始化 Google Gemini API。我检查上下文是否为空或太短(少于 10 个字符),如果是则返回错误。我创建了一个包含文档上下文和查询的提示,以引导模型的响应。
我使用温度、top_p 和安全设置等参数配置模型。我使用 model.generate_content() 生成响应。如果发生错误,我会捕获它,打印错误详情,并返回错误消息。

然后,我们创建了 Streamlit 应用,让用户上传文档或图像进行 OCR 处理。用户可以通过侧边栏提供 Mistral 和 Google API 的密钥。如果密钥有效,则会初始化 Mistral 和 Google 客户端。用户可以通过 PDF、图像或 URL 上传文档。应用使用 OCR 处理内容,从每页提取文本并存储以供将来使用。
文档加载后,用户可以询问有关内容的问题,应用使用 Google Gemini API 生成响应。所有聊天消息都存储在会话状态中。Streamlit 还会处理错误,例如缺少 API 密钥或处理失败,并在功能不完整时提供警告。

结论
Mistral OCR 和 Gemma 3 的发布不仅是 Mistral AI 和谷歌在 OCR 及顶尖 AI 性能领域的强力举措,还显著提升了内存效率。这标志着 AI 在文档智能领域的又一次飞跃。
对于开发者来说,这是一个开箱即用的强大工具;对于企业来说,它是解锁非结构化数据价值的金钥匙。对于像我们这样的普通人来说,它也是识别手稿、发票、合同照片等的有用工具。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)