Skip to content

Latest commit

 

History

History
99 lines (69 loc) · 6.12 KB

File metadata and controls

99 lines (69 loc) · 6.12 KB

ADR-006: 会话段派生视图(原始段与融合轴分离)

状态

提议(Proposed,2026-08-18)

日期

2026-08-18

背景

ADR-005 决定融合结果落库:session_segments 表在停止时被 replace_segments(DELETE + INSERT 单事务)破坏性覆盖——原始字幕段/ASR 段被融合段替换。该设计带来三个连锁问题:

  1. 不可重算:用户调整 hotwords 或融合参数(gap 阈值、编辑距离阈值)后无法重新融合——原始 ASR 句已被裁剪/切分,无法还原
  2. 不可审计:可信度时间线(头脑风暴 O1)需要每段原始来源 + 置信度,但融合段落库时 confidence: None,且重叠校对丢弃的 ASR 部分直接消失
  3. 不可精修:离线精修(头脑风暴 O4:两遍解码出更好的 ASR 段)后无法重新融合——原始段已毁

另有性能问题(由 REQ-031 短期解决,本 ADR 提供更彻底的架构解法):停止流程同步执行全量融合重算 + 全表重写,大会话下停止按钮响应延迟。

约束:

  • 本地优先:融合逻辑保持纯规则(无 LLM),本决策不改变融合算法本身
  • 兼容性:既有会话数据(已被覆盖的段)无法追溯还原,迁移仅影响新数据
  • 数据模型变更须走 ADR(AGENTS.md §10:SQLite schema 变更需额外审查)

决策

我们将把会话段数据分为事实层与派生层两层(类物化视图模式):

  1. 事实层 session_segments(保留现状表,语义变更):只存原始段——字幕 OCR 段(source=subtitle)与流式 ASR 段(source=asr,带 confidence)。实时捕获链路持续写入,永不覆盖
  2. 派生层 fused_segments(新表):merge_transcript 的融合结果 + fused_at 时间戳。停止/手动触发时由融合任务生成,可随时 DELETE + 重算
  3. 展示:会话详情页默认读 fused_segments(融合轴);无融合结果(融合未完成/失败)时回退读 session_segments(原始轴)
  4. 失效标记:原始段被离线精修更新后,fused_at 早于最新原始段写入时间 → 标记"可重算",提示用户或自动重算

备选方案

方案 A:派生视图(原始段 + 独立融合表)(选择)

  • 优点:可重算(热词/参数调整后重新融合);可审计(原始轴带置信度);可精修(O4 替换原始 ASR 段后重算);崩溃安全(融合失败只丢派生表,重算即可)
  • 缺点:新表 + 详情页查询逻辑变化;双表一致性需失效标记;ADR-004/005 需同步更新
  • 适用场景:V1.0 与 O1 可信度审计 / O4 离线精修一并落地

方案 B:实时增量融合

  • 优点:理论上去除停止时全量重算
  • 缺点:语义不成立——字幕段 end_ms 靠下一字幕出现时刻补齐(天然滞后);ASR 补缝的 gap 判断依赖字幕全集(全局语义);每次新段反复处理未闭合窗口,复杂度高收益趋近于零
  • 适用场景:无;已否决

方案 C:时间分片融合(按 5 分钟片独立融合)

  • 优点:每片独立,避免全量
  • 缺点:ASR 句跨片、字幕端跨片的边界处理复杂;片间一致性维护成本高
  • 适用场景:不推荐

方案 D:保持现状(覆盖式落库)

  • 优点:无改动
  • 缺点:不可重算/不可审计/不可精修(本 ADR 背景三问题无解)
  • 适用场景:放弃 O1/O4 时;已否决

选择理由

  • 事实与派生分离是数据建模的基本原则:原始段是唯一事实(fact),融合结果是可再生的派生(derived)——派生可重算、可失效、可丢弃,事实不可丢失
  • O1(可信度审计)与 O4(离线精修)是 V1.0 明确方向(头脑风暴 P6 中期演进),派生视图是两者的共同前置
  • 短期方案(REQ-031 停止异步化)的异步融合任务天然对接本方案:任务从"覆盖原始表"改为"写派生表",无额外架构成本
  • 实时增量融合(方案 B)在语义层面不成立,排除

影响

正面影响

  • 融合结果可重算(热词/参数调整后质量提升立即可见)
  • 可信度审计(O1)落地:详情页可切换融合轴/原始轴,原始轴带置信度标记需人工核对段落
  • 离线精修(O4)落地:替换原始 ASR 段 + 重算融合,两能力独立演进
  • 崩溃安全:融合失败只丢派生表,原始数据永在

负面影响 / 代价

  • 新增 fused_segments 表 + 详情页查询逻辑变更(读派生表 + 回退原始表)
  • 双表一致性:需 fused_at/失效标记机制
  • ADR-004(数据模型)与 ADR-005(融合落库决策)需同步更新为"已取代"状态引用本 ADR

风险

  • 既有会话数据已被覆盖式融合破坏,无法还原原始段——迁移策略:仅新会话受益,旧会话保留现状(融合轴即唯一数据),文档注明
  • 详情页回退逻辑(无融合结果时读原始轴)若实现不当会造成"详情页数据突然变化"的体验断裂——需在前端明确"融合中"状态

合规性验证

  • 新会话停止后:session_segments 保留全部原始段(数量 = 捕获段数),fused_segments 生成融合轴(fused_at 有效)
  • 热词调整后重算融合:fused_segments 更新,session_segments 不变
  • 融合失败模拟:fused_segments 为空/旧数据,详情页回退显示原始轴且不报错
  • 离线精修后:原始 ASR 段更新 → fused_at 失效标记生效 → 重算后详情页升级
  • cargo test 新增:派生表读写、失效标记、详情页回退逻辑单测

相关决策

  • ADR-004: 会话管理数据模型方案(本决策将部分取代其"融合结果落库"语义)
  • ADR-005: 字幕 OCR 与双源转写融合方案(融合规则不变,落库目标变更)
  • REQ-031: 融合停止异步化 + 无字幕短路(短期方案,先行实施)

参考