Skip to content

Commit f081f8a

Browse files
committed
docs(notes): v0.7.5 会话转笔记规则净化优化规划(REQ-162~176 登记+头脑风暴归档)
- 头脑风暴归档:会话31 实证 20 项优化空间五主线(转写净化/OCR净化/结构组织/时间轴融合/规则工程) - v0.7.5 版本文档:净化快赢批 12 项 + 停止残留修复 3 项排期;结构组织暂不实施(与 v0.8.0 AI 精修衔接) - 需求池登记 REQ-162~176;versions/archive README 索引同步
1 parent ea823bd commit f081f8a

5 files changed

Lines changed: 228 additions & 1 deletion

File tree

‎docs/archive/2026-08-20/README.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@
44
55
## 归档清单
66

7-
**本日归档 1 份**(设计规格实施落地,生命终态):
7+
**本日归档 2 份**(设计规格实施落地,生命终态):
88

99
| 文档 | 归档原因 |
1010
|------|---------|
1111
| `brainstorming-ocr-screen-cards.md` | v0.7.3 屏卡体系设计规格——M1-M5 全量代码建设完成(1053 单测全绿 + 前端构建通过),已落地实施;活跃区索引已标注 [ ] 已归档(v0.7.3.md / requirements-pool.md / ADR-015) |
12+
| `brainstorming-session-note-rules.md` | v0.7.5 会话转笔记规则优化设计规格——净化快赢批 12 项 + 停止残留修复 3 项已登记 REQ-162~176 并排期 v0.7.5(结构组织暂不实施,与 v0.8.0 AI 精修衔接);活跃区索引已标注 [ ] 已归档(v0.7.5.md / requirements-pool.md) |
1213

1314
**不归档(持续活跃)**:
1415

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
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 画面净化升级版依赖)

