# DeepSeek-OCR 主链路与非交互 session 取 key 规则（2026-07-13）

## 适用场景
- 批量扫描件合同梳理
- 需要把 PDF / 图片先转成 Markdown 再审查/比对/回填汇总表
- 当前环境已把 `SILICONFLOW_API_KEY` 写在 `~/.bashrc`，但 agent 所在 session 不是交互式 shell

## 本次会话固化结论
1. **默认 OCR 主链路改为 DeepSeek-OCR**，脚本：`~/.hermes/scripts/deepseek_ocr.py`
2. **不要默认回到 marker-pdf / surya 本地链路**；本地 OCR 只作显式要求下的备选/对照，不是默认方案。
3. 批量扫描件建议流程：
   - 先批量跑 `deepseek_ocr.py` 生成 md
   - 再做 grep / 规则扫描，筛出乱码、过短、金额大小写冲突、主体名称异常、日期异常
   - 最后只对异常页做 vision 定点校对
4. `deepseek_ocr.py` 已修成：
   - 先读当前进程环境变量 `SILICONFLOW_API_KEY`
   - 若当前 session 没带 key，则回退到 `bash -ic` 从 `~/.bashrc` 读取
   - 读取成功后回填到当前进程环境
   - 两边都没有才报错：`Missing SILICONFLOW_API_KEY in environment or ~/.bashrc`

## 为什么要这样做
非交互 shell 默认不加载 `~/.bashrc`。如果只在脚本里 `os.environ.get("SILICONFLOW_API_KEY")`，则新 session/批量 terminal 调用会误报“缺 key”，但实际上 `.bashrc` 里已经有 key。

## 执行口径
- 单文件：
  ```bash
  python3 ~/.hermes/scripts/deepseek_ocr.py /path/to/file.pdf -o /path/to/file.md
  ```
- 批量：按合同目录遍历 `.pdf`，逐个输出同名 `.md`
- 批量产物出来后，优先筛这几类异常：
  - 结果过短（只剩标题/前几行）
  - 金额小写与大写不一致
  - 主体名称错字/缺字
  - 日期区间逻辑不通
  - 银行账户等长数字串

## 已验证案例
- 北翼玖玖 17 份 PDF：已全量跑完 DeepSeek-OCR 输出 md
- 发现的典型异常：
  - 某些物业合同只识别出标题，正文漏识别
  - 押金小写金额与大写金额明显冲突
  - 主体名称 OCR 错字（如“崇区川”）

## 给后续 agent 的一句话
**扫描件合同默认先跑 DeepSeek-OCR，再筛异常，再 vision 定点校对；不要一上来就切回本地 OCR。**
