Skip to content

Latest commit

 

History

History
196 lines (157 loc) · 34.6 KB

File metadata and controls

196 lines (157 loc) · 34.6 KB

v0.6.0 — 第六阶段:提取质量与信任 + 性能资源 + 会话体验

状态: 开发完成待真机验收(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 · 课堂助手机制清单

一、阶段目标

  1. 提取纯度(REQ-059/060/061/082/083/084/085):水印台标角标不进产物与术语统计;口语数字/符号规范化;术语候选精化(TF-IDF+缩略词);笔记废话出口过滤(UI 垃圾/重复/碎片)+ 字幕 UI 垃圾源头过滤(黑名单)+ 字幕 ROI 窗口切换检测 + AI 复核(边界段三态判定,SiliconFlow 付费默认档)
  2. 融合与时间戳(REQ-062/063/064):融合从硬规则升级概率加权;字幕 OCR 流与 ASR 流 DTW 对齐回校时间戳;章节边界时序平滑
  3. 画面提取(REQ-065/066/067):OCR 多帧加权投票;帧新颖度采样(预算花在新内容上);aHash+dHash 双指纹去重
  4. 音频与信号(REQ-068/069/070):实时链路音频落盘(策略先行);VAD 阈值自适应;练习段识别
  5. 性能资源(REQ-071~075):采集链路低分配;长会话内存有界;空闲降频;OCR 区域批处理;图片编码线程核查
  6. 会话体验(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 不可用/超配额 → 纯规则结果原样输出 已排期

三、技术方案

M0 基线收尾(前置,未通过不启动开发)

  • v0.5.0 M9 真机验收执行(用户执行):REQ-033 持续运行 + 实时全链路(档案检测→版面→区域 OCR→图片→产物)+ 文件导入路径 + G3 合成帧基准
  • 在途未提交代码收尾:structure_tier 等(用户工作区)提交后进入干净基线
  • v0.5.0 发布:CHANGELOG + 版本文档沉淀
  • v0.6.0 范围冻结:22 项(用户裁决,gaps doc §9 裁决记录);spike 项结论可裁剪

M1 提取纯度(REQ-059/060/061/082/083/084/085)

实施状态(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 增强三层净化。

  1. 水印/台标/角标过滤(REQ-059):watermark_filter.rs 纯逻辑——区域稳定性(同坐标出现 ≥N 次)+ 文本不变性(内容不随版面变化)→ 水印候选集;OCR 产物过滤 + 术语统计排除(挂 REQ-061 前置);误杀兜底:阈值校准 + 产物层可逆(原始 OCR 块保留,仅产物视图隐藏)
  2. 数字/单位/符号规范化(REQ-060):symbol_normalize.rs 纯逻辑——发音→符号映射表(数字/希腊字母/运算符/快捷键组合)+ 上下文判定("三点一四"数字上下文 vs "派别"非符号);接入产物层书面化管线;映射表 JSON 可校准
  3. 术语发现精化(REQ-061):glossary.rs 增强——现 OCR 高频×ASR 低频交叉之上:跨会话文档频率(TF-IDF 权重,降通用词)+ 缩略词模式(全大写序列/字母数字混合)+ 水印词排除表(REQ-059 输出)
  4. 字幕 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 区域特征)
  5. 字幕 ROI 窗口切换检测(REQ-084):region_tracker.rs/live_session_frame.rs——前台活动窗口变化(与录制目标窗口句柄不一致,复用 windows.rs 枚举能力)→ 强制 reset_scan() 重扫 ROI;切换期间 ROI 内文本不再延长空帧计数(防"新窗口恰好有文本"导致 ROI 继续抓错);误触发阈值校准(前台探测失败静默跳过)
  6. 废话出口过滤管线(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)共用单一管线
  7. 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.rs AiHashCache 扩展文本 key——同句不重复送/计费);每日配额(复用 DailyQuota);审计(上传摘要 + 判定结果可见)
    • 安全红线:AI 调用用户授权且默认关闭;上传前"将发送 N 段文本至 SiliconFlow"确认;审计可见可查;离线降级铁律——AI 不可用/超配额/无授权 → 纯规则结果原样输出(不丢不假)
    • 触发交互:笔记预览视图内「✨ AI 复核」按钮按需触发(默认先展示纯规则结果秒出);可重跑;判定结果就地更新预览,被过滤对照新增"AI 判定"来源 + 理由;merge 段在预览正文以拼接形态展示(仅展示层拼接,落库仍按原始段——原料不动原则)
  8. 测试:水印合成帧 golden;符号映射表语料单测;术语候选质量 golden(注入角标/通用词/缩略词混合语料);is_ui_junk 特征矩阵单测(真实会话 8/11 垃圾字幕样本);ROI 窗口切换合成样本;note_filter 过滤链单测(重复/碎片/低置信/UI 垃圾各场景 + 误杀保护:正常长句/数字内容不误删);AI 复核——mock 适配器全链路(沿用 ai_mock.rs 模式)+ schema 校验(非法响应丢弃回退)+ 提示词模板回归(固定样本断言结构/判定不漂移)+ merge 判定两态样本 + 降级路径(无授权/超配额/网络失败/超时 → 纯规则输出)+ 预览与转笔记输出一致性

M2 融合与时间戳(REQ-062/063/064)

实施状态(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 落盘(实测数据源)。

  1. 融合置信度加权(REQ-062):fusion.rs 升级——编辑距离 ≤2 硬规则改为概率加权:P(胜出) = f(字幕投票置信度, ASR 段置信度);双源低置信 → 低置信标记(B3 已有落库通道);保留原硬规则为兜底开关
  2. DTW 时序对齐(REQ-063):spike 先行——采集真实会话字幕 OCR 流与 ASR 流(S4 落盘音频+现有段数据)实测漂移分布;有收益则 dtw_align.rs 纯逻辑(文本序列对齐 → 时间戳回校,字幕 end_ms 滞后修正);无收益则裁剪并记录结论
  3. 章节边界平滑(REQ-064):chapter_detect.rs 增强——三信号投票硬决策 → 时序状态机(章节内/边界候选/确认)+ 最短章节时长先验 + 边界抑制;输出仍为章节边界事件(下游零改动)
  4. 测试:合成双源置信度矩阵(REQ-062);合成漂移样本对齐正确率(REQ-063);合成会话状态序列(REQ-064)

M3 画面提取(REQ-065/066/067)

  1. OCR 加权投票升级(REQ-065):subtitle_ocr.rs 升级——字符平权投票 → 清晰度(帧差分能量)× score 加权;字幕行帧间 tracking(同一字幕行的多帧组内时间平滑,翻页瞬间错帧不参与);前置核查 oar-ocr score 暴露面,未暴露则启发式权重(尺寸/对比度)
  2. 帧新颖度采样(REQ-066):region_tracker.rs/采样器升级——预算内选帧按"新颖度"排序:与 OCR 缓存(E5 已有 LRU)及上一帧文本重叠率低 → 优先;定位与变化检测的关系:变化检测=过滤无变化帧(布尔),新颖度=预算内排序(连续值),两级串联
  3. 去重指纹混合(REQ-067):frame_cluster.rs/image_store.rs 升级——aHash 汉明 ≤6 判定改为 aHash+dHash 双指纹(任一显著变化即新簇,双稳定才合并);帧聚类与图片去重共用同一判定函数
  4. 测试:模糊/翻页帧投票对比基准(REQ-065);预算分配单测(REQ-066);旋转/缩放样本去重 golden(REQ-067)

M4 音频与信号(REQ-068/069/070)

实施状态(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 干净。

  1. 音频落盘策略(REQ-068):audio_store.rs——实时链路音频按会话落盘(WAV 原始或压缩档位,策略可配:默认开/保留期 30 天/磁盘预算上限触发清理)+ 清理 UI;会话级元数据(采样率/声道/时长);为 AL3 漂移实测、V4 两遍解码(v0.7.0+)、X1 回听(待议)提供数据源;早期排(M4 第一项)
  2. VAD 阈值自适应(REQ-069):streaming_asr.rs/VAD 层——会话内能量统计(滑动分位数)→ 静音门控阈值自适应;与 AGC(REQ-041,默认关)联动策略(AGC 开则不重复自适应);可关
  3. 练习段识别(REQ-070):analysis.rs 新增——长静音(VAD 已有)× 画面静止(变化检测已有)同窗命中 → 练习点事件;实操档案产物模板消费(StepCard 之间插入"练习点"标记)
  4. 测试:落盘/保留期/预算清理单测(REQ-068);合成音量变化样本切段质量(REQ-069);合成静音+静止样本(REQ-070)

M5 性能与资源(REQ-071~075)

实施状态(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 干净。

原则:先测后优(诊断面板数据驱动);全部可裁剪项——性能项收益不达标则裁剪不阻塞主线。

  1. 采集链路低分配(REQ-071):capture/ 层——staging 纹理复用、BGRA→RGB 内联转换、DXGI AccumulatedFrames "未变化"跳过判断(元数据零成本二次过滤);诊断面板实测采集 CPU 前后对比
  2. 内存有界(REQ-072):会话窗口滑出即弃内存(落库即弃,复核现有缓存路径);SenseVoice 重打分引擎空闲卸载策略(卸载阈值 + 修正延迟权衡)
  3. 空闲降频(REQ-073):引擎池挂起状态机——视频暂停/长无信号(静音+无变化持续 N 秒)→ ASR/OCR worker 休眠;恢复信号即唤醒;音频块不丢(唤醒缓冲)
  4. OCR 区域批处理(REQ-074):region_ocr.rs 调度升级——同帧多区合并 ORT batch;基准验证(延迟 vs 显存);失败回退逐区串行(现状行为)
  5. 图片编码线程核查(REQ-075):image_store.rs 核查 WebP 编码所在线程与阻塞路径;已不阻塞则记录结论关闭;阻塞则迁移专用线程+队列
  6. 测试:状态机单测(REQ-073);批处理基准(REQ-074);其余为诊断面板实测对比

M6 会话体验(REQ-076~081)

实施状态(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 干净 + 前端构建通过。

  1. 会话级质量报告(REQ-076):commands_session.rs 扩展——聚合已落库字段(段置信度分布/OCR 失败计数/unknown 区占比/AI 候选数)→ 会话摘要数据结构;前端会话详情"可信度总览"卡片 + 低置信列表(点击定位原料)
  2. 大纲视图(REQ-077):layout_analyzer.rs/analysis.rs 扩展——OCR 大字块(字号聚类)+ 固定位置标题(顶部区域 text)+ 幻灯片标题 → 大纲条目(带时间戳);产物视图侧边大纲导航(点击跳转 refs.frame_ms)
  3. 课程级分组(REQ-078):会话列表按课程分组(标题前缀规则 + 档案 + 用户标记覆盖);分组可折叠;课程元数据落库(sessions 表加 course 列或派生,走 ensure_column 幂等迁移)
  4. 搜索增强(REQ-079):FTS5 查询结果扩展——片段上下文(前后 N 字符)+ 关键词高亮(前端渲染)+ 一键跳会话详情并定位(原料/产物)
  5. 降级分级可见化(REQ-080):现有状态徽标(安静)之上:关键降级一次性横幅(ASR 降级链切换/OCR 引擎失效)+ 失败详情面板(诊断面板已有数据);不打扰常态
  6. 笔记预览视图(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 段拼接形态展示);预览状态随会话数据变化可刷新
  7. 测试:质量报告聚合单测(合成会话数据);大纲 golden(合成幻灯片帧);分组规则单测;FTS5 查询单测;preview_session_note 与 session_to_note 输出一致性单测(同一管线双出口)

M7 端到端验收 + 发布

  • 全链路验收: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 中英混说