小米开源 Xiaomi-OCR-0:0.8B 文档理解模型,附 vLLM / Ollama 自托管教程

Xiaomi-OCR-0 是小米开源的 0.8B 文档理解模型,以 Qwen3.5-0.8B-Base 为基础,使用约 1.7 亿条 OCR 相关样本训练。模型权重采用 Apache-2.0 许可证,除了识别文字,还能解析文档结构、提取指定字段,以及回答图片中的文字内容问题。

技术报告和模型权重于 2026 年 9 月 30 日发布,项目同时提供本地网页 Demo、MCP 服务和 Agent Skill。

能做什么

  • 将文档图片解析为 Markdown,公式输出为 LaTeX,表格经过后处理转换为嵌入 Markdown 的 HTML 表格。
  • 按指定字段进行关键信息抽取(KIE),输出 JSON。
  • 对文档图片进行视觉问答(VQA),例如查询票据上的金额、日期,或询问图表中的内容。
  • 在本地网页中上传 PDF,逐页解析;通过 MCP 把这些能力接入 Agent。

PDF 需要先渲染成图片,再交给模型识别。网页 Demo 中,PDF 输入用于文档解析;KIE 和 VQA 使用图片输入。

成绩怎么样

下表来自项目方公布的对比结果,三列均为相应基准的 Overall 得分,越高越好。“—”表示该表未提供成绩。

模型 参数量 OmniDocBench v1.6 Real5-OmniDocBench Wild-OmniDocBench
Xiaomi-OCR-0 0.8B 96.83 95.24 87.94
TeleOCR 1.2B 96.87 — 88.53
OvisOCR2 0.8B 96.58 92.29 87.91
PaddleOCR-VL-1.6 0.9B 96.33 93.19 87.36
MinerU2.5-Pro 1.2B 95.75 88.94 87.33
GLM-OCR 0.9B 95.22 90.32 85.08

Xiaomi-OCR-0 在这组结果中,Real5 得分最高;OmniDocBench v1.6 和 Wild 则略低于 TeleOCR。同为 0.8B 的 OvisOCR2 与它在 OmniDocBench v1.6、Wild 上的差距较小。

文档问答方面,DocVQA、InfoVQA、ChartQA、OCRBench、TextVQA 五项得分的算术平均为 83.2,高于 Qwen3.5-0.8B 的 72.9 和 Qwen3.5-2B 的 80.9,低于 Qwen3.5-4B 的 84.9。这说明 OCR 专项训练带来了收益,不代表它在通用能力上超过更大的模型。

上述三个文档解析基准使用的都是两阶段流程:先检测版面区域,再裁剪识别、恢复阅读顺序并组装结果。 单独调用模型做整页识别,不等于复现这组成绩。95.24 也不是“任意文档有 95.24% 的字符识别正确率”。

自托管前需要准备什么

项目网页与 MCP 要求 Python 3.10 或以上;推理框架还有自己的 Python、GPU 和驱动要求。下面 vLLM 路线以 Linux、Python 3.12 和兼容的 NVIDIA GPU 为例,Windows 可使用配置好 GPU 的 WSL2。vLLM 不原生支持 Windows。

0.8B 是参数规模,不是完整服务的显存占用。实际资源还包括视觉编码、图像分辨率、上下文、推理缓存和并发请求。项目安装说明没有给出统一的最低显存或吞吐保证,不能仅凭参数量判断某张显卡能否运行。

有两条部署路线:

路线 用途与区别
原始权重 + vLLM / SGLang 使用原始模型,运行时必须支持 Qwen3.5 多模态架构;本教程以 vLLM 为例
社区 BF16 包 + Ollama 安装步骤较少,包含视觉投影器,下载约 1.8 GB;目前为实验性方案

路线一:vLLM + 本地网页

1. 获取项目

git clone https://github.com/xiaomi-research/Xiaomi-OCR-0.git
cd Xiaomi-OCR-0

2. 创建独立推理环境

以下安装适用于驱动满足当前 vLLM wheel 要求的环境。CUDA、驱动或平台不匹配时,应按 vLLM 官方 GPU 安装指南选择对应构建,不要混用已有 PyTorch 环境。

python3.12 -m venv .venv-vllm
source .venv-vllm/bin/activate
python -m pip install --upgrade pip
python -m pip install vllm

当前版本需要支持 Qwen3_5ForConditionalGeneration。如果启动时报架构不支持,应核对 vLLM 的模型支持和版本,而不是改成纯文本模型加载。

3. 启动模型服务

vllm serve xiaomi-research/Xiaomi-OCR-0 \
  --host 127.0.0.1 \
  --port 8000 \
  --max-model-len 16384

首次启动会下载模型,加载完成后保留该终端。项目部分说明仍使用旧组织名 SeerRay-Lab/Xiaomi-OCR-0,Hugging Face 目前将其重定向到 xiaomi-research/Xiaomi-OCR-0;服务名称应以实际接口返回为准。

在另一个终端检查模型列表:

curl -fsS http://127.0.0.1:8000/v1/models

4. 启动网页

在另一个终端进入项目目录,为网页单独创建环境:

cd Xiaomi-OCR-0
python3.12 -m venv .venv-demo
source .venv-demo/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt

