|
| 1 | +# 会话转笔记规则优化——头脑风暴与设计规格 |
| 2 | + |
| 3 | +**状态**: 已裁决(2026-08-20 用户头脑风暴:净化快赢批入 v0.7.5;**结构组织暂不实施**) |
| 4 | +**关联**: [v0.7.5 版本文档](../../versions/v0.7.5.md) · 需求池 REQ-162~173 · 会话31 实证(本机 `entropy.db`,笔记 id=3) |
| 5 | +**触发**: 会话31(B站"项目从立项到交付全流程"讲座,14.5min / 172 段 ASR / 215 块 OCR)经规则转化产出笔记,质量暴露规则链多处优化空间 |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## 一、问题实证(会话31:172 段转写 / 215 块 OCR / 笔记 215 行) |
| 10 | + |
| 11 | +| 现象 | 数据证据 | 根因 | |
| 12 | +|------|---------|------| |
| 13 | +| **口头禅/口癖未净化** | 「对不对?」整段保留(段 id=1018,3.7s 独占一段);「啊/呢/呃/就是/大家知道吗」遍布全文 | `verbal_normalize` 只在实时分析路径(analysis.rs)接线,**笔记路径(filter_note)未接入** | |
| 14 | +| **口头禅短段规则层不敢删** | 段 1018「对不对?」、段 1038「如果是。」存活 | `FILLER` 分类已实现但只作 AI 候选(REQ-085 三态判定),纯本地路径无删除能力 | |
| 15 | +| **ASR 结巴/错字无纠错** | 「甲甲甲方的项目」「可行行研究」「搭建项目班(子)」「利国利民立公司能」「项那个」 | 无叠字折叠规则;glossary 未接线笔记路径 | |
| 16 | +| **段落机械切分语义断裂** | 「如果 是。」孤段;「那么以公司的项那个项目可行性研究」段内混杂两主题 | 切段仅按 120 字/60s 双阈值(concat.rs),无语义边界 | |
| 17 | +| **讲述内容无时间锚点** | 全文无任何 [MM:SS] 引用,无法回跳原视频 | assemble_markdown 段落不带 start_ms | |
| 18 | +| **视频页 UI 垃圾漏拦** | 「简介/评论7/清晖加油站/展开/178/48/1112/45/标签/若凡娃娃/1.3万0/项目经理PMP-100分钟串讲/qh202522(二维码)/谷歌:项目管理基础/原声译站/回行走」全部进笔记画面要点 | ui_junk 黑名单只有 Watermark/PlayerUi/EditorUi/AppUi/LiveUi 五类,**缺"视频页 UI"类**(点赞/收藏/投币/观看数/标签/作者/推荐卡片/二维码);「宁漏勿误」保守原则 | |
| 19 | +| **单字符碎片块过放** | `X`(0.97)/`?`(0.5)/`o`(0.63)/`不`(0.67)/`三`(0.91) 全部 ≥0.5 通过 | MIN_BLOCK_SCORE=0.5 过低;无单字符无上下文丢弃规则 | |
| 20 | +| **OCR 错字无纠错** | 「項灣启动是艺术」「国录」「质灣交接」(目→灣) | OCR 无词汇纠错;glossary/共现校验未接线 | |
| 21 | +| **屏时间零跨度** | 画面 1~5 均为 `[00:02–00:02]` 零区间 | 旧数据(无 screen_id)聚类兜底失效或首末见相同 | |
| 22 | +| **重复图未去重** | 画面 6/7/8 全部引用同一张 `569515.webp`(09:29/09:46/10:01) | attach_images 按时间戳匹配不按图内容去重;屏聚类未吸收重复帧 | |
| 23 | +| **失败会话静默转笔记** | 会话31 `status=failed`(172 段有内容但会话标记失败),笔记照常生成无警示 | convert_to_note 不检查会话状态异常 | |
| 24 | +| **无规则版本可追溯** | 笔记无法回答"用哪版规则生成" | notes 表无规则版本/净化统计元数据 | |
| 25 | + |
| 26 | +**核心洞察**: 会话→笔记的规则链已具备"净化的骨架"(note_filter 五步链 + screens 过滤),但存在三类系统性缺口:① **已建规则未接线**(verbal/symbol normalize 只服务实时路径);② **黑名单/阈值覆盖面停在"课堂场景假设"**(视频网站页面 UI 是新污染源,会话29 直播 UI 是上一波);③ **产物层无时间锚、无元数据、无回归语料**——笔记"不可回跳、不可追溯、不可回归"。 |
| 27 | + |
| 28 | +## 二、头脑风暴全景(五条主线 20 项) |
| 29 | + |
| 30 | +### 主线 A:转写净化(讲述内容可读性) |
| 31 | + |
| 32 | +| # | 思路 | 收益 | 代价/风险 | 裁决 | |
| 33 | +|---|------|------|-----------|------| |
| 34 | +| A1 | 口语净化接线:verbal_normalize + symbol_normalize 接入 filter_note | 口癖/语气词/符号乱码本地清理,零成本 | 需防过度删改(保守强度档) | ✅ REQ-162 | |
| 35 | +| A2 | 口头禅短段规则级删除:≤8 字且全由口头禅词组成 → 规则层直接删(免 AI) | 段 1018「对不对?」类直接消失 | 误删风险低(短句+全口头禅双重条件) | ✅ REQ-163 | |
| 36 | +| A3 | ASR 结巴/叠字折叠 + 术语替换(glossary 复用):「甲甲甲」→「甲」、「项目班」→「项目班子」 | 错字率肉眼可见下降 | 叠字规则需防误伤合法叠词("慢慢/常常") | ✅ REQ-164 | |
| 37 | +| A4 | 语义切段:问句/转折词/主题词边界切段(替代纯 120 字硬切) | 「如果 是。」孤段消失 | 与"结构组织"边界模糊——**用户裁决暂不实施** | ⏸ 后续批次 | |
| 38 | +| A5 | 段落时间戳锚点:每段前缀 [MM:SS] | 笔记可回跳原视频位置 | 轻微视觉噪音(可开关) | ✅ REQ-165 | |
| 39 | + |
| 40 | +### 主线 B:OCR 画面净化(本次污染最重) |
| 41 | + |
| 42 | +| # | 思路 | 收益 | 代价/风险 | 裁决 | |
| 43 | +|---|------|------|-----------|------| |
| 44 | +| B1 | 视频页 UI 垃圾类别(VideoPageUi):简介/评论/点赞/收藏/投币/观看数/标签/作者名/推荐卡片/二维码/展开 + 数字量词模式(`1.3万`/`178`/`48`) | 根治"若凡娃娃/1.3万0/清晖加油站"类污染 | 需按平台校准;数字量词模式需防误杀正文数字 | ✅ REQ-166 | |
| 45 | +| B2 | 单字符碎片块丢弃:长度=1 且无上下文(非公式/图表内)→ 弃;MIN_BLOCK_SCORE 0.5→0.7 校准 | `X/?/o/不/三` 消失 | 阈值上调需回归验证不误杀低分真内容 | ✅ REQ-167 | |
| 46 | +| B3 | OCR 错字纠错:glossary 复用 + 转写共现校验(画面词与讲述词互证) | 「項灣」→「项目」 | 纠错映射需人工维护种子集 | ✅ REQ-168 | |
| 47 | +| B4 | bbox 边缘区域黑名单:屏幕边缘固定条带(顶栏/侧栏)不进画面要点 | 结构性根治页面框架污染 | 依赖 bbox(REQ-156 已落库,新数据可用) | 并入 B1/B2 实施 | |
| 48 | + |
| 49 | +### 主线 C:结构组织(**用户裁决:v0.7.5 暂不实施**) |
| 50 | + |
| 51 | +| # | 思路 | 收益 | 代价/风险 | 裁决 | |
| 52 | +|---|------|------|-----------|------| |
| 53 | +| C1 | 章节/TOC:幻灯片目录提取 + chapter_detect 话题检测 → 自动章节标题 | 笔记从流水账变结构化 | 与 v0.8.0 AI 精修(REQ-141 结构化层级)重叠 | ⏸ 后续(依赖 AI 或独立排期) | |
| 54 | +| C2 | 摘要/一句话结论:总结句式(所以/总之/很重要)规则提取 | 开头可扫读 | 规则提取质量有限 | ⏸ 后续 | |
| 55 | +| C3 | 要点/行动项提取:「一定要/必须/很重要」句式 → 要点列表 | 干货显性化 | 同上 | ⏸ 后续 | |
| 56 | +| C4 | 术语表入笔记:glossary 首次出现处注解释 | 新手友好 | 与 REQ-092 术语↔图关联重叠 | ⏸ 后续 | |
| 57 | + |
| 58 | +### 主线 D:时间轴融合与产物体验 |
| 59 | + |
| 60 | +| # | 思路 | 收益 | 代价/风险 | 裁决 | |
| 61 | +|---|------|------|-----------|------| |
| 62 | +| D1 | 讲述↔画面时间对齐内联:讲到"项目交接单"时画面正好是交接单模板,应内联挂图 | 多模态笔记体验 | 属"结构组织"范畴——用户裁决暂不实施 | ⏸ 后续 | |
| 63 | +| D2 | 屏零跨度修复 + 重复图去重(frame_cluster 复用) | `[00:02–00:02]`、三屏同图消失 | 图指纹聚类需校准 | ✅ REQ-169 | |
| 64 | +| D3 | 失败/异常会话转笔记警示:status=failed 时笔记标注"会话异常,内容可能不完整" | 诚实降级(信任基建) | — | ✅ REQ-170 | |
| 65 | + |
| 66 | +### 主线 E:规则工程(元层面) |
| 67 | + |
| 68 | +| # | 思路 | 收益 | 代价/风险 | 裁决 | |
| 69 | +|---|------|------|-----------|------| |
| 70 | +| E1 | 规则版本化:notes 表加 rule_version + 净化统计(过滤原因计数)落库 | 可追溯、可回归、可诊断 | schema 迁移(ensure_column 幂等先例) | ✅ REQ-171 | |
| 71 | +| E2 | 黄金语料回归集:note31/29 原始素材 → 期望笔记夹具,规则改动即回归 | 规则迭代不再"按下葫芦浮起瓢" | 需人工标注期望输出(首次成本) | ✅ REQ-172 | |
| 72 | +| E3 | 阈值配置化:120字/60s/0.5/0.6 等集中常量 + JSON 校准(ui_junk.json 先例) | 现场调参无需改码 | — | ✅ REQ-173 | |
| 73 | +| E4 | 标题优化:「(会话)」后缀 + 视频长标题 → 自动友好标题 | 列表可读 | 低价值 | ⏸ 后续 | |
| 74 | + |
| 75 | +## 三、裁决(2026-08-20) |
| 76 | + |
| 77 | +1. **范围**:净化快赢批入 v0.7.5(A1/A2/A3/A5 + B1/B2/B3/B4 + D2/D3 + E1/E2/E3 = REQ-162~173 共 12 项) |
| 78 | +2. **明确不实施**:主线 C 全部(章节/摘要/要点/术语)+ D1(时间对齐内联)——属"结构组织",用户裁决暂不实施(与 v0.8.0 AI 精修 REQ-141 的结构化层级衔接);A4 语义切段与标题优化 E4 留后续 |
| 79 | +3. **架构原则延续**:净化必须**可逆**(原料层不动,产物层过滤——REQ-081/082 单一管线双出口传统);全部纯函数可单测;口语净化用保守强度档(防过度删改) |
| 80 | +4. **接线优先于新建**:A1 复用 verbal_normalize/symbol_normalize(已有 100% 代码)、B1 扩充 ui_junk 黑名单(已有机制)、B3 复用 glossary——新代码量集中在 D2/E1/E2/E3 |
| 81 | + |
| 82 | +## 四、设计规格 |
| 83 | + |
| 84 | +### 4.1 转写净化链(filter_note 前置段,自底向上) |
| 85 | + |
| 86 | +- **原子层**(纯函数,可单测): |
| 87 | + - `fold_stutter(text)`:叠字折叠(连续 3+ 同字 → 1 个;白名单保护「慢慢/常常/好好」等合法叠词) |
| 88 | + - `is_filler_only(text)`:≤8 字且全部字符 ∈ FILLER_WORDS → true(REQ-163,替代"仅候选不删") |
| 89 | + - `anchor_paragraphs(paragraphs, segments)`:段落 → `[MM:SS] 段落`(取段首 start_ms,REQ-165) |
| 90 | +- **业务层**(note_filter.rs 改造): |
| 91 | + - filter_note 段循环内新增:口语净化(verbal_normalize 保守档 + symbol_normalize)→ 结巴折叠 → Filler-only 删除 |
| 92 | + - 净化顺序在 UI 垃圾/碎片/低置信之后、相邻重复合并之前(净化后文本才做精确去重) |
| 93 | + - 净化记录进 FilteredItem/统计(可逆可复查) |
| 94 | +- **系统层**:`convert_to_note` 在 AI 三态判定前消费净化后 kept |
| 95 | + |
| 96 | +### 4.2 OCR 净化链(screens/filter_usable_blocks 扩展) |
| 97 | + |
| 98 | +- **原子层**: |
| 99 | + - `is_video_page_junk(text)`:命中 VideoPageUi 黑名单(简介/评论/点赞/收藏/投币/观看数/标签/作者名/推荐/二维码/展开 + 数字量词正则 `^[\d.]+万?$` 短串) |
| 100 | + - `is_single_char_noise(text, has_bbox)`:单字符且非公式/表格上下文 → true |
| 101 | + - `is_edge_region(bbox, frame_size)`:屏幕边缘条带(顶 8%/底 8%/左右 4%)→ true(新数据 bbox 可用时) |
| 102 | +- **业务层**:`filter_usable_blocks` 追加上述三规则;MIN_BLOCK_SCORE 0.5→0.7(配回归验证) |
| 103 | +- **配置**:VideoPageUi 词表入 ui_junk.json 可校准(沿用内置默认 + JSON 合并机制) |
| 104 | + |
| 105 | +### 4.3 产物与元数据 |
| 106 | + |
| 107 | +- **E1**:`notes` 表加 `rule_version TEXT` + `purify_stats TEXT`(JSON:各过滤原因计数 + 净化计数);`convert_to_note` 落库时写入;旧笔记 NULL 诚实降级(先例 ADR-014 SET NULL 原则) |
| 108 | +- **D2**:屏构建后按图指纹去重(frame_cluster 复用:相同图只保留首个屏引用);零跨度屏(first=last)并入相邻屏或标注 |
| 109 | +- **D3**:convert_to_note 读 session.status != 正常完成 → 笔记追加 `> ⚠️ 会话异常(status),内容可能不完整` 警示行(可手动删除) |
| 110 | + |
| 111 | +### 4.4 黄金语料回归(E2) |
| 112 | + |
| 113 | +- `note_filter_tests.rs` 扩展:会话31 样本段(含口头禅/结巴/垃圾块)→ 期望净化输出断言;会话29 样本(直播 UI 污染)→ 期望过滤断言 |
| 114 | +- 规则变更必须全量跑回归(cargo test),新增规则先写失败测试(TDD,AGENTS.md §3.5) |
| 115 | + |
| 116 | +## 五、测试与验证 |
| 117 | + |
| 118 | +- **Rust 单测**:fold_stutter 白名单矩阵 · is_filler_only 边界 · 净化顺序回归(净化→去重)· VideoPageUi 词表命中/正文不误杀 · 单字符噪声/数字量词 · 边缘条带 bbox · 屏图去重 · 零跨度处理 · 警示行生成 · notes 迁移加列旧库兼容 · 黄金语料回归 |
| 119 | +- **真机验证**:会话31 重跑 → 口头禅消失、视频页垃圾不出现、`[MM:SS]` 锚点可点、无零跨度/重复图、笔记元数据带 rule_version;失败会话生成笔记带警示 |
| 120 | +- **回归底线**:现有 1053+ 单测全绿;clippy 新代码零警告;前端构建通过 |
| 121 | + |
| 122 | +## 六、后续批次(v0.7.5 不做) |
| 123 | + |
| 124 | +- **结构组织**(主线 C + D1,用户裁决暂不实施):章节/TOC、摘要、要点/行动项、术语表入笔记、讲述↔画面时间对齐内联——与 v0.8.0 AI 精修(REQ-141)衔接排期 |
| 125 | +- A4 语义切段(与结构组织边界模糊,随上述批次) |
| 126 | +- E4 标题优化(低价值) |
| 127 | +- 持久元素自学习(v0.7.3 已列为第二波,OCR 画面净化升级版依赖) |
0 commit comments