状态: 开发完成待真机验收(2026-08-19:M1–M6 全部实施——REQ-059~085 落地,646 单测全绿 + clippy 干净 + 前端构建通过;同日追加用户反馈修复 ADR-011(REQ-086/087:网格差异 OCR 触发重做 + UI 面板抑制,659 单测全绿,设计规格 [ ] 已归档 ocr-trigger-redesign);M7 端到端真机验收待用户执行;依据 课堂助手缺口评估 §9 用户裁决 22 项) 目标: 在 v0.5.0 提取能力之上做"质量与信任"补强:提取纯度(水印/规范化/术语)、融合与时间戳(概率加权/DTW 对齐/章节平滑)、画面提取(加权投票/新颖度采样/指纹混合)、音频与信号(落盘/VAD 自适应/练习点)、性能资源(低分配/内存有界/空闲降频/批处理/编码线程)、会话体验(质量报告/大纲/课程分组/搜索/降级分级)。 关联: 课堂助手缺口评估(Q1/P3/V3/AL1/AL4/F3/F2/AL8/AL11/PF2/PF6/UX9/S4/PF8/AL3/AL6/PF1/PF5/AL2/AL7/UX6/UX4 采纳)· 需求池 v0.6.0 · 课堂助手机制清单
- 提取纯度(REQ-059/060/061/082/083/084/085):水印台标角标不进产物与术语统计;口语数字/符号规范化;术语候选精化(TF-IDF+缩略词);笔记废话出口过滤(UI 垃圾/重复/碎片)+ 字幕 UI 垃圾源头过滤(黑名单)+ 字幕 ROI 窗口切换检测 + AI 复核(边界段三态判定,SiliconFlow 付费默认档)
- 融合与时间戳(REQ-062/063/064):融合从硬规则升级概率加权;字幕 OCR 流与 ASR 流 DTW 对齐回校时间戳;章节边界时序平滑
- 画面提取(REQ-065/066/067):OCR 多帧加权投票;帧新颖度采样(预算花在新内容上);aHash+dHash 双指纹去重
- 音频与信号(REQ-068/069/070):实时链路音频落盘(策略先行);VAD 阈值自适应;练习段识别
- 性能资源(REQ-071~075):采集链路低分配;长会话内存有界;空闲降频;OCR 区域批处理;图片编码线程核查
- 会话体验(REQ-076~081):会话级质量报告;纯规则大纲视图;课程级分组;搜索增强;降级分级可见化;笔记预览视图(过滤后只读预览 + 统计 + 被过滤对照 + 一键落库)
本阶段不做:S1 课件直读、V4 课后全量两遍解码、P2 指代消解、Q3 校对反哺、P5 代码块结构化、F4 跨会话去重、S3 多窗口、S5 麦克风、UX7 Onboarding、UX10 无障碍、PF3 模型档位(gaps doc §9 第三批,V1.0/v0.7.0 再议);P1 动画渐进合并、UX1 透明置顶迷你条(gaps doc §9 未选,待议);C7 导出体系、X1–X10 会话域候选(gaps doc §10,待议);闪卡(REQ-019/020 继续顺延,用户决策)。
| REQ | 内容 | 验收要点 | 规划状态 |
|---|---|---|---|
| REQ-059 | 水印/台标/角标过滤(P3):区域稳定性+文本不变性识别 → 排除出 OCR 产物与术语统计 | 合成帧台标/角标/水印不进产物;误杀正常内容阈值校准;过滤可逆(原料层不动) | 已排期 |
| REQ-060 | 数字/单位/符号规范化(V3):口语发音→书面符号映射表 | "三点一四"→3.14、"派"→π、"大于等于"→≥ 生效;产物层加工可逆 | 已排期 |
| REQ-061 | 术语发现精化(AL8):TF-IDF 文档权重 + 缩略词模式 | 角标水印词不再进候选(与 REQ-059 联动);"SGD/CNN" 等缩略词召回;候选质量 golden | 已排期 |
| REQ-062 | 融合置信度加权(AL4):编辑距离硬规则 → 字幕投票置信度 × ASR 置信度概率加权 | 双源低置信 → 低置信标记;单源高置信 → 正常融合;合成双源样本矩阵单测 | 已排期 |
| REQ-063 | DTW 时序对齐(AL3):字幕 OCR 流 × ASR 流文本序列对齐 → 回校时间戳漂移 | spike 实测漂移量(无收益则裁剪);合成漂移样本对齐正确率;修正字幕 end_ms 滞后 | 已排期(spike 前置) |
| REQ-064 | 章节边界平滑(AL7):三信号投票硬决策 → 时序状态机 + 最短章节时长先验 | 误切/抖动下降;合成会话样本状态序列单测;v0.5.0 章节检测不回归 | 已排期 |
| REQ-065 | OCR 加权投票升级(AL2):字符平权 → 清晰度×score 加权 + 字幕行帧间 tracking | score 暴露面核查(无则启发式降级);模糊/翻页帧投票对比优于平权 | 已排期(spike 前置) |
| REQ-066 | 帧新颖度采样(AL6):预算内按信息量排序(与缓存/上帧 OCR 文本重叠率低优先) | 与变化检测关系梳理(过滤 vs 排序);预算分配单测;采样预算×质量双赢 | 已排期 |
| REQ-067 | 去重指纹混合(AL11):aHash+dHash 双指纹 | 旋转/缩放样本去重 golden;帧聚类与图片去重共用 | 已排期 |
| REQ-068 | 音频落盘策略(S4):实时链路音频落盘(编码档位/保留期/磁盘预算/清理 UI) | 实时链路当前不落盘(已核查)→ 落盘生效;磁盘预算上限触发清理;为 AL3 校准/V4 两遍解码/X1 回听铺路 | 已排期(早期排) |
| REQ-069 | VAD 阈值自适应(AL1):会话内能量统计 → 静音门控阈值自适应 | 与 AGC(REQ-041)联动;合成音量变化样本切段质量;切段不劣化 | 已排期 |
| REQ-070 | 练习段识别(F3):长静音+画面静止 → 练习点标记 | 复用 VAD/变化检测信号;实操档案产物可消费;误判(视频卡顿)阈值校准 | 已排期 |
| REQ-071 | 采集链路低分配(PF1):staging 纹理复用 + BGRA→RGB 内联 + DXGI AccumulatedFrames 跳过 | 诊断面板实测采集 CPU 先行(先测后优);跳过判断不误伤变化帧 | 已排期 |
| REQ-072 | 内存有界(PF2):会话窗口滑出即弃 + SenseVoice 重打分空闲卸载 | 长会话内存曲线平稳(诊断面板实测);卸载策略不影响修正延迟 | 已排期 |
| REQ-073 | 空闲降频(PF6):视频暂停/长无信号 → 引擎休眠,恢复即唤醒 | 状态机单测;唤醒时序无竞态;不丢音频块 | 已排期 |
| REQ-074 | OCR 区域批处理(PF5):同帧多区合并 ORT batch 推理 | 基准验证(延迟 vs 显存);失败回退逐区串行 | 已排期(基准前置) |
| REQ-075 | 图片编码线程核查(PF8):WebP 编码挪专用线程+队列 | 核查现状:已不阻塞则关闭并记录;阻塞则迁移生效 | 已排期 |
| REQ-076 | 会话级质量报告(Q1):聚合置信度/OCR 失败计数/unknown 占比/AI 候选数 → 会话摘要 | 会话详情可见"可信度总览+低置信列表";数据来自已有落库字段 | 已排期 |
| REQ-077 | 大纲视图(F2/C4):OCR 大字块/固定位置标题 → 课程大纲 | 网课档案产物侧边大纲导航;REQ-026 本地前置;误判阈值校准 | 已排期 |
| REQ-078 | 课程级分组(UX9):会话列表按课程分组折叠 | 标题前缀/档案/用户标记分组;长列表会话可折叠 | 已排期 |
| REQ-079 | 搜索增强(UX4):FTS5 结果片段上下文 + 关键词高亮 + 一键跳详情 | 搜索结果可定位到原料/产物;高亮正确 | 已排期 |
| REQ-080 | 降级分级可见化(UX6):徽标=安静 / 关键降级=一次性横幅 / 失败=详情面板 | 分级生效;不打扰常态;详情面板可查 | 已排期 |
| REQ-081 | 笔记预览视图(2026-08-19 用户需求):会话详情"产物视图"旁第三视图 | 预览=过滤后笔记(标题+讲述内容+画面要点);显示过滤统计(UI 垃圾 x/重复 y/碎片 z);可展开被过滤内容对照(可复查误杀);一键落库复用 session_to_note 管线;只读不动库 | 已排期 |
| REQ-082 | 废话出口过滤管线(2026-08-19 用户需求):note_filter 纯规则 | 相邻重复段合并去重;碎片段(≤2 字/<500ms/纯符号数字)丢弃;低置信(<0.6)丢弃;UI 垃圾特征兜底(与 REQ-083 同表);预览与转笔记单一管线(session_to_note 复用);过滤可逆(原料层不动) | 已排期(前置:融合重复 bug 修复——fusion.rs 窗口配额,2026-08-19 已修) |
| REQ-083 | 字幕 UI 垃圾源头过滤(2026-08-19 用户需求):is_ui_junk 黑名单 | 水印("学习资料"等)/播放器 UI("选集/弹幕/倍速/1080P")/编辑器 UI("UTF-8/Ln/Col/已选择")/应用 UI("回到主界面")特征命中不入字幕投票器;与 REQ-059 区域稳定性过滤互补;黑名单 JSON 可校准 | 已排期 |
| REQ-084 | 字幕 ROI 窗口切换检测(2026-08-19 用户需求) | 前台窗口切换(与录制目标窗口不一致)→ 强制重扫 ROI;防其他窗口底部内容被当字幕(实测会话 11 抓入 VSCode 状态栏/网页);误触发阈值校准 | 已排期 |
| REQ-085 | AI 复核过滤(2026-08-19 头脑风暴):规则判不了的边界段 → 云端付费模型三态判定 | 边界段(口头禅/寒暄离题/ASR 破碎句/截断半句/语义重复/过渡句)批量送审;三态 keep/delete/merge(截断句先判上下文衔接,能接则 merge 保留);SiliconFlow 默认档(密钥环境变量,适配器可切换);授权默认关 + 上传确认 + 同文本 hash 缓存 + 每日配额 + 审计;AI 不可用/超配额 → 纯规则结果原样输出 | 已排期 |
- v0.5.0 M9 真机验收执行(用户执行):REQ-033 持续运行 + 实时全链路(档案检测→版面→区域 OCR→图片→产物)+ 文件导入路径 + G3 合成帧基准
- 在途未提交代码收尾:structure_tier 等(用户工作区)提交后进入干净基线
- v0.5.0 发布:CHANGELOG + 版本文档沉淀
- v0.6.0 范围冻结:22 项(用户裁决,gaps doc §9 裁决记录);spike 项结论可裁剪
实施状态(2026-08-19):✅ 已实施——
ui_junk.rs(REQ-083 四类 UI 垃圾黑名单 + 时间码 + digit_after 精确定位,实时链路源头拦截 + note_filter 出口兜底同表)、watermark_filter.rs(REQ-059 区域稳定性 × 文本不变性 × 内容变化证据,产物层可逆)、symbol_normalize.rs(REQ-060 中文数字解析 + 希腊字母/运算符/快捷键映射,词边界守卫防"派别/学派"误伤)、glossary.rs精化(REQ-061 TF-IDF 文档权重 + 缩略词低阈值召回 + 水印词排除)、note_filter.rs(REQ-082 过滤链:重复合并/碎片/低置信/UI 兜底,单一管线双出口;REQ-085 边界段六类分类 + AI 三态判定应用)、ai_protocol.rs/ai_text_filter.rs/commands_ai.rs(REQ-085 TextFilter 三态协议 + SiliconFlow 适配器 + prompts/text_filter.json 模板 + 复核命令,授权默认关/配额/缓存/审计/降级纯规则)、region_tracker.rs/windows.rs(REQ-084 前台窗口切换强制重扫 + 冻结防错抓)。门禁:567 单测全绿 + clippy 干净;新增代码审查 4 项即修(提交 463dbf4,详见 技术债清单)。
目标:产物与术语统计的"输入干净化"。三机制共用"原料层不动、产物层可逆"原则(沿用 B5 书面化先例)。 2026-08-19 追加:笔记废话出口过滤(REQ-082)+ 字幕 UI 垃圾源头过滤(REQ-083/084)+ AI 复核过滤(REQ-085)——源头治本 + 出口兜底 + AI 增强三层净化。
- 水印/台标/角标过滤(REQ-059):
watermark_filter.rs纯逻辑——区域稳定性(同坐标出现 ≥N 次)+ 文本不变性(内容不随版面变化)→ 水印候选集;OCR 产物过滤 + 术语统计排除(挂 REQ-061 前置);误杀兜底:阈值校准 + 产物层可逆(原始 OCR 块保留,仅产物视图隐藏) - 数字/单位/符号规范化(REQ-060):
symbol_normalize.rs纯逻辑——发音→符号映射表(数字/希腊字母/运算符/快捷键组合)+ 上下文判定("三点一四"数字上下文 vs "派别"非符号);接入产物层书面化管线;映射表 JSON 可校准 - 术语发现精化(REQ-061):
glossary.rs增强——现 OCR 高频×ASR 低频交叉之上:跨会话文档频率(TF-IDF 权重,降通用词)+ 缩略词模式(全大写序列/字母数字混合)+ 水印词排除表(REQ-059 输出) - 字幕 UI 垃圾源头过滤(REQ-083):
subtitle_ocr.rs/live_session_frame.rs入口加is_ui_junk()纯函数——水印("学习资料"等下载站/平台水印特征)/播放器 UI("选集/弹幕/倍速/1080P/高清/00:xx/ 时间码")/编辑器 UI("UTF-8/LF/行 \d+/已选择")/应用 UI("回到主界面")特征命中 → 该帧文本不进字幕投票器(不落 OCR 块/不落段/不推事件);黑名单 JSON 可校准;与 REQ-059 区域稳定性过滤互补(文本特征 vs 区域特征) - 字幕 ROI 窗口切换检测(REQ-084):
region_tracker.rs/live_session_frame.rs——前台活动窗口变化(与录制目标窗口句柄不一致,复用 windows.rs 枚举能力)→ 强制reset_scan()重扫 ROI;切换期间 ROI 内文本不再延长空帧计数(防"新窗口恰好有文本"导致 ROI 继续抓错);误触发阈值校准(前台探测失败静默跳过) - 废话出口过滤管线(REQ-082):
note_filter.rs纯逻辑——过滤链:① 相邻重复段合并(同文本连续段,含 asr/fused 混杂——融合重复 bug 修复后的兜底);② 碎片段丢弃(≤2 字 / 时长 <500ms / 纯符号数字标点);③ 低置信丢弃(confidence <0.6);④ UI 垃圾特征兜底(复用 REQ-083 黑名单);输出NoteFilterResult { markdown, stats: {ui_junk, duplicates, fragments, low_confidence}, filtered: Vec<FilteredItem{reason, text, time}> };session_to_note与preview_session_note(REQ-081)共用单一管线 - AI 复核过滤(REQ-085,2026-08-19 头脑风暴):规则层无法判定的边界段(口头禅/寒暄离题/ASR 破碎句/截断半句/语义重复/过渡句)→ 云端付费模型批量三态判定
- 协议:
ai_protocol.rs扩展AiRequestType::TextFilter+TextFilterResponse { action: keep|delete|merge, confidence, reason, merge_with: prev|next|null }——schema 强校验,非法响应丢弃(回退规则结果) - 判定模型:截断半句先判上下文衔接——与上一段/下一段拼接后语义完整 →
merge(保留 + 标记衔接段);前后都接不上 →delete(无效信息);其余五类按标准删/留;绝不改写文本、不纠正错词(错词属书面化域,AI 不越界) - 模型接入:
ai_text_filter.rs适配器(默认 SiliconFlow,OpenAI 兼容端点,模型名/端点/密钥全部环境变量注入——AGENTS.md 环境隔离铁律);temperature=0+ JSON 模式(response_format: json_object,推理模型若输出思考标签用 no_think 参数关闭);批量上限 30 段/请求;超时 + 重试 + 失败降级 - 默认模型(2026-08-19 硅基流动实测选型,可商用免费档):
deepseek-ai/DeepSeek-R1-0528-Qwen3-8B——¥0/M 免费 + MIT 许可商用无忧(HuggingFace 官方 LICENSE: mit),DeepSeek 官方轻量推理模型(Qwen3-8B 架构,128K 上下文),中文/指令遵循/逻辑强,单 GPU 可跑;成本 ¥0/会话;注意点:推理模式延迟略高(批量单请求可接受)、JSON 稳定性实现时实测(不达标可配置切回付费档) - 备选可切换:
Qwen/Qwen3-30B-A3B-Instruct-2507(付费质量档,in ¥0.7/M out ¥2.8/M ≈ 6 厘/会话,非思考模式低延迟,Apache-2.0 商用无忧)/GLM-4-32B-0414(in/out ¥1.89/M,GLM 结构化输出口碑好,商用需智谱登记);模型名走配置切换零代码改动 - 提示词模板:
prompts/text_filter.json独立可校准(项目"映射表 JSON 可校准"先例)——六类删除标准显式定义 + 保守原则(宁可保留不可误删:不确定 → keep 且 confidence ≤0.6;技术术语/数字/专名即使片段也保留)+ 真实样本 few-shot(口头禅删/技术保留/破碎句删/截断句 merge 两态)+ 严格 JSON 输出约束 - 成本控制:只送边界段(典型 20~30 段/会话,非全量);批量判定降请求数;同文本 hash 缓存(
ai_guardrails.rsAiHashCache扩展文本 key——同句不重复送/计费);每日配额(复用DailyQuota);审计(上传摘要 + 判定结果可见) - 安全红线:AI 调用用户授权且默认关闭;上传前"将发送 N 段文本至 SiliconFlow"确认;审计可见可查;离线降级铁律——AI 不可用/超配额/无授权 → 纯规则结果原样输出(不丢不假)
- 触发交互:笔记预览视图内「✨ AI 复核」按钮按需触发(默认先展示纯规则结果秒出);可重跑;判定结果就地更新预览,被过滤对照新增"AI 判定"来源 + 理由;merge 段在预览正文以拼接形态展示(仅展示层拼接,落库仍按原始段——原料不动原则)
- 协议:
- 测试:水印合成帧 golden;符号映射表语料单测;术语候选质量 golden(注入角标/通用词/缩略词混合语料);is_ui_junk 特征矩阵单测(真实会话 8/11 垃圾字幕样本);ROI 窗口切换合成样本;note_filter 过滤链单测(重复/碎片/低置信/UI 垃圾各场景 + 误杀保护:正常长句/数字内容不误删);AI 复核——mock 适配器全链路(沿用 ai_mock.rs 模式)+ schema 校验(非法响应丢弃回退)+ 提示词模板回归(固定样本断言结构/判定不漂移)+ merge 判定两态样本 + 降级路径(无授权/超配额/网络失败/超时 → 纯规则输出)+ 预览与转笔记输出一致性
实施状态(2026-08-19):✅ 已实施——
fusion.rs概率加权(REQ-062:sim≥0.8 字幕权威第一层 + P(字幕)=conf_sub×(0.6+0.4×sim) vs P(ASR)=conf_asr×(0.4+0.6×sim) 决策 + 双源低置信→低置信核对段 B3 回填;FusionConfig.probability_weighted关闭即 v0.5.0 硬规则兜底;字幕投票置信度由subtitle_ocr.rs多数位占比产出,ASR 置信度经TranscriptSegment.confidence链路打通,融合落库 confidence 回填);dtw_align.rs(REQ-063:文本序列 DTW 对齐 → 成对时间差中位数漂移估计 → 时间戳回校,合成漂移样本对齐正确率/精度验证;spike 结论:机制先行 + 待 M4 S4 落盘后真机校准漂移分布,有收益再接入生产链路——当前不接入,无实测收益不改变行为);chapter_detect.rs时序状态机(REQ-064:章节内→候选→确认→最短章节时长抑制,confirm_requires_repeat/candidate_window_ms/min_chapter_ms可配,默认档 v0.5.0 单窗口确认零回归,topic_drop 回填真实下降幅度)。门禁:592 单测全绿 + clippy 干净。
目标:融合决策从"硬规则"到"概率+时序",时间戳从"近似"到"对齐"。REQ-063/064 依赖 M4 的 S4 落盘(实测数据源)。
- 融合置信度加权(REQ-062):
fusion.rs升级——编辑距离 ≤2 硬规则改为概率加权:P(胜出) = f(字幕投票置信度, ASR 段置信度);双源低置信 → 低置信标记(B3 已有落库通道);保留原硬规则为兜底开关 - DTW 时序对齐(REQ-063):spike 先行——采集真实会话字幕 OCR 流与 ASR 流(S4 落盘音频+现有段数据)实测漂移分布;有收益则
dtw_align.rs纯逻辑(文本序列对齐 → 时间戳回校,字幕 end_ms 滞后修正);无收益则裁剪并记录结论 - 章节边界平滑(REQ-064):
chapter_detect.rs增强——三信号投票硬决策 → 时序状态机(章节内/边界候选/确认)+ 最短章节时长先验 + 边界抑制;输出仍为章节边界事件(下游零改动) - 测试:合成双源置信度矩阵(REQ-062);合成漂移样本对齐正确率(REQ-063);合成会话状态序列(REQ-064)
- OCR 加权投票升级(REQ-065):
subtitle_ocr.rs升级——字符平权投票 → 清晰度(帧差分能量)× score 加权;字幕行帧间 tracking(同一字幕行的多帧组内时间平滑,翻页瞬间错帧不参与);前置核查 oar-ocr score 暴露面,未暴露则启发式权重(尺寸/对比度) - 帧新颖度采样(REQ-066):
region_tracker.rs/采样器升级——预算内选帧按"新颖度"排序:与 OCR 缓存(E5 已有 LRU)及上一帧文本重叠率低 → 优先;定位与变化检测的关系:变化检测=过滤无变化帧(布尔),新颖度=预算内排序(连续值),两级串联 - 去重指纹混合(REQ-067):
frame_cluster.rs/image_store.rs升级——aHash 汉明 ≤6 判定改为 aHash+dHash 双指纹(任一显著变化即新簇,双稳定才合并);帧聚类与图片去重共用同一判定函数 - 测试:模糊/翻页帧投票对比基准(REQ-065);预算分配单测(REQ-066);旋转/缩放样本去重 golden(REQ-067)
实施状态(2026-08-19):✅ 已实施——
audio_store.rs(REQ-068:WAV PCM16 按会话落盘 + 保留期 30 天/磁盘预算 4GB 超限删最旧 + finalize 回填长度字段防崩溃残留;SessionAudioWriter创建/写盘失败降级不阻断主链路;live_session 音频循环接入 + 会话结束触发清理;session_audio_status/session_audio_cleanup命令——清理 UI 由 M6 前端消费;为 AL3 漂移实测/REQ-063 真机校准/V4 两遍解码/X1 回听提供数据源);vad_adaptive.rs(REQ-069:滑动窗口能量历史 → P10 分位数噪声底 → 阈值=噪声底×3 + 预热 10s + 平滑限幅 20%/块;AGC 开启时用预处理链阈值不重复自适应;VAD_ADAPTIVE=0 可关);practice_detect.rs(REQ-070:30s 窗聚合——窗内段间 gap 累计 ≥6s 且窗内 OCR 文本 ≤1 种(画面静止近似)→ 练习点;接入 SessionAnalysis.practice_points,实操档案产物模板消费)。门禁:629 单测全绿 + clippy 干净。
- 音频落盘策略(REQ-068):
audio_store.rs——实时链路音频按会话落盘(WAV 原始或压缩档位,策略可配:默认开/保留期 30 天/磁盘预算上限触发清理)+ 清理 UI;会话级元数据(采样率/声道/时长);为 AL3 漂移实测、V4 两遍解码(v0.7.0+)、X1 回听(待议)提供数据源;早期排(M4 第一项) - VAD 阈值自适应(REQ-069):
streaming_asr.rs/VAD 层——会话内能量统计(滑动分位数)→ 静音门控阈值自适应;与 AGC(REQ-041,默认关)联动策略(AGC 开则不重复自适应);可关 - 练习段识别(REQ-070):
analysis.rs新增——长静音(VAD 已有)× 画面静止(变化检测已有)同窗命中 → 练习点事件;实操档案产物模板消费(StepCard 之间插入"练习点"标记) - 测试:落盘/保留期/预算清理单测(REQ-068);合成音量变化样本切段质量(REQ-069);合成静音+静止样本(REQ-070)
实施状态(2026-08-19):✅ 已实施(REQ-073)+ 核查结论记录(REQ-071/072/074/075)——
idle_governor.rs(REQ-073:静音+画面无变化状态机 Active→IdlePending→Idle,唤醒去抖可配 默认瞬时、空闲期 5s 低频探针检测无声恢复;接入 run_screen_worker——idle 跳过采样、引擎 worker 阻塞空闲零 CPU;核查结论:引擎池 mpsc 阻塞即天然休眠(模型不卸载——REQ-072 权衡:卸载重载代价高于空闲阻塞)); REQ-072 核查通过(记录结论):会话级缓存全部有界(ocr_cache LRU 256 / frame_samples / subtitle_segments / RoiTracker 会话级即弃、image_store 预算 50 张、流式重打分引擎会话级结束即弃)—— 长会话内存曲线无需额外改造; REQ-075 核查通过(记录结论):WebP 编码在屏幕采样线程与命令线程执行(TD-026 已把 OCR/归档移出会话音频消费线程)——不阻塞主链路,按规划"已不阻塞则记录结论关闭"; REQ-071/074 裁剪(spike/基准前置):DXGI staging 优化与 ORT batch 均需真机诊断 基准数据(本环境无诊断面板实测)——按规划"性能项收益不达标则裁剪不阻塞主线"裁剪, 待 v0.6.0 真机验收后按实测数据重启。门禁:636 单测全绿 + clippy 干净。
原则:先测后优(诊断面板数据驱动);全部可裁剪项——性能项收益不达标则裁剪不阻塞主线。
- 采集链路低分配(REQ-071):
capture/层——staging 纹理复用、BGRA→RGB 内联转换、DXGI AccumulatedFrames "未变化"跳过判断(元数据零成本二次过滤);诊断面板实测采集 CPU 前后对比 - 内存有界(REQ-072):会话窗口滑出即弃内存(落库即弃,复核现有缓存路径);SenseVoice 重打分引擎空闲卸载策略(卸载阈值 + 修正延迟权衡)
- 空闲降频(REQ-073):引擎池挂起状态机——视频暂停/长无信号(静音+无变化持续 N 秒)→ ASR/OCR worker 休眠;恢复信号即唤醒;音频块不丢(唤醒缓冲)
- OCR 区域批处理(REQ-074):
region_ocr.rs调度升级——同帧多区合并 ORT batch;基准验证(延迟 vs 显存);失败回退逐区串行(现状行为) - 图片编码线程核查(REQ-075):
image_store.rs核查 WebP 编码所在线程与阻塞路径;已不阻塞则记录结论关闭;阻塞则迁移专用线程+队列 - 测试:状态机单测(REQ-073);批处理基准(REQ-074);其余为诊断面板实测对比
实施状态(2026-08-19):✅ 已实施——
quality_report.rs+session_quality_report命令(REQ-076:聚合段置信度/OCR 低分/unknown 区/AI 复核候选数 → 可信度总览 + 低置信列表,前端详情卡片);outline.rs+session_outline命令(REQ-077:OCR 全帧块文本启发式标题检测——短文本无句末标点 + 60s 去重;产物视图侧边大纲导航点击跳转时间轴);course_of派生分组 +list_session_courses(REQ-078:标题章节前缀规则,零 DB 迁移,前端分组折叠);search_session_segments(REQ-079:段搜索片段上下文 + 前端高亮 + 一键跳详情定位);前端SessionsPage三视图(原料/产物/笔记预览)+ 可信度卡片 + 大纲侧栏 + 课程折叠 + 段搜索面板 + 降级横幅(REQ-080:live:asr-degraded 一次性横幅,恢复自动消失);NotePreviewView(REQ-081:过滤统计卡 + 被过滤对照复查 + 一键落库 +「✨ AI 复核」授权确认/就地更新预览/merge 拼接展示)。门禁:646 单测全绿 + clippy 干净 + 前端构建通过。
- 会话级质量报告(REQ-076):
commands_session.rs扩展——聚合已落库字段(段置信度分布/OCR 失败计数/unknown 区占比/AI 候选数)→ 会话摘要数据结构;前端会话详情"可信度总览"卡片 + 低置信列表(点击定位原料) - 大纲视图(REQ-077):
layout_analyzer.rs/analysis.rs扩展——OCR 大字块(字号聚类)+ 固定位置标题(顶部区域 text)+ 幻灯片标题 → 大纲条目(带时间戳);产物视图侧边大纲导航(点击跳转 refs.frame_ms) - 课程级分组(REQ-078):会话列表按课程分组(标题前缀规则 + 档案 + 用户标记覆盖);分组可折叠;课程元数据落库(sessions 表加 course 列或派生,走 ensure_column 幂等迁移)
- 搜索增强(REQ-079):FTS5 查询结果扩展——片段上下文(前后 N 字符)+ 关键词高亮(前端渲染)+ 一键跳会话详情并定位(原料/产物)
- 降级分级可见化(REQ-080):现有状态徽标(安静)之上:关键降级一次性横幅(ASR 降级链切换/OCR 引擎失效)+ 失败详情面板(诊断面板已有数据);不打扰常态
- 笔记预览视图(REQ-081,2026-08-19 用户需求):
commands_session.rs新增preview_session_note(id)(复用 REQ-082 过滤管线,只读不落库);前端NotePreviewView.tsx第三 tab(原料/产物/笔记预览)——过滤后笔记正文(标题+讲述内容+画面要点)+ 过滤统计卡(UI 垃圾 x/重复 y/碎片 z/低置信 w)+ 被过滤内容折叠对照(点击可复查误杀,来源定位原料)+ "一键落库"按钮(复用 session_to_note)+「✨ AI 复核」按钮(REQ-085 按需触发,判定结果就地更新预览,merge 段拼接形态展示);预览状态随会话数据变化可刷新 - 测试:质量报告聚合单测(合成会话数据);大纲 golden(合成幻灯片帧);分组规则单测;FTS5 查询单测;preview_session_note 与 session_to_note 输出一致性单测(同一管线双出口)
- 全链路验收:M1–M6 各机制真机生效(水印过滤/规范化/融合加权/时间戳对齐/新颖度采样/落盘/内存曲线/大纲/质量报告/搜索)
cargo test+cargo clippy全绿;G3 基准不回归;v0.5.0 验收项不劣化- 更新 CHANGELOG;版本文档沉淀;需求池状态流转关闭
- 提取纯度:台标/角标/水印不进产物与术语候选(合成帧 golden);口语符号规范化生效且可逆
- 笔记净化:字幕 UI 垃圾(水印/播放器/编辑器/应用 UI)不进字幕(真实会话 8/11 垃圾样本全拦截);窗口切换触发 ROI 重扫;笔记预览过滤统计正确、被过滤对照可复查、一键落库与转笔记输出一致(过滤管线单测全绿)
- AI 复核:边界段三态判定正确(合成样本含截断句可拼接/不可拼接两态 + 口头禅/寒暄/破碎句/语义重复/过渡句各态);mock 适配器全链路 + schema 强校验(非法响应丢弃回退);提示词模板回归不漂移;授权默认关 + 上传确认 + 配额 + 文本缓存 + 审计生效;降级路径(无授权/超配额/网络失败)纯规则结果原样输出
- 融合与时间戳:概率加权融合正确(合成双源矩阵);DTW 对齐修正漂移(spike 通过时);章节边界平滑不回归
- 画面提取:加权投票优于平权(基准);新颖度采样预算分配正确;双指纹去重 golden
- 音频与信号:实时链路音频落盘 + 预算清理生效;VAD 自适应切段不劣化;练习点标记产出
- 性能资源:采集 CPU 实测下降(诊断面板);长会话内存曲线平稳;空闲降频唤醒无竞态;批处理基准结论归档
- 会话体验:质量报告/大纲/课程分组/搜索高亮/降级分级/笔记预览全部可用
- 回归:v0.5.0 验收项不劣化;
cargo test+cargo clippy全绿
| 步骤 | 内容 | 产出 |
|---|---|---|
| M0 | v0.5.0 真机验收 + 在途收尾 + 发布(用户执行,未通过不启动) | 干净基线 |
| M1 | 提取纯度(REQ-059/060/061/082/083/084/085) | watermark_filter + symbol_normalize + glossary 增强 + note_filter + is_ui_junk + ROI 窗口切换 + ai_text_filter(AI 复核) |
| M2 | 融合与时间戳(REQ-062/063/064) | fusion 概率加权 + dtw_align(spike 通过时)+ chapter 平滑 |
| M3 | 画面提取(REQ-065/066/067) | 加权投票 + 新颖度采样 + 双指纹 |
| M4 | 音频与信号(REQ-068/069/070,S4 早期排) | audio_store + VAD 自适应 + 练习点 |
| M5 | 性能资源(REQ-071~075) | 低分配/内存有界/空闲降频/批处理/编码线程 |
| M6 | 会话体验(REQ-076~081) | 质量报告/大纲/课程分组/搜索增强/降级分级/笔记预览 |
| M7 | 端到端验收 + 发布 | v0.6.0 |
- v0.5.0 真机验收是硬前置:M0 未通过不启动开发(验收发现的问题可能回流 v0.5.0 修复)
- spike 项可裁剪:REQ-063(漂移无收益)/REQ-065(score 未暴露)/REQ-074(batch 无收益)/REQ-071(实测无差异)——结论决定去留,裁剪不阻塞主线
- 范围:22 项为迄今最大版本(v0.5.0 为 9 里程碑),单项目成本低但串联量大——按里程碑可裁剪(性能项 M5 优先裁)
- 水印过滤误杀:老师固定位置常驻提示语可能被误判——阈值校准 + 产物层可逆兜底
- 音频落盘磁盘占用:1 小时会话 WAV 体积(压缩档位权衡)——保留期默认 + 预算上限 + 清理 UI
- 内存卸载与修正延迟权衡:SenseVoice 卸载阈值需实测(E4 遗留评估)
- DB 迁移:sessions 加 course 列(如 UX9 采用落库方案)——ensure_column 幂等,兼容旧数据
- AI 复核误判风险:保守原则(宁可保留不可误删)兜底 + 被过滤对照可复查 + merge 判定需上下文样本校准(截断句误删/误并两态)
- AI 成本与依赖:付费模型(SiliconFlow 默认档)价格变动(如 2026-08 deepseek 峰谷涨价先例)→ 模型名/端点可配置切换;只送边界段 + 批量 + 缓存 + 配额控成本;无授权/超配额 → 纯规则输出(本地优先铁律不受影响)
- AI 授权与隐私:文本段上传第三方平台须用户授权且默认关闭 + 上传前确认 + 审计可见(AGENTS.md 安全红线:学习数据上传须授权且默认关闭)
- gaps doc §9 第三批大件(v0.7.0+ 候选):S1 课件直读、V4 课后全量两遍解码(S4 已就绪)、P2 指代消解、Q3 校对反哺、P5 代码块结构化、F4 跨会话去重、S3 多窗口、S5 麦克风、UX7 Onboarding、UX10 无障碍、PF3 模型档位
- gaps doc §9 未选/待议:P1 动画渐进合并、UX1 透明置顶迷你条;§10 会话域:C7 导出体系(PRD Must,待议)、X1–X10
- V1.0 既有规划(沿用):REQ-056 补缝式 AI 实装 / REQ-057 模型组余项 / REQ-058 流程图 / REQ-023 时间轴 / REQ-024 问答 / REQ-025 精修 / REQ-032 派生视图 / REQ-019/020 闪卡 / REQ-026 章节速览(REQ-077 为其前置)/ REQ-027 重点闪卡 / REQ-028 中英混说