export XIAOMI_OCR_LOCAL_URL=http://127.0.0.1:8000/v1
export XIAOMI_OCR_MODEL=xiaomi-research/Xiaomi-OCR-0
python demo/server.py --port 8787

如果 /v1/models 返回的模型 ID 不同,把 XIAOMI_OCR_MODEL 改为对应 ID。环境变量要在启动网页的终端中设置。

浏览器打开 http://127.0.0.1:8787,先选一张清晰图片,用整页模式确认识别正常,再测试 PDF、字段抽取和问答。整页模式不需要 PaddleX。

服务器部署时,可以通过 SSH 隧道访问网页,不必直接开放端口:

# 在自己的电脑执行,将 user 和 server 替换为服务器信息
ssh -N -L 8787:127.0.0.1:8787 user@server

然后在自己电脑打开同一地址。推理服务保持监听 127.0.0.1,网页 Demo 也只接受回环地址作为推理后端。

路线二:Ollama + 本地网页

先安装支持 Qwen3.5 的 Ollama,并确认本地服务已运行。项目记录的测试版本为 Ollama 0.35.0。

ollama pull longwayxu/xiaomi-ocr-0:bf16

这个社区包包含语言模型和视觉投影器,约 1.8 GB。进入项目目录,在网页 Python 环境中运行:

# 首次使用时创建环境并安装依赖;已有 .venv-demo 可直接激活
python3.12 -m venv .venv-demo
source .venv-demo/bin/activate
python -m pip install -r requirements.txt

export XIAOMI_OCR_BACKEND=ollama
export XIAOMI_OCR_MODEL=longwayxu/xiaomi-ocr-0:bf16
export XIAOMI_OCR_LOCAL_URL=http://127.0.0.1:11434/v1
python demo/server.py --port 8787

打开 http://127.0.0.1:8787。以上为 Bash 命令;Windows 原生环境激活虚拟环境和设置环境变量时,需要使用对应的 PowerShell 写法。

识别入口应使用项目网页或 MCP。只执行 ollama pull,不会自动配置项目所用的图片预处理、非思考提示词和解码设置。

Ollama 路线尚未确认与原始权重精度一致。项目记录的一次 Apple Silicon 小样本对齐测试中,7 个输入的 token 数全部相同,但完整回复只有 5 个相同,公式案例存在差异。这不是准确率统计,也不能将原始权重的榜单成绩直接套到 Ollama 或其他 GGUF 转换版上。

可选:启用区域解析

对于版式规整的印刷文档,可以安装 PP-DocLayoutV3 版面检测依赖,让系统按区域裁剪、并发识别,再恢复阅读顺序。

先按 PaddlePaddle 官方安装指南,为当前操作系统、Python 和 CPU/GPU 安装适配的 PaddlePaddle,然后在运行网页的环境中执行:

python -m pip install -r requirements-paddlex.txt

# 仅让版面检测使用 CPU,不会把主 OCR 模型切换到 CPU
export XIAOMI_OCR_LAYOUT_DEVICE=cpu
python demo/server.py --port 8787

该依赖清单包含 paddlex[cv] 和 shapely,不能只安装普通 paddlex。首次使用还可能下载 PP-DocLayoutV3 权重。

切换网页到区域模式后,需要实际提交一次区域解析任务确认安装完成。网页显示模型已连接,并不代表版面检测依赖也已安装。

手写、书法、古籍、场景文字及不规则版式,项目建议优先使用整页模式,以免区域切分错误导致上下文丢失。严格复现榜单还要使用项目提供的评测配置和两阶段流程,不能只看网页模式名称。

可选:接入 MCP

模型服务可用后,在项目根目录执行。下面以 vLLM 为例:

XIAOMI_OCR_LOCAL_URL=http://127.0.0.1:8000/v1 \
XIAOMI_OCR_MODEL=xiaomi-research/Xiaomi-OCR-0 \
bash skills/xiaomi-ocr/install.sh

安装脚本会创建 MCP 的 Python 环境、安装依赖并生成 mcp-config.json。将其中的服务配置合并到所用客户端的 MCP 配置中,然后重启或重新扫描服务。

如果使用 Ollama,将 URL 改成 http://127.0.0.1:11434/v1,模型名改成 longwayxu/xiaomi-ocr-0:bf16。安装脚本需要显式传入这两个变量,不能只用 XIAOMI_OCR_BACKEND=ollama 代替。

MCP 提供 ocr_image、ocr_pdf、kie_image、vqa_image 四个工具。图片/PDF 预处理、提示词、表格转换等由工具处理;MCP 环境中的区域模式依赖需要单独安装,不能用网页环境的安装结果代替。

常见问题

  • 网页连不上模型: 先检查推理进程和 /v1/models,再核对网页终端中的 URL、模型 ID。切换推理后端后重启网页进程。
  • 整页正常、区域报错: 检查 PaddlePaddle、paddlex[cv]、shapely 和布局权重是否装在实际使用的 Python 环境里。
  • 显存不足: 降低并发、输入分辨率或上下文配置,再用自己的文档验证质量。模型参数小不代表整个推理服务只占很少显存。
  • 长文输出截断: 项目默认输出预算为 4096 tokens,16384 的上下文还需容纳图片和提示词。不能把输出预算直接设成全部上下文长度。

项目链接