支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


Gemma3+Mistral-OCR+RAG:实现多模态文档问答系统

发布日期:2025-04-14 11:46:33 浏览次数: 1564 作者:PyTorch研习社
推荐语

探索如何结合前沿技术,打造高效多模态文档问答系统。

核心内容:
1. 多模态PDF文档问答系统构建过程及技术选型
2. Mistral OCR的独特优势与应用场景
3. Gemma 3训练方法及其在问答系统中的作用

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家
我在这个项目中使用 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 文件,并从有序交错的文本和图像中提取内容。

Tried Mistral OCR on (JPEG vs. PDF) – Surprising Results! : r/MistralAI

它天然支持多语言和多模态,其轻量级设计使其速度远超同类模型,单节点每分钟可处理高达 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 个组件:

1. 从更大的指令模型提取到 Gemma 3 预训练检查点。
2. 通过人类反馈的强化学习(RLHF)使模型预测与人类偏好对齐。
3. 机器反馈强化学习(RLMF)增强数学推理能力。
4. 执行反馈强化学习(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 字符串。

我使用 .replace() 找到 Markdown 中的 ![img_name](img_name) 并将其替换为 ![img_name](base64_str),确保将占位符转换为嵌入的 base64 图像。最后,我返回替换了图像的更新后的 Markdown 字符串。

接着我定义了 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 在文档智能领域的又一次飞跃。

对于开发者来说,这是一个开箱即用的强大工具;对于企业来说,它是解锁非结构化数据价值的金钥匙。对于像我们这样的普通人来说,它也是识别手稿、发票、合同照片等的有用工具。

53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询