Files
NotesAgentic/docs/development/阶段F收尾验收记录.md
T

5.9 KiB
Raw Blame History

阶段 F 收尾验收记录

日期:2026-09-05。对应 feat/multimodal-finalization,基于 6bdba2c(阶段 F 主分支合并)。

完成范围

本轮补齐运行诊断持久化、真实磁盘占用、后台索引优先级、CUDA 设备失败时 CPU 单次重试、上传与任务重试幂等、跨修订安全更新笔记、音频用量分项,以及请求 JSON 导入/导出/重置和实际聊天推理验证。原有 API 优先、无配置/无效响应使用本地模型、local_only 禁止远程调用的流程继续保留。

具体行为见开发说明,接口见开发版契约,故障与修复见问题记录 F-13F-15

自动化与页面验证

项目 结果
后端全量 python -m pytest -q -p no:cacheprovider 559 通过;1 条已有 Starlette/httpx 弃用提示
前端全量 npm test -- --run 29 个文件、103 项通过
类型与生产构建 npm run build vue-tsc 与 Vite 构建通过,仍有既有大 bundle 提示
git diff --check 通过
真实页面 模型卡片读取实际大小;音频统计显示真实缺失;提供商表单展示请求编辑、恢复默认、导入/导出及推理验证入口
请求 Adapter 验证 隔离 HTTP Transport 检查最终流式/非流式请求和扩展字段,不访问外部供应商
失败恢复 初始化/OOM 故障注入、CPU 再失败、进程回收、队列顺序、重复提交、修订冲突和旧结果失效均覆盖

CPU / CUDA 真实模型闭环

Windows、Python 3.12。保留原 .venv-models CPU 环境,独立安装 .venv-models-cuda;安装后检查 torch=2.9.1+cu128cuda_available=True。显卡为 NVIDIA GeForce RTX 4060 Laptop GPU。

CPU 与 CUDA 分别创建隔离 Vault、附件目录和 SQLite,只读取固定 revision 权重;运行短中文音频 → Qwen3-ASR → ERes2NetV2 片段聚类 → Markdown 笔记 → Bekko 语义检索 → 修订更新。两次均返回已完成,检索命中同一笔记,更新保留 note_id 和 embedding_local_only: true,结束后本地运行队列无活跃任务。CPU 实际设备为 cpuCUDA 各次实际设备为 cuda:0

CUDA 环节 权重 revision 加载 / 推理耗时
Qwen3-ASR-0.6B 5eb144179a02acc5e5ba31e748d22b0cf3e303b0 30.375 / 3.234 秒
ERes2NetV2 片段聚类 3317286545c587ae682dbc166831d9448780eebb 5.735 / 0.578 秒
Bekko 首次笔记索引 c721113d59a1d91b447450324f51c4b3332c924a 19.860 / 0.656 秒

这些是单次功能冒烟观察值;运行期间有其他验证任务,不用于宣称吞吐或 CPU/GPU 性能倍率。短样本只产生 1 个片段和 1 个 speaker,不能验证多人重叠语音质量。CUDA OOM 恢复使用故障注入,并非实机显存耗尽测试。

中文 Embedding 小样本对照

固定 8 篇人工构造的短文,主题为线性代数、死锁、Python 函数、语义检索、光合作用、备份及两个无关干扰项(晚餐、篮球)。6 条改写查询,各有一个预期相关文档;对全部文档做余弦排序。

模型 revision Hit@1 / Recall@5 / MRR
Bekko A8M c721113d59a1d91b447450324f51c4b3332c924a 1.0 / 1.0 / 1.0
Granite 97M Multilingual r2 835ad14087e140460703cf0fae09f97d469d65c2 1.0 / 1.0 / 1.0

两者在这 6 条查询上的目标排名均为 1。该结果仅证明中文检索冒烟可运行,样本量不足以区分模型优劣;继续保留 Bekko 默认、Granite 可选。

未关闭的专项验收

  • 已提供无标注长录音,CUDA 功能与单次耗时验证见下文。参考转写和说话人标注仍缺失,不能报告 CER/WER、DER、阈值或业务吞吐达标。
  • 现阶段时间戳为片段级;逐字强制对齐、同段多人/重叠语音仍未实现,不将片段聚类视为完整说话人分离。
  • 外部供应商特殊 JSON 的兼容性,需要在目标账号和模型上点击实际推理验证;离线协议通过不替代厂商验收。
  • Tauri/Rust Host 和生产 MCP 沙箱按后续阶段安排;本轮数据持久化在后端 SQLite/Vault,为桌面集成保留稳定接口。

结论:阶段 F 本轮工程收尾已实现并完成 CPU/CUDA 功能验收;上述质量及外部服务专项保持待验收状态,不标记为全部通过。分支仍需独立审阅后决定合并。

2026-09-05 长录音补充验收

用户授权使用本机 CUDA,只做本地处理。使用隔离的 SQLite、附件目录与 Vault,读取已安装的固定 revision 权重;原音频、转写正文和独立运行报告保留在被忽略的 .local-plans,不入库。

观察项 本次结果
输入 MP389,424,101 字节,2235.60 秒(约 37 分 16 秒)
转写与片段聚类 completed441 个片段,5 个说话人聚类
两环节总耗时 约 661 秒(轮询含最多约 10 秒误差),RTF 约 0.296
Qwen3-ASR 实际设备 / 加载 / 推理 cuda:0 / 10.52 秒 / 607.78 秒
ERes2NetV2 实际设备 / 加载 / 推理 cuda:0 / 3.97 秒 / 28.88 秒
后续链路 Markdown 笔记生成、本地 Bekko 索引、向量检索命中均通过
隐私标记 导出笔记保留 embedding_local_only: true
警告 1 个损坏音频包按时长补静音;说话人结果为片段级

最初实测暴露了 25 MiB 限制和单个损坏 MP3 包导致整任务失败,已修复并用同一输入重新跑通。5 个聚类不是已确认的真实人数;没有参考转写或说话人标注,因此不计算 CER/WER、DER 或 FAR/FRR。单次耗时也不作为跨设备吞吐承诺。逐字对齐、重叠语音和目标厂商真实验收仍未关闭。

本轮自动化基线:后端 577 项、前端 280 项通过,前端类型与生产构建通过;构建仍有既有大 chunk 提示。离线 Provider 测试不代替目标账号实测。