Files
YG_FT/docs/superpowers/specs/2026-08-18-disable-ocr-design.md
caoxiaozhu 91b4ae2287 feat(data_process): 显式关闭 docling OCR 并拒绝无文本层 PDF
- docling 转换器通过 PdfPipelineOptions 显式设置 do_ocr=False,
  混合 PDF 的图片页不再产出 OCR 文字;不提供重新开启 OCR 的参数。
- 无文本层 PDF 的错误文案改为"扫描版或图片型 PDF 不支持",
  上传阶段整批拒绝,保留混合 PDF 的可处理判定。
- 新增 test_layout_converter_disables_ocr 守护开关状态,
  同步设计文档与 disable-ocr 实施计划/设计说明。
2026-08-18 15:49:00 +08:00

3.5 KiB
Raw Blame History

屏蔽数据处理中的 OCR 能力设计

日期2026-08-18

1. 目标

屏蔽数据处理运行时的 OCR 能力,同时保留 Docling、layout_hybrid 版面分析、文本型 PDF 解析和现有前端切分选项。版面分析继续使用 Docling 的结构识别模型,但 PDF pipeline 必须显式设置 do_ocr=False,不再从图片或扫描页面识别文字。

2. 行为边界

  • layout_hybridsemanticfixed 三种切分方式保持不变。
  • layout_hybrid 继续通过 Docling 识别文本层 PDF 的版面、阅读顺序、表格和列表结构。
  • OCR 是独立阶段,只在 Docling PDF pipeline 中关闭;不删除 Docling 版面/表格分析模型。
  • 整份 PDF 没有可提取文本时继续拒绝,并提示扫描版或图片型 PDF 不支持。
  • 混合 PDF 继续接收;有文本页正常处理,无文本图片页不产生文字,也不触发 OCR。
  • TXT、Markdown、结构化文件、DOCX、XLSX、PPTX 和文本型 PDF 的其他流程不变。
  • 不新增 OCR 配置项,不提供任何重新开启 OCR 的请求参数或环境开关。

3. 数据流

上传阶段仍由 pypdf 提取 PDF 文本。整份 PDF 没有文本层时在上传阶段失败;混合 PDF 保留空文本页。

预览阶段的 layout_hybrid 仍读取原始文件并调用 DocumentConverter,但转换器使用 PDF 专用配置:

pipeline_options = PdfPipelineOptions()
pipeline_options.do_ocr = False
DocumentConverter(
    format_options={
        InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options),
    }
)

这样 Docling 仍可对已有文本层执行版面分析,图片内容不会被 OCR 成文字。semantic 继续使用 LlamaIndex/HuggingFace embedding 模型;该模型与 OCR 无关。

4. 代码改动

4.1 PDF 版面转换

修改 backend/app/modules/data_process/document_chunking.py_document_converter()

  • 导入 InputFormatPdfPipelineOptionsPdfFormatOption
  • 创建 PdfPipelineOptions 后将 do_ocr 固定为 False
  • 只为 InputFormat.PDF 注册该配置;
  • 保留现有 HybridChunker、版面序列化、来源页码和 bbox 映射。

4.2 扫描 PDF 错误与文档

将无文本 PDF 的错误从“需要 OCR”改为“扫描版或图片型 PDF 不支持”,避免向用户暗示系统可以提供 OCR。同步更新数据处理设计文档不删除测试中与 DPO 字段验证无关的历史文本样例。

4.3 依赖与界面

不删除 doclingdocling_corelayout_hybrid、前端版面切分选项或相关配置。仅增加 OCR 关闭回归测试,不修改切分类型、默认值和前端交互。

5. 测试设计

  • 使用假的 Docling 模块测试 _document_converter() 传入的 PDF pipeline options 最终为 do_ocr=False,不要求测试环境安装 Docling 才能验证配置。
  • 保留并运行版面投影、来源页码、短块合并和已有文本 PDF 测试,确认版面分析代码未被删除。
  • 更新纯扫描 PDF 错误断言。
  • 运行受影响的后端 pytest、Ruff 和前端数据处理回归;前端切分方式回归应继续要求 layout_hybridsemanticfixed 三种配置。
  • 静态检查确认没有新增 OCR 开关、OCR 调用或 OCR 引擎依赖;do_ocr=False 是唯一运行时设置。

6. 非目标

  • 不移除版面结构混合切分。
  • 不移除 Docling 或其版面/表格分析模型。
  • 不把 layout_hybrid 改为语义或固定切分。
  • 不删除 PDF 支持,不改变混合 PDF 的接收策略。