# 调研:哪些能力需要外接模型服务驱动(2026-06-11)

> 问题:系统中哪些地方需要(或规划为)由 vLLM/LM Studio 这类**OpenAI 兼容模型服务**驱动?
> 结论先行:**七处**,全部走已建成的同一接入点(`docparse-vlm`,OpenAI 兼容协议);其中 2 处已实现只差真实服务验收,5 处是规划任务。确定性主流程与内嵌 ONNX(OCR/版面)**不在此列**——服务永远是可选增强,断网不破解析。

## 0. 架构前提:为什么是"服务",接入点在哪

补能力的三层手段(plan §边界,2026-06-10 定位):

| 层 | 适用 | 运行形态 |
|---|---|---|
| 确定性自研 | 格式/结构/几何可解的 | 进程内,纯 Rust |
| ONNX 内嵌(P4 模式) | 小模型(OCR det/rec、版面 YOLO) | 进程内,`tract` 纯 Rust 推理 |
| **VLM 服务外接(G8b)** | **重模型/生成式任务** | **HTTP,OpenAI 兼容(vLLM/LM Studio/云端)** |

第三层的存在理由:Qwen2.5-VL 级模型不可能也不应该内嵌(GPU/量化/批处理是服务侧的本职);`candle` 内嵌 spike 已降为远期可选(G8d 决策)。

**接入点已统一**:`docparse-vlm::VlmClient` —— `POST {url}/v1/chat/completions` + base64 PNG data-URL,一个协议通吃 vLLM、LM Studio 与 OpenAI 系云端等;CLI 面 `--vlm-url --vlm-model [--vlm-api-key]`;协议被 mock 单测锁定,服务失败一律优雅降级回确定性结果。**新增 VLM 任务 ≈ 一个 prompt 模板 + 一个结果归一函数**,不再有协议/渲染/裁剪工作。

## 1. 已实现,只差真实服务验收(按需接任意 OpenAI 兼容服务回填)

| 能力 | 旗标 | 现状 | 验收动作 |
|---|---|---|---|
| 图片描述(RAG alt-text/可检索性) | `--vlm-describe` | mock e2e 过;注入 `[figure] …` 带位置文本 | qwen2.5-vl 跑 picture_classification 等,人工抽查描述质量 |
| 表结构重抽(合并格/多级表头) | `--vlm-tables` | mock 全链路过;TSV 防劣化门+确定性保底 | 跑 2305-pg9/redp5110,对照确定性网格;**关键看真实模型的 TSV 纪律**(prompt 可能要调) |

## 2. 规划任务:设计上必须服务驱动(G8b 余项)

按对记分牌/产品的杠杆排序:

### 2a. 整页转写(G8d)——CJK 复杂版面的唯一在案解
聚合 NID 的主拖累就是这批文档:`skipped_1page` 0.231、`skipped_2pages` 0.354、`normal_4pages` 0.607(韩文信息图/设计版面)。**确定性路线已实测到顶**:G2 版面模型假设被否决(524/622 个 chunk 不落任何检出区域;分歧在区域内微观序,"区域级版面模型在原理上救不了"——devlog 原话),三个几何路由判据也全败。在案的唯一候选即**整页 VLM 转写**(它读内容而非框几何)。
- 形态:难页渲染整页 → VLM 输出结构化文本(Markdown/带序段落)→ 归一回 IR(`source: "vlm:<model>"`,低 confidence);
- 模型要求:**这是七处里最吃模型质量的**——Qwen2.5-VL 7B 起步,32B/vLLM 部署才到生产质量线;SmolDocling(256M,docling 自家)是专项备选;
- 风险:幻觉与吞行,需与确定性输出做对齐校验(类似 TSV 防劣化门的整页版)。

### 2b. 页型判官——`--layout` 自动路由的下一候选
`--layout` 在设计感版面大赢(amt +0.18)、在 clean 学术页大输(2203 −0.29),现状只能手动 opt-in。三个几何判据(行填充率/XY-cut 歧义分/左缘覆盖)实现-测量-回退全记录在案。VLM 判官是下一候选:
- 形态:整页缩略图(256px 即可)+ 分类 prompt("学术双栏/设计版面/扫描件/表单…")→ 决定该页走确定性还是 enhancer;
- 模型要求:**最轻的任务**,3–7B 视觉模型足够;每页一次小图调用,成本可控;
- 价值:把"设计版面开、学术关"从用户手动变成按页自动,G2 的遗留缺口闭合。

