Skip to content

Commit f1deecc

Browse files
committed
docs: v0.19 检索层交付记录补录 + v0.20 ASR 立项登记
1 parent f5e083a commit f1deecc

4 files changed

Lines changed: 118 additions & 3 deletions

File tree

‎docs/product/requirements-pool.md‎

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -461,11 +461,28 @@
461461
462462
| REQ | 需求 | 优先级 | 状态 | 目标版本 | 备注 |
463463
|----|------|--------|------|---------|------|
464-
| REQ-258 | 检索与索引基建:kb_chunks/kb_meta/FTS5 影子表(节级切块 ≤800 字符硬切、多态源双可空 FK)+ 生命周期(保存收口钩子重索引/删除事务内显式清理/全量重建 reindex_all + kb_index_stats 角标)+ kb_search 混合检索(FTS5 BM25 ∪ 向量余弦 → RRF 融合;LIKE 旧链保留) | P1 | 已立项 | v0.19.0 | FTS-only 可发布;影子表写入收敛 kb_index 同事务双写(不依赖触发器) |
464+
| REQ-258 | 检索与索引基建:kb_chunks/kb_meta/FTS5 影子表(节级切块 ≤800 字符硬切、多态源双可空 FK)+ 生命周期(保存收口钩子重索引/删除事务内显式清理/全量重建 reindex_all + kb_index_stats 角标)+ kb_search 混合检索(FTS5 BM25 ∪ 向量余弦 → RRF 融合;LIKE 旧链保留) | P1 | 已实施 | v0.19.0 | FTS-only 可发布;影子表写入收敛 kb_index 同事务双写(不依赖触发器);**代码已交付(2026-09-03:三表 DDL + 切块/查询纯函数 + 生命周期钩子 + reindex_all/stats + kb_search;切词校准定案=trigram+2 字 LIKE 补充;RRF 函数 TDD 先行待 v0.19.3 合流)** |
465465
| REQ-259 | 本地 embedding 引擎:EmbeddingEngine trait(Noop/Onnx/Ollama 实现)+ M0 spike 定选型(内嵌 ONNX bge-small-zh-v1.5 vs Ollama /api/embeddings;中文小评测集 ~30 查询;ORT 共存必测)+ 模型分发复用 model_registry + 混合检索开启 | P1 | 已立项 | v0.19.3(spike 定案后) | 无模型 = FTS-only 降级,不阻塞 v0.19.0~2;模型文件不入库 |
466-
| REQ-260 | 学习库问答「问我的学习库」:chat_sessions.retrieval 列 + chat_send 检索分支(命中列表恒可用·本地;生成经 content_gate + kb_qa_enabled 默认关)+ pack_fragments 转正 + 预算档位/成本/审计(ai_usage + meta_json 引用)+ 引用 chips 跳笔记高亮命中词 | P1 | 已立项 | v0.19.1 | 兑现 REQ-024/REQ-231 检索欠账(口径修订见设计 §十二.1);断网回退命中列表 |
466+
| REQ-260 | 学习库问答「问我的学习库」:chat_sessions.retrieval 列 + chat_send 检索分支(命中列表恒可用·本地;生成经 content_gate + kb_qa_enabled 默认关)+ pack_fragments 转正 + 预算档位/成本/审计(ai_usage + meta_json 引用)+ 引用 chips 跳笔记高亮命中词 | P1 | 已实施 | v0.19.1 | 兑现 REQ-024/REQ-231 检索欠账(口径修订见设计 §十二.1);断网回退命中列表;**代码已交付(2026-09-03:retrieval/meta_json 补列 + kb 双闸门编排 + KbHits 事件 + CitationChips + 笔记内命中词搜索高亮 + 设置「学习库」段)** |
467467
| REQ-261 | 检索建议(发现路径):概念/节点详情「相关素材建议」候选(混合检索 top-K ≤10,排除已链接)→ 人工勾选确认 → 既有 link_knowledge_target 落库(白名单零迁移)+ 跨体系相似概念提示(提示型不自动合并) | P2 | 已立项 | v0.19.2 | kb_discovery 默认关(交叉点默认关延续);建议不落库零双写 |
468-
| REQ-262 | 治理与设置:SettingsPage「学习库」段(引擎状态/模型下载/索引统计与重建/发现开关)+ FTS5 使能核查 + 中文 BM25 切词校准 | P2 | 已立项 | v0.19 系列随批 | 复用 speaker/OCR 模型下载 UI 范式 |
468+
| REQ-262 | 治理与设置:SettingsPage「学习库」段(引擎状态/模型下载/索引统计与重建/发现开关)+ FTS5 使能核查 + 中文 BM25 切词校准 | P2 | 部分落地(v0.19.0~1) | v0.19 系列随批 | 复用 speaker/OCR 模型下载 UI 范式;**已交付(2026-09-03):FTS5 使能核查(bundled 恒编 FTS5)+ 中文切词校准定案(trigram)+ 设置「学习库」段(引擎状态/问答开关与档位/统计/重建);模型下载与发现开关随 v0.19.3/v0.19.2** |
469+
470+
### v0.20 · ASR 质量增强(2026-09-03 用户裁决立项 C:P0~P2)
471+
472+
> 依据:repowiki+代码互证盘点(阈值经验化/实时缺全量精修/无混淆画像/三处文档落差)+ 用户裁决(① 验证必须代码自验证 ② 立项范围 C);
473+
> 设计:[asr-optimization-plan.md(决策稿)](../Foresight/asr-optimization-plan.md) + [ADR-030](../adr/ADR-030-asr-quality-batch.md)(已接受)+ [v0.20 版本文档](../versions/v0.20.md);
474+
> 排期:v0.20.0(P0 harness+首轮报告)→ v0.20.1(P1 DTW 接线/参数 A-B 定案/热词加固/积压验证)→ v0.20.2(P2 全量精修/混淆画像闭环/LLM 校对);退出标准全为代码自验证。
475+
476+
| REQ | 需求 | 优先级 | 状态 | 目标版本 | 备注 |
477+
|----|------|--------|------|---------|------|
478+
| REQ-263 | asr_eval 自验证 harness:批量样本转写(流式/离线/参数矩阵/预处理开关)→ dtw 对齐 → CER/混淆画像 → A-B 对比表 → 回归退出码(CI)+ 有参考样本 fixtures 固化 + 首轮自测报告(含漂移分布) | P1 | 已立项 | v0.20.0(P0) | 参考信道:字幕轨>字幕OCR>会话字幕段;无参考不进 CER;复用 cer_bench/cer.rs/dtw_align/asr_forensic |
479+
| REQ-264 | DTW 漂移校正生产接线(dtw_align 纯函数已备、现无调用点):接入字幕融合入口 + 漂移估计分布统计 | P1 | 已立项 | v0.20.1(P1) | 字幕权威路线错位主因;harness 自动统计无需人工 |
480+
| REQ-265 | 参数定案族:预处理默认定案 + VAD 预热/窗口/倍率、端点 rule1/2/3、重打分门限、融合 gap/SIM/权重、去重阈值——asr_eval 自动 A/B 标定 + 配置化/档案化(JSON/audio_preproc_config 先例) | P1 | 已立项 | v0.20.1(P1) | 向后兼容:默认值不变则零行为漂移;golden 防误删 |
481+
| REQ-266 | 热词加固与注入源扩展:tokens 表外字过滤/崩溃防护单测 + 标题/章节/术语候选自动注入(领域细分已有) | P1 | 已立项 | v0.20.1(P1) | 感知质量主战场(术语/专名错) |
482+
| REQ-267 | 重打分积压验证与停止 drain 策略(3s 有界超时下的 channel 积压/慢机内容缺失) | P1 | 已立项 | v0.20.1(P1) | harness 慢速档回放验证 |
483+
| REQ-268 | 会话全量离线精修档:会话结束 S4 落盘音频全量 SenseVoice 第二遍 → 段级 diff → 预览采纳/回退(原料不可变、替换段标记来源/置信) | P1 | 已立项 | v0.20.2(P2) | 实时会话获得导入同级离线质量;O4 登记项落地 |
484+
| REQ-269 | ASR 同音混淆画像闭环:画像→候选纠错表(共现才替换、确认制,OCR ocr_confusion 机制迁移)→ 反哺 hotwords;JSON 可校准 | P2 | 已立项 | v0.20.2(P2) | 术语/专名错自动发现与修正 |
485+
| REQ-270 | 可选 LLM 文本校对:建议制逐句 + content_gate 默认关 + 成本审计;仅文本上云(语音不出本机红线);离线降级规则 | P2 | 已立项 | v0.20.2(P2) | 复用 ai_platform(本地 Ollama/云端 BYOK);人类裁决 |
469486

