# Doco 子项目 · P3 设计稿(三方交叉融合)

> 模块定位:《军事科技》中台终极目标。把 A 稿(脚本)、B 稿 v2(屏幕字幕)、ASR(口语实况)三方交叉融合,产出最接近播出的终版文稿。
> 前置:P1(帧筛)、P2(本地 OCR + 扒词流水线,产出 B稿_v2.txt 743 行)已完工。
> 状态:**设计冻结,待开发**。
> 设计时间:2026-06-15
> 本稿在原 `doco_project_design.md` 基础上,据 P2 成果与制片人最新决策修订。冲突处**以本稿为准**。

---

## 一、两个交付物(内容一致,形态不同)

| 交付物 | 给谁 | 形态 | 用途 |
|---|---|---|---|
| **融合 B 稿** | 爱德华(另一项目) | 逐条碎句 + **密集字幕级时间戳** `[XmYs] 文本` | 字幕/片段定位,时间精度优先 |
| **融合 A 稿** | 编导 | **公文格式 docx**,保留【导视】【主持人N】【解说N】【专家N】【隔断】分段 | 最像播出版的存档稿,方便编导复用 |

**一致性约束**:融合 A 稿**由融合 B 稿生成**(按 A 稿分段结构归拢 + 套格式),所以两者内容天然一致——是"构造出来的一致",不是事后比对硬凑。

---

## 二、流水线四阶段(注意依赖顺序:术语提取必须在 ASR 之前)

```
A稿 ──► ①术语提取·更新词典 ──► 本期热词表
                                   │
视频 ──► ②分离音频·转码WAV ──► 讯飞STT(热词+pd=mil) ──► 新ASR(带时间戳)
                                                            │
B稿v2 ⊕ 新ASR ──► ③交叉复审 ──► 融合B稿(碎句·时间戳·给爱德华) + fusion_review留痕
                                   │
融合B稿 + A稿(语义对齐分段) ──► ④LLM语义融合 ──► 融合A稿(公文docx·给编导)
```

沿用 P2 的工程纪律:**各阶段解耦、中间产物落缓存、可断点续跑、可单独重跑**。

### Stage C1 — 术语提取 + 词典更新(规则层 + 轻量 AI)
- 从 A 稿提取专有名词(武器/型号/番号/人名/机构/技术概念),并入中台**累积词典**。
- 词典字段:`term / domain / first_seen_episode / frequency`。**逐期累积,越用越准**。
- demo 词典(34 条热词)作为**基线**,本期在其上增量更新(如 F/A-18E/F 大黄蜂、歼-10、黄貂鱼无人加油机…)。
- 产出本期**热词表**(讯飞上限 200 个,每个 2–16 字,`|` 分隔)供 Stage C2 用。

### Stage C2 — 音频分离 + 讯飞 ASR(适配层)
- ffmpeg 从视频分离音频 → 转码 **16kHz / 单声道 / 16bit WAV**(讯飞硬要求,否则报误导性 `language verify fail`)。
- 调讯飞「**录音文件转写(标准版)**」(**不要大模型版**,免费包阉割 `language` 参数)。参数:`pd=mil`、`eng_smoothproc=true`、`eng_colloqproc=true`、`hotWord=<C1热词>`。
- 签名:`signa = base64(HmacSHA1(MD5(appid + ts), secretKey))`。上传 `/upload` 拿 orderId,轮询 `/getResult` 到 status=4。
- 产出新 ASR(句级,带时间戳,格式 `[XmYs] 文本`),落缓存 `asr_v2_timed.txt` + 原始 json。
- 起点代码:`xfyun_asr_standard.py`(demo 已跑通),按下方安全要求改造。

### Stage C3 — B⊕ASR 交叉复审 → 融合 B 稿(给爱德华)
- **形态:甲 — 保持 B稿v2 的碎句粒度(743 行),密集字幕级时间戳原样保留**;ASR 只做复审纠错,**不改变行结构、不并到句级**。
- 复审做三件事:① 用 ASR 比对查 B 稿有没有重复行/错漏;② 屏幕术语拼写以 B稿v2 为准(见优先级表);③ B 稿明显 OCR 错字而 ASR 对的,用 ASR 覆盖。
- **不机械逐字标记**:由 LLM 读语义判断"是否真分歧",一两个字的等价差异不算分歧。
- 产出:`融合B稿.txt`(碎句+时间戳) + `fusion_review.csv`(机器做了选择/拿不准的地方留痕)。

### Stage C4 — 语义融合 → 融合 A 稿(给编导)
- 拿融合 B 稿,**按 A 稿分段结构语义对齐**归拢成段(参照未融合的 A 稿语义,不是机械时间切分)。
- LLM 读 A 稿语义,理解后重组为"最像播出版"的段落文本,套公文格式。
- **全自动,不阻塞主流程**:拿不准的段落照常产出 + 进 `fusion_review`,不卡住出稿。
- 产出:`融合A稿.docx`(公文格式)。

---

## 三、三方权威优先级(据 P2 修订 —— B 稿地位升级)

> **关键变化**:原设计把 B 稿定为"OCR 错字多,仅作交叉验证,权威最低"。P2 后 DeepSeek-OCR 产出的 B稿v2 屏幕术语拼写又准又干净,故 B 稿**升级加权**。