### 2c. 图表→表格(chart→data)
柱状/折线/饼图反抽数据表。Docling 的 hybrid 模式有此能力,我方设计已含 prompt 模板位。形态同 `--vlm-tables`(裁图区域→结构化输出→Table 元素),复用率最高,~百行。

### 2d. 公式→LaTeX
born-digital 公式是矢量,G8c 的 ONNX spike 路线卡两点:tract 算子覆盖未验 + "合成栅格喂内嵌模型"的身份约束决策未拍板。**HTTP 路线没有这两个问题**(enhancer 按需渲染已是既定边界):公式区域(版面模型可检出 formula 区)裁图 → VLM 出 LaTeX → 注入 `Formula` 语义。

### 2e. 图内嵌表 recall(TEDS 余差的主体)
2203(0.184)/2305(0.264)的剩余差距=**画在 figure 里的示例表**(矢量文本,确定性检测器因在图环境内而不触发)。`--vlm-tables` 的作用域只在"已检出的表",救不了漏检。补法:版面模型(已内嵌)检出的 table/figure 区域 → 喂 VLM 问"是否含表+TSV" → 新增 Table 元素。与 2c 共用管线。

### 2f. MCP/REST 透传(让 agent 用得上以上一切)
当前 `mcp.rs`/`server.rs` **零 VLM 参数**——服务面(本项目的核心定位是面向 agent)还接不到任何 VLM 增强。需要:MCP tool 参数/REST query 透传 `vlm_url/vlm_model/任务开关`。实现本身是确定性工作,但**运行时由服务驱动**,故列于此;无服务时这些参数自然降级。

## 3. 明确不需要服务的(划清边界)

- **扫描 OCR**:PP-OCRv4/v5 经 `tract` 进程内推理(N3/P4),数字页零模型——这是与 Docling 的差异化卖点,不要退回服务依赖;
- **版面模型**:DocLayout-YOLO 同为 tract 内嵌(G2);
- **RTL(rtl_03 0.056)**:BiDi 是确定性算法问题(G5,`unicode-bidi`),不是模型问题;
- 全部确定性管线(解释器/字体/读序/表检测/输出)及其记分牌成绩,与服务存在与否无关。

## 3.5 更新(2026-06-11):OpenOCR 0.1B 可能改写本清单

用户提议评估 [Topdu/OpenOCR](https://github.com/Topdu/OpenOCR) 的 UniRec/OpenDoc-0.1B(Apache-2.0,OmniDocBench 90.57)。**若 spike 通过,§2 中的表结构(2e 本体)、公式(2d)、整页转写(2a)三项可从"VLM 服务驱动"改划"P4 内嵌"**(进程内 tract,无服务依赖)——架构形态(宿主驱动自回归)绕开了杀死 SLANet 的 ONNX Loop;关键不确定性是 CPU 速度。详见 [openocr-0.1b-evaluation.md](openocr-0.1b-evaluation.md)。判官(2b)、图片描述(§1)不受影响,仍属 VLM 服务域。

## 4. 落地建议(供决策)

| 项 | 建议 |
|---|---|
| 服务选型 | 任意 OpenAI 兼容服务;生产/吞吐:vLLM。我方协议层不感知差异 |
| 模型配置 | 轻任务(判官/描述):3–7B;表/图表/公式:7B;整页转写:32B 级或专项小模型(SmolDocling)对比实测后定 |
| 实施次序 | ① 按需回填 §1 两项验收(零代码);② 2b 判官(最轻、闭 G2 缺口);③ 2c+2e(共用管线);④ 2f 透传;⑤ 2a 整页转写(最重,单独立项带验收门);2d 随版面 formula 区域顺带 |
| 成本边界(已定不变) | 任务级 opt-in 默认全关;按元素/按页触发;数字纯文本页零外呼;失败降级,确定性结果永远独立成立 |