‎docs/product/requirements-pool.md‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,31 @@
214214
| REQ-160 | 消费端:SessionDetail.screens + 原料屏卡流(可展开块级明细复查)+ 笔记屏段落配图(asset:// 本地图)+ 大纲/检索按屏 | P1 | 已排期 | v0.7.3 | 配图可开关;旧数据降级(聚类屏无行合并/角色);大纲无 bbox 回退文本启发式 |
215215
| REQ-161 | 实时面板按屏显示:live:ocr 事件带 screen_id,最近画面要点按屏摘要 | P2 | 已排期 | v0.7.3 | 一行=一屏摘要(区间+标题) |
216216

217+
### v0.7.5 · 会话转笔记规则净化优化 + 停止状态残留修复(2026-08-20 头脑风暴裁决)
218+
219+
> 会话31 实证(172 段 ASR / 215 块 OCR / 笔记 215 行)暴露规则链缺口:已建净化规则未接线(verbal/symbol normalize 只服务实时路径)、视频页 UI 垃圾漏拦、单字符碎片过放、屏零跨度/重复图、无时间锚点/规则版本/回归语料;
220+
> 同日用户反馈"停止采集后会话仍长时间显示采集中"——会话31 `status=failed` + `ended_at` 有值 = 线程未走完 finish_session(audio.stop join 无超时 → 永久卡死),重启后由 mark_interrupted_sessions 兜底翻案。
221+
> 设计规格 [头脑风暴 会话转笔记规则优化([ ] 已归档)](../archive/2026-08-20/brainstorming-session-note-rules.md) · [v0.7.5 版本文档](../versions/v0.7.5.md)。
222+
> 裁决:净化快赢批 12 项 + 停止残留修复 3 项全收;**结构组织(章节/摘要/要点/术语/时间对齐内联)暂不实施**(与 v0.8.0 AI 精修 REQ-141 衔接)。
223+
224+
| ID | 需求 | 优先级 | 状态 | 目标版本 | 备注 |
225+
|----|------|--------|------|---------|------|
226+
| REQ-162 | 口语净化接入笔记管线:filter_note 段循环接 verbal_normalize(保守档)+ symbol_normalize | P1 | 已排期 | v0.7.5 | 复用已有模块(接线优先于新建);原料层不动可逆;净化后文本才做精确去重 |
227+
| REQ-163 | 口头禅短段规则级删除:≤8 字且全由口头禅词组成 → 规则层直接删(免 AI) | P1 | 已排期 | v0.7.5 | 现有 FILLER 分类只作 AI 候选;本项补规则层删除路径 |
228+
| REQ-164 | ASR 结巴/叠字折叠 + 术语替换:「甲甲甲」→「甲」、「项目班」→「项目班子」 | P2 | 已排期 | v0.7.5 | 叠词白名单(慢慢/常常)保护;glossary 复用 |
229+
| REQ-165 | 讲述内容段落时间戳锚点:[MM:SS] 前缀(段首 start_ms) | P2 | 已排期 | v0.7.5 | 笔记可回跳原视频位置;可开关 |
230+
| REQ-166 | 视频页 UI 垃圾过滤:VideoPageUi 类别(简介/评论/点赞/收藏/投币/观看数/标签/作者/推荐卡片/二维码/展开)+ 数字量词短串 + 边缘条带 bbox 黑名单 | P1 | 已排期 | v0.7.5 | 会话31 实证「清晖加油站/若凡娃娃/1.3万0/qh202522」;正文数字不误杀 |
231+
| REQ-167 | 单字符碎片块丢弃 + 低分阈值校准:MIN_BLOCK_SCORE 0.5→0.7(配回归验证) | P1 | 已排期 | v0.7.5 | 公式/表格上下文豁免(region_kind 保护) |
232+
| REQ-168 | OCR 错字纠错:glossary 复用 + 转写共现校验(画面词与讲述词互证) | P2 | 已排期 | v0.7.5 | 「項灣」→「项目」;无映射不猜(保守) |
233+
| REQ-169 | 屏零跨度修复 + 重复图去重:first=last 并入相邻屏;相同图只留首个屏引用 | P1 | 已排期 | v0.7.5 | 会话31 画面 1~5 零区间、569515.webp 三屏重复;frame_cluster 复用 |
234+
| REQ-170 | 失败/异常会话转笔记警示:status != finished → 笔记追加警示行 | P2 | 已排期 | v0.7.5 | `> ⚠️ 会话异常(status),内容可能不完整`;诚实降级 |
235+
| REQ-171 | 规则版本化元数据:notes 加 rule_version + purify_stats(JSON 净化统计) | P2 | 已排期 | v0.7.5 | ensure_column 幂等迁移;旧笔记 NULL 诚实降级 |
236+
| REQ-172 | 黄金语料回归集:会话31/29 原始素材 → 期望笔记夹具(note_filter_tests 扩展) | P1 | 已排期 | v0.7.5 | 新增规则先写失败测试再实现(TDD) |
237+
| REQ-173 | 净化阈值配置化:120字/60s/0.5/0.6 集中常量 + JSON 校准 | P2 | 已排期 | v0.7.5 | ui_junk.json 先例 |
238+
| REQ-174 | 停止链路超时保护:audio_loopback::stop() join 加 2s 超时(超时 detach 不阻塞) | P1 | 已排期 | v0.7.5 | 兑现注释"join 超时保护"承诺(原实现注释与代码不符);WASAPI 卡死时停止命令仍返回 |
239+
| REQ-175 | 前端全局采集徽标拉取兜底:App.tsx 监听 session:fusing + 停止 invoke 成功后 live_session_status 确认 | P1 | 已排期 | v0.7.5 | 徽标不再单一依赖 live:status 事件;停止后 ≤2s 清除 |
240+
| REQ-176 | DB 残留 recording 会话兜底标记:list_sessions 发现 recording 但 manager 无活动线程 → 自动标 failed | P1 | 已排期 | v0.7.5 | 复用 mark_interrupted_sessions 语义;无需重启翻案;进行中会话不误标 |
241+
217242
### V1.0 · 体验增强(远期)
218243

219244
| ID | 需求 | 优先级 | 状态 | 目标版本 | 备注 |

‎docs/versions/README.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
| v0.7.0 | [v0.7.0.md](./v0.7.0.md) — 第七阶段:信任收尾+存储使能+类型扩展(三通道模型;REQ-088/098~134,37 项) | 发版文档(开发完成 2026-08-19,M4 真机验收待执行) |
1717
| v0.7.1 | [v0.7.1.md](./v0.7.1.md) — 会话体验小版本:管理控制台+转化流水线(REQ-135~137,含 ADR-014) | 发版文档(开发完成 2026-08-19,真机验收待执行) |
1818
| v0.7.2 | [v0.7.2.md](./v0.7.2.md) — 课堂助手实时体验深化:信息面板+合集检测联动+说话人分离弱化版+断句自适应(REQ-148~154) | 发版文档(开发中 2026-08) |
19+
| v0.7.5 | [v0.7.5.md](./v0.7.5.md) — 会话转笔记规则净化优化+停止状态残留修复(REQ-162~176;结构组织暂不实施) | 发版文档(规划中 2026-08-20) |
1920
| v0.8.0 | [v0.8.0.md](./v0.8.0.md) — 第八阶段:AI 接入——会话→笔记精修+知识补充+信任基建(REQ-138~147,含余额查询) | 发版文档(规划中,M0 验收总清前置) |
2021

2122
## 沉淀规则

0 commit comments

Comments
 (0)