470487
### V1.0 · 体验增强(远期)
471488

‎docs/versions/README.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@
4949
| v0.18.0 | [v0.18.0.md](./v0.18.0.md) — 学习目标层 M1:目标对象 + 访谈式设定(四步+宣言+里程碑草案)+ 跨组聚合看板(REQ-030 激活/REQ-248~250,ADR-027;M1 代码已交付 2026-09-02,真机验收待执行) | 版本文档(M1 已实施) |
5050
| v0.18.1 | [v0.18.1.md](./v0.18.1.md) — 学习目标层 M2:毕业仪式 + 回顾流时间线 + 暂停/放弃 + 组删除降级提示(REQ-255~257;报告快照目标删除后仍可读) | 版本文档(M2 已实施 2026-09-02,真机验收待执行) |
5151
| v0.18.2 | [v0.18.2.md](./v0.18.2.md) — AI 目标规划师:规划建议+体系深度联动(建议制·默认关;协议/预算/摘要/弱项/双入口确认流已交付——REQ-251~254,ADR-028) | 版本文档(M1 批已实施 2026-09-02,设置段/`/goal` 下批) |
52+
| v0.19.0 | [v0.19.0.md](./v0.19.0.md) — 检索与发现层·索引基建:kb 派生三表 + 生命周期钩子 + reindex_all/stats + kb_search 全库混合检索(切词校准=trigram+2 字 LIKE;FTS-only 可发布——REQ-258,ADR-029) | 版本文档(已实施 2026-09-03,真机验收待执行) |
53+
| v0.19.1 | [v0.19.1.md](./v0.19.1.md) — 读路径 A 学习库问答「问我的学习库」:📚 会话模式 + 命中恒可用 + 双闸门生成(pack_fragments 转正/预算/审计)+ 引用 chips 跳笔记高亮命中词 + 设置「学习库」段(REQ-260/262 部分) | 版本文档(已实施 2026-09-03,真机验收待执行) |
54+
| v0.20 | [v0.20.md](./v0.20.md) — ASR 质量增强系列(自验证路线):v0.20.0 asr_eval harness + 首轮报告(REQ-263)→ v0.20.1 DTW 接线/参数定案族/热词加固/积压验证(REQ-264~267)→ v0.20.2 全量精修/混淆画像闭环/LLM 校对(REQ-268~270) | 系列文档(2026-09-03 立项 C,待实施;ADR-030) |
5255

