用 DeepSeek-OCR 2 构建可追踪的文档解析管线
DeepSeek 官方仓库记录 DeepSeek-OCR 2 于 2026 年 1 月 27 日公开。它适合成为文档解析管线中的模型阶段,但不能替代来源管理、PDF 渲染、结构验证和人工复核。官方环境指向 CUDA、PyTorch、vLLM/FlashAttention 等特定组合;本机没有对应 GPU 时,不应伪装运行结果,而应先构建可用 mock 验证管线合同。
原始文件永远不可变
接收 PDF 或图片后,先计算 SHA-256、记录字节数、MIME 探测、接收时间和业务来源。原始对象写入只读存储,后续每个产物引用它的 hash。文件名和上传者声明不是可信类型;拒绝加密、过大、页数超限或解析器不支持的文件。
from dataclasses import dataclass
from hashlib import sha256
from pathlib import Path
@dataclass(frozen=True)
class SourceDocument:
path: Path
sha256: str
size: int
def register_source(path: Path) -> SourceDocument:
data = path.read_bytes()
return SourceDocument(path=path, sha256=sha256(data).hexdigest(), size=len(data))
生产实现应流式计算 hash,避免整份大文件进入内存。上传目录不能执行文件,PDF 解析放在隔离进程,并设置 CPU、内存和时间限制。
页面渲染是独立、版本化步骤
PDF 先用固定渲染器版本转成页面图像,记录页码、DPI、颜色空间、旋转和裁剪。不要让模型直接决定页面边界。渲染错误、空白页和异常尺寸需要显式状态。相同源 hash、渲染器版本和参数应得到可缓存的页面产物。
预处理如去噪、纠偏和分块会改变模型输入,必须生成自己的配置 hash。保存原页面与预处理页面的关系,人工复核才能看到模型实际读取了什么。不要为了提高一个样例效果在管线中加入未记录的手工裁剪。
锁定模型与执行环境
记录模型仓库 revision、权重 hash、代码 revision、prompt、推理参数、CUDA、驱动、PyTorch、推理运行时与 GPU 类型。trust_remote_code=True 会执行模型仓库提供的 Python,必须固定 revision、审查代码,并在隔离环境运行;不能对移动的默认分支盲目信任。
官方示例硬件和吞吐是官方环境结果,不是你的 SLA。先用少量代表性页面测 GPU 内存、单页延迟、批处理、失败率和输出长度。对 CPU 或小显卡不支持的配置明确拒绝,不能悄悄降级后让任务永久卡住。
原始 OCR 与结构化结果分层
保存模型原始文本和布局输出,再由确定性 parser 转成段落、表格、字段与 bounding box。每个字段携带页面、来源片段、解析规则版本和置信/复核状态。Schema 不允许模型任意新增业务字段。
金额、日期、身份证明和合同条款使用领域规则验证。总计与明细不一致、表格列数变化或必需字段缺失时进入人工队列。模型自报置信度不能单独决定自动通过;用标注数据校准每类字段的阈值。
建立可重放队列
每个阶段输出 pending/running/succeeded/failed/review,任务有幂等键。重试模型阶段不能重复注册源文件或覆盖已审核结果。保存错误类别与安全摘要,GPU OOM、损坏图片和 parser 错误采用不同策略。部署新模型时对固定标注集重放,产生新版本结果而非覆盖旧版本。
评测按文档类别拆分字符/词错误、字段准确率、表格结构、引用定位和拒绝率。业务更关心字段与溯源,不应只报告一个 OCR 平均分。抽样人工复核包括低置信和看似高置信页面,才能发现系统性错误。
结论
可追踪 OCR 系统的主角是数据血缘:原文件 hash、渲染参数、模型 revision、原始输出、parser 版本和人工决策。DeepSeek-OCR 2 提供新的识别组件,但生产可信度来自隔离执行、确定性结构化、字段验证与可重放版本。没有这些边界,再强的 OCR 也只会更快地产生难以审计的文本。