---
type: design
node_id: design:m3-ocr
title: "M3 OCR 端口族设计"
date: 2026-07-21
---

# M3 OCR 端口族设计

全文见 [2026-07-21-m3-ocr-design.md](2026-07-21-m3-ocr-design.md)。

- **选定方案**: A——独立治理循环 `OcrClient`(EmbeddingClient/M2 §7 G2 同款先例),复用 QuotaGate/BreakerGate/退避公式/错误四分类/TelemetryEmitter/选源器;新增 `OcrTransport` 端口 + `transports/monkey_ocr.py` 双端点实现。
- **关键理由**: OCR 不需要 chat 循环的 429 免预算/AIMD/流式看门狗/缓存/结构化重问,强行合一才是复制;不触碰 M2.5 刚验收的 retry.py。
- **被否决备选**: B 泛化治理核心(需重构 M2.5 六机制为开关化,回归风险大收益低);C OCR 伪装 ChatRequest 走既有洋葱(类型语义崩坏,中间件空转旁路)。
- **随带销账**: G1(errors.py 字段 M1/M2 已落地,核实+文档销账)、R9(trust_env 配置面已存在,transport 尊重即可)、R10(check_health 逐源 dict[str,bool])。
- **实况取证**: /parse 的 download_url 为相对路径;`para_blocks` 统一元素列表与 `tables` bbox 一致(4 样本核实),elements 全量提取无损覆盖 CHS 首表路径。