5356
## 沉淀规则
5457

‎docs/versions/v0.19.0.md‎

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# v0.19.0:检索与索引基建——派生索引 + 全库混合检索(FTS-only 可发布)
2+
3+
> 状态:**已实施**(2026-09-03;真机验收待执行)
4+
> 依据:[v0.19 检索与发现层设计(已批准)](../superpowers/specs/2026-09-03-v0.19-rag-retrieval-discovery-design.md) · [ADR-029(已接受)](../adr/ADR-029-rag-retrieval-discovery-layer.md) · REQ-258 · REQ-262(部分)
5+
6+
## 一句话
7+
8+
在既有事实源(notes/fragments)旁新增**派生索引**(kb_chunks + FTS5 影子表 kb_fts + kb_meta):保存/删除/升笔记经生命周期钩子保持索引一致,`reindex_all` 一键兜底,`kb_search` 以 FTS5 全库检索(LIKE 旧链零改动保留);无 embedding 也完整可用(v0.19.3 前 FTS-only 精度,引擎状态如实展示)。
9+
10+
## 本批已交付
11+
12+
| 层 | 内容 |
13+
|---|---|
14+
| 纯函数 | kb_chunk(heading-aware 节级切块:≤3 空格缩进/1~6 '#' CommonMark 口径、围栏与缩进代码内不认标题、≤800 字符硬切不吞字、char 区间与文本严格连续——15 用例)· kb_fts(中文 BM25 切词口径校准定案 = **trigram** + 停用字切段 + 3~6 字滑窗短语 OR + 2 字词 LIKE 补充 + FTS 语法兜底 LIKE;RRF 融合函数 TDD 先行(v0.19.3 合流预留);snippet `==命中==` 全站高亮协议同构——17 用例) |
15+
| 数据层 | kb_chunks(多态源双可空 FK + CHECK)/ kb_fts(tokenize='trigram')/ kb_meta 三表 DDL(db_migrations 幂等,既有表零改动)· kb_index(影子表**同事务双写**收敛模块、不依赖触发器;删除先清影子表 FK 级联仅兜底;kb_meta 失败计数/最近错误软记录不阻断主链路) |
16+
| 生命周期 | 笔记:create/update_note(正文变化才重建——纯标题零写)/versioned_save(保存收口事务内)/delete(先清后删,knowledge_links 同款位置);碎片:create 一次性入块/delete/promote_fragment_to_note(事务内清碎片块 + 建笔记块) |
17+
| 重建/统计 | kb_reindex_all(后台线程 + 逐源进度回调;单源失败软记录继续;启动清失败计数落格式版本——**碎片全量重建先清后写修复幂等**)+ kb_index_stats(块数/源数/脏源(含孤儿检测)/版本不符/失败计数/last_error) |
18+
| 命令层 | kb_search(输入校验 ≤500 字符;命中含 note_id/fragment_id/标题/组名/节标题/snippet/score_kind)· kb_index_stats · kb_reindex_all(Channel 进度事件 Progress/Done/Failed——与聊天流事件同构) |
19+
20+
## 关键校准/实现决定(偏离 spec 草案字面处如实登记)
21+
22+
1. **中文 BM25 切词口径(spec 遗留 spike 项)**:索引 tokenizer 用 **trigram**(非草案默认 unicode61 remove_diacritics)——unicode61 将连续中文句整段视为单 token,整句/子串查询全部落空;trigram 免分词器且 bundled SQLite ≥3.34 已含(FTS5 使能核查同时完成:libsqlite3-sys 0.30.1 bundled 恒编 `-DSQLITE_ENABLE_FTS5`,含运行时测试覆盖)。代价:<3 字符 token 无法入 MATCH → 查询规划把 2 字词(如"配色")转 kb_chunks LIKE 子串扫描(个人库毫秒级,纯派生表不动 notes 旧链)。
23+
2. **保存钩子时序(spec 草案:"保存后 spawn_blocking 静默重索引")**:改为**保存事务内同步重建**——Db 连接本由 Mutex 串行,异步线程只把毫秒级开销移出事务却引入"同笔记两次快速保存 → 旧内容后写覆盖新内容"的索引乱序竞态;同步事务内重建零竞态且不阻塞 UI 的量级不变。失败仍软记录(error_count/last_error 角标可见),保存不反悔。
24+
3. **chunk 源 = 净化后正文**(notes.content/fragments.text 全部,归档碎片文本仍在库属素材);标题不在 chunk 源内(ADR-029 决策 2 字面)——标题检索继续由既有 LIKE 链承担。
25+
26+
## 测试与验收
27+
28+
- kb 纯函数/数据层 53 用例全绿:切块矩阵(标题/围栏/缩进/空文/800 硬切/字符区间连续性);FTS 查询规划(停用字切段/滑窗展开/双引擎 AND);RRF(空集/双列/并列稳定/截断);snippet(大小写不敏感/多词/省略号);生命周期(建改删/versioned_save/promote/删除清块);reindex_all(幂等/孤儿自愈/FK-off 极端写入口兜底/进度到顶);kb_search(trigram 子串命中/2 字 LIKE/组名溯源/空查询诚实空)
29+
- 验证:cargo test / clippy 全绿(待终验);既有 LIKE 搜索命令零改动
30+
31+
## 验收(用户真机,待执行)
32+
33+
- [ ] 编辑/删除笔记后"即时一致";设置→学习库 统计与重建按钮可全量修复(角标如实)
34+
- [ ] 无 embedding 模型时以 FTS 精度工作(引擎状态显示"词法引擎就绪 · 语义未接入")
35+
- [ ] 回归:既有搜索/笔记/碎片流程零回归
36+
37+
## 关联与后续
38+
39+
- 设计/ADR:v0.19 设计规格 §五/§六 · ADR-029 · REQ-258/REQ-262(FTS 使能核查 + 中文校准部分落地)
40+
- 后续:v0.19.1 读路径 A(学习库问答——kb_search/索引即其本地命中链)· v0.19.2 读路径 B · v0.19.3 语义增强(embedding——RRF 已备)
41+
42+
## 待办
43+
44+
- [ ] 真机验收(重建/角标/精度/回归)
45+
- [ ] kb_fts trigram 在超长单查询(滑窗 OR 膨胀)的性能观察——个人库量级预期毫秒,若超限再收紧滑窗范围(当前 ≤6 字窗仅对 >6 字段展开)