| 看什么 | 信谁 | 说明 |
|---|---|---|
| **屏幕术语 / 型号 / 番号**(箭-3、萨德、见证者-136) | **B稿v2 ≈ A稿 并列权威** | B 稿是屏幕实际打出的字,常更贴近播出;A 稿是规范写法。两者一致则采用,冲突进 review |
| 口语实况 / 语序 / 语气 | **ASR** | 主持人/专家实际怎么念(含临场改词) |
| 书面结构 / 完整语义 / 分段 | **A 稿** | 编导书面版,管【…】分段与段落语义骨架 |
| 同音事实错(美以→美伊) | **A 稿 / B稿v2** 覆盖 ASR | ASR 同音误识,句子通顺但语义荒谬,靠 A/B 发现 |
| 整段是否存在 | **B稿v2 + ASR 联合**判定 | 两者都无 → A 稿该段为未播出,标记删除 |

---

## 四、融合 A 稿公文格式(Stage C4 出稿规范)

| 层级 | 字体 | 字号 / 其他 |
|---|---|---|
| 大标题 | **方正小标宋** | — |
| 一级标题 | **黑体** | — |
| 二级标题 | **仿宋,加粗** | — |
| 正文 | **仿宋** | **四号(14pt),1.25 倍行距** |

> ⚠️ 字体可用性:方正小标宋是商业字体,生成 docx 的机器若未安装,Word 会静默回退、版式垮掉(同字体类坑)。出稿前须确认制片机/编导机已装方正小标宋(公文常用,多半有);否则在脚本里配置回退字体(如标宋→宋体加粗)。用 docx skill 实现时按 GB/T 9704 党政机关公文格式参照。

---

## 五、留痕与人工策略

- **全自动产出,绝不阻塞主流程**。编导拿到的是干净成品,无需做对齐/确认工作。
- 机器做了选择或拿不准的地方(B/ASR 分歧、低把握段落改写、疑似整段删除、疑似编导笔误)**全部甩进 `fusion_review.csv` 留痕**,供编导/爱德华事后复核,不卡出稿。
- 改动类型枚举沿用原设计:`unchanged / minor_edit / term_normalize / rewrite_large / segment_delete / segment_add / editor_typo`;带 confidence,低把握的进 review 文件。

---

## 六、安全:密钥外置(开发第一件事)

- **现状问题**:`xfyun_asr_standard.py` 第 41-42 行明文硬编码了讯飞 APP_ID / SECRET_KEY,且该文件已进 project,凭证已暴露。**建议在讯飞控制台轮换该密钥**。
- **正式做法**:凭证只存制片机本地(`xfyun_credentials.json` 或环境变量,且加入 `.gitignore` 不进库),脚本运行时读取。代码与对话中**只引用变量名,绝不出现真值**。
- 三套密钥互不相通:讯飞**消费端**(听见 App)≠ 讯飞**开发端**(开放平台,本模块用)≠ Claude API。本模块用开发端 + Claude API。

---

## 七、外部依赖

- **讯飞开放平台**「录音文件转写(标准版)」—— 开发端密钥已就绪(制片机本地)。
- **Claude API**(Stage C4 语义融合)—— 建议 `claude-sonnet-4-6` 起步;单期上下文 A稿~6k + ASR~5k + B稿~5k ≈ 16k 字,窗口充裕;每期 1–3 次调用。
- **本地 DeepSeek-OCR / Ollama** —— 由 P2 提供 B 稿,本阶段不直接调。
- **ffmpeg** —— 音频分离 + 转码。

---

## 八、数据资产(中台共享,逐期累积)

1. **A 稿术语表 / 词典**(核心):讯飞热词来源 + 规则层纠错字典,双重身份;逐期累积,识别质量滚雪球上升。基线 = demo 34 热词。
2. **OCR 错字映射表**:肘→时、娈→变、夭→天… 随版本扩展(P2 已观察到 DeepSeek-OCR 错字远少于旧引擎,此表主要兜底)。
3. **编导风格档案**(远期):累积每位编导删改偏好,用于参数自适应。

---

## 九、待办与风险

- **并发版 Stage A 提速**(P2 遗留):OCR 串行 ~30 分钟/期,GPU 空转;首选并发 4–8 路(`OLLAMA_NUM_PARALLEL`),预计压到十分钟出头。P3 期间并行处理。
- **离线小机房模型搬运**(P2 遗留):拷 `.ollama/models` 文件夹。
- **方正小标宋字体可用性**:出稿前确认,见第四节。
- **讯飞单源依赖**:远期接阿里云 ASR 做备份/交叉。
- **整段删除/编导笔误判定**:高风险,全自动产出但务必进 review 留痕。

---

## 十、本期可复用资产(demo / P2 产物)

| 文件 | 用途 |
|---|---|
| `B稿_v2.txt`(743 行) | Stage C3 输入(屏幕字幕,P2 产出) |
| `A稿_..._定稿.docx`(实为 md 文本) | Stage C1 术语源 + Stage C4 分段语义参照 |
| `xfyun_asr_standard.py` | Stage C2 起点代码(须先密钥外置) |
| demo 词典(34 热词) | Stage C1 词典基线 |
| 源视频 | Stage C2 音频源 |
| `现代防空反导大对决_终版.docx` / `差异报告.docx` | 集成测试黄金对照 |

---

*P3 设计冻结。下一步:按 Stage C1→C4 拆任务给 Cline,沿用解耦+缓存+可重跑工程纪律。*
