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

70 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 屏蔽数据处理中的 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 专用配置:
```python
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 的接收策略。