‎docs/versions/v0.19.1.md‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# v0.19.1:读路径 A——学习库问答「问我的学习库」(检索恒可用 · 生成默认关)
2+
3+
> 状态:**已实施**(2026-09-03;真机验收待执行)
4+
> 依据:[v0.19 检索与发现层设计(已批准)](../superpowers/specs/2026-09-03-v0.19-rag-retrieval-discovery-design.md) · ADR-029 · REQ-260 · REQ-262(部分)
5+
6+
## 一句话
7+
8+
AI 对话新增「📚 学习库问答」会话模式:提问 → 本地全库检索(FTS5/trigram + 2 字 LIKE,v0.19.0 索引)→ **命中片段列表恒返回**(本地零成本零上传,不受 AI 闸门约束);生成回答仅当 content_gate + `kb_qa_enabled` 双闸门开(默认关)→ 片段打包(budget_allocator pack_fragments 转正:档位硬顶 + 诚实截断)→ 流式生成 + 逐条引用(meta_json 持久化 + 引用 chips 跳笔记高亮命中词);断网/Provider 故障 → 该条回退命中列表 + 诚实错误可重试。
9+
10+
## 本批已交付
11+
12+
| 层 | 内容 |
13+
|---|---|
14+
| 数据层 | chat_sessions.retrieval 列(创建时定死——已有会话不改语义)+ chat_messages.meta_json 列(ensure_column 幂等补列,既有表零改动);ChatSession/ChatMessage 契约扩展(list/get/insert 行映射)· set_chat_message_meta(会话限定写) |
15+
| 设置 | AiSettings.kb_qa_enabled(默认关)+ kb_qa_tier(light/standard/deep 默认 standard)· kb_qa_gate(content_gate + kb 开关双闸门——goal_plan_gate 同款范式)· ai_set_kb_qa 最小面命令 · ai_get_settings 视图字段 |
16+
| 编排 | commands_ai_chat_kb(kb_chat_send/kb_chat_regenerate——纯聊链路零改动分流):单活跃流注册先行 → 用户消息落库(编辑重发语义沿用)→ kb_search → **KbHits 事件恒发** → 闸门关:命中列表引导文案落库(hits-only meta)+ Done;闸门开:客户端解析失败/流失败 → failed 占位 + meta 命中照挂(引用不丢)+ Failed 事件;成功 → 全文取回 → kb_prompt 打包 → 流式生成 → 回答落库 + answer meta + Done/Aborted |
17+
| 纯函数 | kb_prompt(KB_SYSTEM_PROMPT 只依据片段/无命中明说;kb_build_context 片段打包 [n] 出处标签 + 预算截断诚实标记;kb_meta_json {mode,hits} 契约 + as_history 历史过滤——hits-only 引导**不冒充回答**喂后续上下文;kb_hits_only_content 零命中诚实文案)——10 用例 |
18+
| 事件 | ChatStreamEvent::KbHits(hits 载荷——FE 流内先达;终态后消息 metaJson 持久化再渲染) |
19+
| 前端 | types/chat+kb(ChatSession.retrieval/ChatMessage.metaJson/KbHit/KbMessageMeta/KbIndexStats/KbReindexEvent)· utils/kbHits(parseKbMeta/firstMarkedTerm/hitLabel/isNoteHit——7 用例)· CitationChips(引用卡片:📄 笔记·节标题 / 📎 碎片·组 + snippet 一行;笔记可点跳转,碎片仅展示——4 用例)· ChatPage 新会话模式入口(侧栏 + 纯聊 / 📚 学习库问答)+ 会话徽标 · useChatStream per-session hits 累积 · ChatMessageList 双产物渲染(流内 chips + 终态 meta chips,failed 也保留引用)· **跳笔记高亮命中词最小面**:App focusNoteSearch → NotesPage 选中/滚动 → NoteReadingView 外部搜索注入(复用 A2 搜索高亮与定位)· SettingsPage「学习库」段(LearningLibraryPanel:引擎状态如实/生成开关+档位/索引统计+脏源与失败角标/全量重建+进度条,8s 轻量自新) |
20+
21+
## 治理落地(REQ-260/262 口径)
22+
23+
- 双闸门默认关(content_gate 之上 kb_qa_enabled);命中列表恒可用不受闸门约束;首次云端提示沿用(v0.16 CLOUD_NOTICE)
24+
- 预算档位复用 budget_allocator(tier_tokens 换算片段预算硬顶;pack_fragments 由 dead_code 转正 + 截断诚实标记注入上下文)
25+
- 成本/审计:流完成 usage_json 落库(既有 ai_usage/消息全文轨迹可见);meta_json 只存检索引用概要防正文膨胀
26+
- 降级链实测路径:AI 未开 → hits-only 引导;客户端配置缺失/断网/Provider 故障 → failed 占位 + 引用保留 + 重试(chat_regenerate 整链重跑);无 embedding → FTS 精度工作
27+
28+
## 测试与验证
29+
30+
- Rust:kb_prompt 10 用例 + db_ai_chat(retrieval/meta_json 迁移幂等 roundtrip)+ ai_settings(kb_qa_gate 三态矩阵)——`kb_`/`ai_settings`/`db_ai_chat` 过滤全绿
31+
- 前端:kbHits 解析/词提取/标签 7 用例 · CitationChips 渲染/点击跳转带词/碎片禁点/空命中 4 用例 · tsc 零错误
32+
- 全量 cargo test / vitest / clippy 终验待收尾执行
33+
34+
## 验收(用户真机,待执行)
35+
36+
- [ ] 学习库问答开箱即用:发送即得本地命中片段列表(AI 未开 → 引导直达设置,不灰死)
37+
- [ ] 开启 AI 后:问"我在哪学过 XX" → 命中列表 + 带引用回答;点引用跳笔记并高亮命中词
38+
- [ ] 断网/Provider 故障 → 该条回退命中列表 + 诚实错误可重试
39+
- [ ] 每问成本/轨迹可见(usage/全文/meta 引用)
40+
- [ ] 设置→学习库 引擎状态/统计/重建如实;回归全绿
41+
42+
## 关联与后续
43+
44+
- 设计/ADR:设计 §七/§9 · ADR-029 · REQ-260/REQ-262
45+
- 后续:v0.19.2 读路径 B(检索建议)· v0.19.3 语义增强(embedding)· `/ask` 命令别名(spec 明确下批接线,不阻塞本路径)· kb_discovery 发现开关随 v0.19.2 注册 feature_flags
46+
47+
## 待办
48+
49+
- [ ] 真机验收(上述 5 项)
50+
- [ ] 全量回归收尾(cargo test / vitest / tsc / clippy 报告归档)

0 commit comments

Comments
 (0)