- docling 转换器通过 PdfPipelineOptions 显式设置 do_ocr=False, 混合 PDF 的图片页不再产出 OCR 文字;不提供重新开启 OCR 的参数。 - 无文本层 PDF 的错误文案改为"扫描版或图片型 PDF 不支持", 上传阶段整批拒绝,保留混合 PDF 的可处理判定。 - 新增 test_layout_converter_disables_ocr 守护开关状态, 同步设计文档与 disable-ocr 实施计划/设计说明。
3.5 KiB
3.5 KiB
屏蔽数据处理中的 OCR 能力设计
日期:2026-08-18
1. 目标
屏蔽数据处理运行时的 OCR 能力,同时保留 Docling、layout_hybrid 版面分析、文本型 PDF 解析和现有前端切分选项。版面分析继续使用 Docling 的结构识别模型,但 PDF pipeline 必须显式设置 do_ocr=False,不再从图片或扫描页面识别文字。
2. 行为边界
layout_hybrid、semantic、fixed三种切分方式保持不变。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():
- 导入
InputFormat、PdfPipelineOptions和PdfFormatOption; - 创建
PdfPipelineOptions后将do_ocr固定为False; - 只为
InputFormat.PDF注册该配置; - 保留现有
HybridChunker、版面序列化、来源页码和 bbox 映射。
4.2 扫描 PDF 错误与文档
将无文本 PDF 的错误从“需要 OCR”改为“扫描版或图片型 PDF 不支持”,避免向用户暗示系统可以提供 OCR。同步更新数据处理设计文档;不删除测试中与 DPO 字段验证无关的历史文本样例。
4.3 依赖与界面
不删除 docling、docling_core、layout_hybrid、前端版面切分选项或相关配置。仅增加 OCR 关闭回归测试,不修改切分类型、默认值和前端交互。
5. 测试设计
- 使用假的 Docling 模块测试
_document_converter()传入的 PDF pipeline options 最终为do_ocr=False,不要求测试环境安装 Docling 才能验证配置。 - 保留并运行版面投影、来源页码、短块合并和已有文本 PDF 测试,确认版面分析代码未被删除。
- 更新纯扫描 PDF 错误断言。
- 运行受影响的后端 pytest、Ruff 和前端数据处理回归;前端切分方式回归应继续要求
layout_hybrid、semantic、fixed三种配置。 - 静态检查确认没有新增 OCR 开关、OCR 调用或 OCR 引擎依赖;
do_ocr=False是唯一运行时设置。
6. 非目标
- 不移除版面结构混合切分。
- 不移除 Docling 或其版面/表格分析模型。
- 不把
layout_hybrid改为语义或固定切分。 - 不删除 PDF 支持,不改变混合 PDF 的接收策略。