| 02-P-NBL/round-5/README.md | ●●●●● patch | view | raw | blame | history | |
| 02-P-NBL/round-5/engineering-tasks.md | ●●●●● patch | view | raw | blame | history | |
| 02-P-NBL/round-5/prd.md | ●●●●● patch | view | raw | blame | history | |
| 02-P-NBL/round-5/qa-test-plan.md | ●●●●● patch | view | raw | blame | history | |
| 02-P-NBL/round-5/todo-list.md | ●●●●● patch | view | raw | blame | history |
02-P-NBL/round-5/README.md
New file @@ -0,0 +1,114 @@ # Round 5:Qwen3-ASR 中文高级模型 状态:v0.1 启动稿 所属子项目:`02-P-NBL` Round:Round 5 基线版本:`2.1.22 build20260603.1608` 基线 commit:`a19e8d9` 工作分支:`codex/round5-qwen3-asr-chinese` 日期:2026-06-03 ## 1. 本轮目标 Round 5 的目标是让中文用户可以主动选择 Qwen3-ASR 高级中文/多语言模型: ```text Chinese effective language -> SenseVoice 默认模型 Chinese 用户主动选择 -> Qwen3-ASR 高级模型 ``` SenseVoice 必须保留: ```text Qwen3-ASR 下载/初始化失败 -> SenseVoice 继续可用 用户切回默认模型 -> SenseVoice ``` ## 2. 本轮文档 - [`prd.md`](prd.md):产品需求和验收边界 - [`engineering-tasks.md`](engineering-tasks.md):研发任务拆解 - [`qa-test-plan.md`](qa-test-plan.md):QA 测试计划 - [`todo-list.md`](todo-list.md):本轮执行 Todo ## 3. 关键技术确认 当前 Round 4 基线使用: ```text github.com/k2-fsa/sherpa-onnx-go* v1.12.24 ``` 该版本没有 `OfflineQwen3ASRModelConfig`。Round 5 必须先升级 sherpa-onnx Go/macOS 依赖。 已核对 `v1.13.2`: ```go config.ModelConfig.Qwen3ASR.ConvFrontend config.ModelConfig.Qwen3ASR.Encoder config.ModelConfig.Qwen3ASR.Decoder config.ModelConfig.Qwen3ASR.Tokenizer config.ModelConfig.Qwen3ASR.MaxTotalLen config.ModelConfig.Qwen3ASR.MaxNewTokens config.ModelConfig.Qwen3ASR.Temperature config.ModelConfig.Qwen3ASR.TopP config.ModelConfig.Qwen3ASR.Seed config.ModelConfig.Qwen3ASR.Hotwords ``` 同时 macOS dylib 从: ```text libonnxruntime.1.23.2.dylib ``` 升级为: ```text libonnxruntime.1.24.4.dylib ``` 构建脚本必须同步调整。 ## 4. 本轮模型 模型包: ```text sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25 ``` 下载 URL: ```text https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25.tar.bz2 ``` HTTP HEAD 已确认: ```text content-length: 878702423 bytes last-modified: 2026-04-07 09:52:52 GMT ``` Required files: ```text conv_frontend.onnx encoder.int8.onnx decoder.int8.onnx tokenizer/ ``` tokenizer 目录至少需要: ```text tokenizer/merges.txt tokenizer/vocab.json ``` ## 5. 资料依据 - sherpa-onnx Qwen3-ASR 文档:<https://k2-fsa.github.io/sherpa/onnx/qwen3-asr/pretrained.html> - sherpa-onnx model asset:<https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25.tar.bz2> - sherpa-onnx Go/macOS module:`github.com/k2-fsa/sherpa-onnx-go* v1.13.2` 02-P-NBL/round-5/engineering-tasks.md
New file @@ -0,0 +1,266 @@ # Round 5 研发任务拆解:Qwen3-ASR 中文高级模型 状态:v0.1 研发拆解稿 所属子项目:`02-P-NBL` Round:Round 5 日期:2026-06-03 输入文档: - [`prd.md`](prd.md) - [`../engineering-plan.md`](../engineering-plan.md) - [`../plan.md`](../plan.md) ## 1. 研发目标 让中文用户可以主动下载并切换到 Qwen3-ASR,同时保持 SenseVoice 默认路径、English Moonshine/Parakeet 路径和用户数据不退化。 ## 2. 交付边界 ### 2.1 必须交付 - `sherpa-onnx-go*` 依赖升级到支持 Qwen3-ASR 的版本。 - 构建脚本兼容新版 `libonnxruntime` dylib。 - `qwen3-asr-0.6b` model profile。 - `BackendQwen3ASR = "qwen3_asr"` backend kind。 - Qwen3-ASR required files 与 tokenizer 目录校验。 - Qwen3-ASR sherpa config builder。 - 中文设置页模型选择 UI 显示 SenseVoice 和 Qwen3-ASR。 - SenseVoice 和 Qwen3-ASR 互相切换。 - 下载失败和初始化失败保护。 - SenseVoice、Moonshine、Parakeet 回归。 - 开发自查、代码复审、QA handoff。 ### 2.2 明确不交付 - Qwen3-ASR 作为默认模型。 - Qwen3-ASR 删除 UI。 - 粤语独立语言 UI。 - 欧洲语言 UI。 - 多 Qwen3-ASR 变体选择。 - 正式 Developer ID notarization。 ## 3. 推荐任务顺序 ```text T0 现状和官方资料确认 T1 sherpa-onnx-go* 依赖升级 T2 构建脚本 dylib 适配 T3 Qwen3-ASR profile T4 tokenizer 目录校验增强 T5 Qwen3-ASR backend builder T6 中文模型选择 UI T7 下载/切换状态处理 T8 单元测试和前端构建 T9 代码复审 T10 QA handoff T11 真机 QA 和测试包准备 ``` ## 4. 任务明细 ### T0:现状和官方资料确认 完成标准: - 明确当前 `v1.12.24` 不支持 `OfflineQwen3ASRModelConfig`。 - 明确目标依赖版本,初选 `v1.13.2`。 - 明确模型包 URL、大小、last-modified、required files。 ### T1:sherpa-onnx-go* 依赖升级 工作内容: - 升级: - `github.com/k2-fsa/sherpa-onnx-go` - `github.com/k2-fsa/sherpa-onnx-go-macos` - `github.com/k2-fsa/sherpa-onnx-go-linux` - `github.com/k2-fsa/sherpa-onnx-go-windows` - 目标版本:`v1.13.2`。 - 更新 `go.mod`、`go.sum`。 完成标准: - `go test ./... -count=1` 可通过。 - SenseVoice/Moonshine/Parakeet 现有 builder 编译通过。 - 没有 API 字段名不兼容。 ### T2:构建脚本 dylib 适配 工作内容: - 当前脚本写死: ```text libonnxruntime.1.23.2.dylib ``` - 升级后 macOS module 提供: ```text libonnxruntime.1.24.4.dylib ``` - 修改本地和 release 构建脚本: - 自动发现 `libonnxruntime.*.dylib`。 - 或统一改为复制 `libonnxruntime.dylib` 并保留版本 dylib。 - `install_name_tool` 逻辑必须适配新版文件名。 完成标准: - arm64 本地构建通过。 - x86_64 本地构建通过,若本机工具链支持。 - App 签名验证通过。 - DMG 可生成并通过 `hdiutil verify`。 ### T3:Qwen3-ASR profile 工作内容: - 新增常量: - `Qwen3ASRModelID = "qwen3-asr-0.6b"` - `BackendQwen3ASR = "qwen3_asr"` - 新增 `qwen3-asr-0.6b` profile。 - 将 `DefaultLanguageID` 的 `UpgradeModelIDs` 设置为 `[]string{Qwen3ASRModelID}`。 - 配置 required files。 完成标准: - `GetModelProfile("qwen3-asr-0.6b")` 可返回完整 profile。 - 中文模型列表包含 SenseVoice 和 Qwen3-ASR。 - 中文默认仍是 SenseVoice。 ### T4:tokenizer 目录校验增强 工作内容: - 现有 required file rule 已支持 `AllOf` 相对路径。 - 需要确保 `tokenizer/merges.txt`、`tokenizer/vocab.json` 可以校验。 - 需要为 backend builder 提供 tokenizer 目录路径: - 可以新增 role `tokenizer` 指向目录。 - 或在 builder 中从 `tokenizer_merges` 推导目录。 完成标准: - 缺少 `tokenizer/merges.txt` 校验失败。 - 缺少 `tokenizer/vocab.json` 校验失败。 - `resolved.Files["tokenizer"]` 能得到 tokenizer 目录。 ### T5:Qwen3-ASR backend builder 工作内容: - `isSupportedBackend` 支持 `BackendQwen3ASR`。 - `offlineConfigForResolvedModel` 新增 Qwen3-ASR 分支。 - 设置: ```go Qwen3ASR.ConvFrontend = resolved.Files["conv_frontend"] Qwen3ASR.Encoder = resolved.Files["encoder"] Qwen3ASR.Decoder = resolved.Files["decoder"] Qwen3ASR.Tokenizer = resolved.Files["tokenizer"] Qwen3ASR.MaxTotalLen = 1024 Qwen3ASR.MaxNewTokens = 256 Qwen3ASR.Temperature = 0.0 Qwen3ASR.TopP = 0.9 Qwen3ASR.Seed = 0 ``` 完成标准: - Qwen3-ASR 引擎可初始化。 - `HardwareInfo()` 显示 `Qwen3-ASR · CPU`。 - 未知 backend 仍返回明确错误。 ### T6:中文模型选择 UI 工作内容: - 中文状态显示: - SenseVoice - Qwen3-ASR - English 状态保持: - Moonshine English - Parakeet English - UI 显示下载大小和下载进度。 完成标准: - 中文用户能从 UI 下载 Qwen3-ASR。 - 下载完成后能使用 Qwen3-ASR。 - 能切回 SenseVoice。 - English 路径不出现错误模型切换。 ### T7:下载/切换状态处理 工作内容: - 下载期间禁用重复点击。 - 下载失败后保留原模型。 - 下载成功后切换到目标模型。 - 切换失败时原模型继续可用。 - `.downloads`、`.staging` 不被判定为可用模型。 完成标准: - Qwen3-ASR 下载失败不破坏 SenseVoice。 - Qwen3-ASR 初始化失败不破坏 SenseVoice。 - English Moonshine/Parakeet 不受影响。 ### T8:测试 后端: ```bash cd privatevoice.src go test ./... -count=1 ``` 前端: ```bash cd privatevoice.src/frontend npm run build ``` 检查: ```bash git diff --check ``` 完成标准: - 全部通过。 - 关键测试覆盖 profile、resolver、backend、服务 API。 ### T9:代码复审 复审重点: - 是否保持 SenseVoice 默认。 - 是否存在未安装 Qwen3-ASR 直接切换。 - 是否存在下载失败破坏旧模型。 - 是否在 English 路径误触发 Qwen3-ASR。 - sherpa 依赖升级是否破坏 Moonshine/Parakeet。 - 构建脚本是否不再硬编码旧 dylib。 ### T10:QA handoff 交付: - QA handoff 文档。 - 开发自查日志。 - 已知风险。 - Qwen3-ASR 真实下载 URL 和大小。 - 依赖升级说明。 ### T11:测试包准备 若 QA 预检通过: - 递增版本到 `2.1.23`。 - 生成新 build 编号。 - 构建 `.dmg`。 - 生成 `RELEASE_MANIFEST.md`。 - 验证 DMG。 - tag。 02-P-NBL/round-5/prd.md
New file @@ -0,0 +1,254 @@ # Round 5 PRD:Qwen3-ASR 中文高级模型 状态:v0.1 启动稿 所属子项目:`02-P-NBL` Round:Round 5 日期:2026-06-03 基线版本:`2.1.22 build20260603.1608` 基线 commit:`a19e8d9` 关联文档: - [`../product-plan.md`](../product-plan.md) - [`../engineering-plan.md`](../engineering-plan.md) - [`../plan.md`](../plan.md) - [`../round-4/prd.md`](../round-4/prd.md) ## 1. 背景 Round 1 到 Round 4 已完成: - 模型 profile 基础设施。 - 中文/English 语言版本设置。 - English 默认 Moonshine。 - English 高级 Parakeet。 - `2.1.22 build20260603.1608` 已通过用户验收。 Round 5 进入中文高级模型阶段。中文默认模型仍是 SenseVoice;Qwen3-ASR 只作为用户主动选择下载和切换的高级模型。 ## 2. 本轮目标 Round 5 完成后: | 场景 | 期望结果 | |---|---| | 中文用户未安装 Qwen3-ASR | 继续默认使用 SenseVoice | | 中文用户主动选择 Qwen3-ASR | 未安装则下载,安装校验通过后切换 | | 中文用户从 Qwen3-ASR 切回 SenseVoice | 立即切回 SenseVoice,Qwen3-ASR 保留 | | English 用户 | 不自动下载 Qwen3-ASR,不影响 Moonshine/Parakeet | | Qwen3-ASR 下载失败 | 不破坏 SenseVoice、Moonshine、Parakeet、userdict、history | | Qwen3-ASR 初始化失败 | 原模型继续可用,配置不写坏 | 核心目标: - 升级 `sherpa-onnx-go*` 到支持 Qwen3-ASR 的版本。 - 新增 `qwen3-asr-0.6b` model profile。 - 新增 `qwen3_asr` backend builder。 - 中文模型选择 UI 显示 SenseVoice 和 Qwen3-ASR。 - 用户可以在 SenseVoice 和 Qwen3-ASR 之间手动切换。 - Qwen3-ASR 未安装时不能直接使用,必须下载并校验。 ## 3. 本轮非目标 明确不做: - 不把 Qwen3-ASR 作为中文默认模型。 - 不自动删除 SenseVoice。 - 不把粤语作为独立语言 UI 开放。 - 不做欧洲语言 UI。 - 不做 30+ 语言列表。 - 不做模型删除 UI,除非为保护或回退必须补充最小能力。 - 不做正式 Developer ID notarization。 - 不承诺 Qwen3-ASR 在低内存机器上的体验。 - 不做 Qwen3-ASR 多尺寸/多精度变体选择。 ## 4. 模型选择决策 本轮选择: ```text model id: qwen3-asr-0.6b actual package: sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25 backend kind: qwen3_asr language: zh-CN tier: advanced ``` 选择该模型的原因: - sherpa-onnx 官方文档提供 Qwen3-ASR 模型和运行参数。 - `sherpa-onnx-go* v1.13.2` 已暴露 `OfflineQwen3ASRModelConfig`。 - 下载包约 `878702423` bytes,可作为用户主动下载的高级模型。 - 支持中文、中英混输、粤语和更多语言的产品方向,适合作中文高级模型。 ## 5. Qwen3-ASR Profile 新增 profile: ```text ID: qwen3-asr-0.6b DisplayName: Qwen3-ASR BackendKind: qwen3_asr Tier: advanced SupportedLanguageIDs: zh-CN, zh-Hans, zh-Hant, yue, en RecommendedFor: zh-CN Description: 高质量中文和中英混输模型,适合更高准确率需求,体积较大。 ApproxSize: 约 838 MiB 下载包,解压后约 1.9 GiB InstallDirName: qwen3-asr-0.6b ProviderOrder: cpu NumThreads: 4 ``` 下载 URL: ```text https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-qwen3-asr-0.6B-int8-2026-03-25.tar.bz2 ``` Required files: | Role | Required file | |---|---| | `conv_frontend` | `conv_frontend.onnx` | | `encoder` | `encoder.int8.onnx` | | `decoder` | `decoder.int8.onnx` | | `tokenizer_merges` | `tokenizer/merges.txt` | | `tokenizer_vocab` | `tokenizer/vocab.json` | Resolved files 还需要提供: | Role | Value | |---|---| | `tokenizer` | `tokenizer` 目录路径 | ## 6. sherpa-onnx 配置 Round 5 必须升级到支持 Qwen3-ASR 的 Go 绑定版本。已验证 `v1.13.2` 有以下字段: ```go config.ModelConfig.Qwen3ASR.ConvFrontend = resolved.Files["conv_frontend"] config.ModelConfig.Qwen3ASR.Encoder = resolved.Files["encoder"] config.ModelConfig.Qwen3ASR.Decoder = resolved.Files["decoder"] config.ModelConfig.Qwen3ASR.Tokenizer = resolved.Files["tokenizer"] config.ModelConfig.Qwen3ASR.MaxTotalLen = 1024 config.ModelConfig.Qwen3ASR.MaxNewTokens = 256 config.ModelConfig.Qwen3ASR.Temperature = 0.0 config.ModelConfig.Qwen3ASR.TopP = 0.9 config.ModelConfig.Qwen3ASR.Seed = 0 config.ModelConfig.Provider = "cpu" config.DecodingMethod = "greedy_search" ``` 保留: ```go config.FeatConfig.SampleRate = 16000 config.FeatConfig.FeatureDim = 80 ``` ## 7. 用户故事 ### 7.1 中文用户升级到 Qwen3-ASR 前置: - 当前语言为中文。 - SenseVoice 已安装并可用。 - Qwen3-ASR 未安装。 操作: 1. 用户进入设置页。 2. 在模型区域看到: - SenseVoice - Qwen3-ASR 3. 用户点击 Qwen3-ASR。 4. UI 显示模型说明和下载体积。 5. 用户确认下载或直接点击下载。 6. 下载完成并校验通过后切换到 Qwen3-ASR。 期望: - `ModelSelectionMode=manual` - `SelectedModelID=qwen3-asr-0.6b` - Engine 显示 `Qwen3-ASR · CPU` - SenseVoice 模型目录仍保留。 ### 7.2 中文用户切回 SenseVoice 前置: - 当前使用 Qwen3-ASR。 - SenseVoice 已安装。 操作: 1. 用户在模型区域点击 SenseVoice。 2. App 重新加载 SenseVoice。 期望: - `SelectedModelID=sensevoice-zh` - `ModelSelectionMode=manual` - Engine 显示 `SenseVoice · CoreML (Apple Neural Engine)` 或 `SenseVoice · CPU` - Qwen3-ASR 模型目录仍保留。 ### 7.3 English 用户不受影响 前置: - 当前语言为 English。 期望: - 继续默认 Moonshine。 - 用户已选择 Parakeet 时继续保留 Parakeet。 - 不自动下载 Qwen3-ASR。 - 不因为 Qwen3-ASR 下载失败影响 English 识别。 ## 8. UI 要求 中文状态显示: ```text 识别模型 SenseVoice 轻量中文离线模型,默认推荐。 Qwen3-ASR 高质量中文和中英混输模型,体积较大。 ``` English 状态保持 Round 4: ```text Recognition Model Moonshine English Parakeet English ``` 模型卡片至少展示: - 模型名称。 - 一行用途说明。 - 安装状态。 - 当前使用标记。 - 下载/使用按钮。 - 下载大小。 - 下载进度。 ## 9. 验收标准 Round 5 通过条件: - `sherpa-onnx-go*` 升级后 SenseVoice、Moonshine、Parakeet 均可继续构建。 - `qwen3-asr-0.6b` profile 正确。 - Qwen3-ASR required files 和 tokenizer 目录校验正确。 - Qwen3-ASR 可下载、校验、加载。 - 中文用户可从 SenseVoice 切到 Qwen3-ASR。 - 中文用户可从 Qwen3-ASR 切回 SenseVoice。 - Qwen3-ASR 下载失败不破坏 SenseVoice、Moonshine、Parakeet、userdict、history。 - English Moonshine/Parakeet 路径回归通过。 - 断网状态下 Qwen3-ASR 中文识别可用。 - QA 报告记录版本、build、commit、DMG、日志和关键证据。 02-P-NBL/round-5/qa-test-plan.md
New file @@ -0,0 +1,143 @@ # Round 5 QA 测试计划:Qwen3-ASR 中文高级模型 状态:v0.1 QA 计划稿 所属子项目:`02-P-NBL` Round:Round 5 日期:2026-06-03 输入文档: - [`prd.md`](prd.md) - [`engineering-tasks.md`](engineering-tasks.md) ## 1. QA 目标 证明 Qwen3-ASR 作为中文高级模型可以被用户主动下载、安装、选择、识别,并且不会破坏 SenseVoice 默认路径、English Moonshine/Parakeet 路径和用户数据。 ## 2. 必测范围 - sherpa-onnx Go/macOS 依赖升级。 - 构建脚本新版 dylib 适配。 - `qwen3-asr-0.6b` profile。 - Qwen3-ASR required files 与 tokenizer 目录校验。 - Qwen3-ASR backend builder。 - 中文设置页模型选择 UI。 - Qwen3-ASR 下载、加载、断网识别。 - SenseVoice <-> Qwen3-ASR 切换。 - English Moonshine/Parakeet 回归。 - 下载失败保护。 - 用户数据保护。 ## 3. 不测范围 - Qwen3-ASR 删除 UI,除非研发本轮实现。 - 粤语独立语言 UI。 - 欧洲语言 UI。 - 正式 Developer ID notarization。 - Qwen3-ASR 多变体对比。 - 全量准确率基准测试。 ## 4. 测试矩阵 | ID | 场景 | 前置条件 | 期望结果 | |---|---|---|---| | R5-QA-001 | 依赖升级编译 | 使用 `sherpa-onnx-go* v1.13.2` | Go 编译通过 | | R5-QA-002 | 构建脚本 dylib | macOS local build | 正确复制新版 `libonnxruntime`,签名通过 | | R5-QA-003 | Qwen3 profile | 查询 `qwen3-asr-0.6b` | profile 存在,backend=`qwen3_asr` | | R5-QA-004 | required files 完整 | 所需文件存在 | 校验通过 | | R5-QA-005 | required files 缺失 | 删除任一 required file | 校验失败 | | R5-QA-006 | tokenizer 缺失 | 删除 `tokenizer/merges.txt` 或 `tokenizer/vocab.json` | 校验失败 | | R5-QA-007 | 中文默认模型 | auto/manual 中文 | current model 仍为 `sensevoice-zh` | | R5-QA-008 | 中文模型列表 | 中文设置页 | 显示 SenseVoice 和 Qwen3-ASR | | R5-QA-009 | Qwen3 未安装 | 点击 Qwen3-ASR | 提示下载,不能直接使用 | | R5-QA-010 | Qwen3 下载 | 联网 | 下载、解压、校验成功 | | R5-QA-011 | Qwen3 加载 | Qwen3 已安装 | engine ready 显示 `Qwen3-ASR · CPU` | | R5-QA-012 | Qwen3 中文识别 | Qwen3 ready | 中文可识别并写入历史 | | R5-QA-013 | Qwen3 中英混输 | Qwen3 ready | 中英混输可识别 | | R5-QA-014 | Qwen3 断网识别 | 断网 | 中文仍可识别 | | R5-QA-015 | Qwen3 切回 SenseVoice | 两模型均安装 | SenseVoice ready | | R5-QA-016 | SenseVoice 切回 Qwen3 | 两模型均安装 | Qwen3 ready | | R5-QA-017 | English 回归 | 切到 English | Moonshine/Parakeet 可用 | | R5-QA-018 | 下载失败保护 | 中断下载/坏包 | 不破坏 SenseVoice/Moonshine/Parakeet | | R5-QA-019 | 旧用户数据保护 | 有 userdict/history/config | 数据不丢 | | R5-QA-020 | 重启持久化 | 选择 Qwen3 后重启 | 仍为 Qwen3,除非用户切回 auto/default | ## 5. 自动化测试建议 后端: - `GetModelProfile("qwen3-asr-0.6b")` - `ValidateModelDir(qwen3-asr-0.6b)` - tokenizer 缺失校验 - `NewWithResolvedModel` backend dispatch - `SelectModel` - `DownloadModelByID` - 未安装模型选择失败 - 下载失败不破坏已有模型 - English/manual 模型不被中文高级模型污染 命令: ```bash cd privatevoice.src go test ./... -count=1 ``` 前端: ```bash cd privatevoice.src/frontend npm run build ``` 构建脚本: ```bash cd privatevoice.src ./scripts/build-local-macos.sh arm64 ``` ## 6. 手工 QA 步骤 ### 6.1 中文升级 Qwen3-ASR 1. 备份真实 App Support。 2. 中文状态启动 App。 3. 确认当前 engine 为 SenseVoice。 4. 在模型区域点击 Qwen3-ASR。 5. 确认 UI 显示下载大小和下载进度。 6. 下载完成后确认 engine 为 Qwen3-ASR。 7. 说中文短句,确认识别和 history。 ### 6.2 Qwen3-ASR 中英混输 1. Qwen3-ASR ready。 2. 说包含英文技术词的中文短句。 3. 检查识别结果和历史。 ### 6.3 断网 Qwen3-ASR 1. Qwen3-ASR ready。 2. 断开 Wi-Fi。 3. 说中文短句。 4. 确认识别成功。 5. 恢复网络。 ### 6.4 切回 SenseVoice 1. Qwen3-ASR ready。 2. 点击 SenseVoice。 3. 确认 engine 变为 SenseVoice。 4. 说中文短句。 ### 6.5 English 回归 1. 切到 English。 2. 确认 Moonshine/Parakeet 状态正常。 3. 分别测试 Moonshine 或 Parakeet 英文识别。 ## 7. QA PASS 标准 - R5-QA-001 到 R5-QA-020 全部通过,或失败项有明确非阻断说明。 - Qwen3-ASR 是可选高级模型,不改变中文默认 SenseVoice。 - English Moonshine/Parakeet 核心路径不退化。 - QA 报告记录版本、build、commit、测试包、日志和关键证据。 02-P-NBL/round-5/todo-list.md
New file @@ -0,0 +1,78 @@ # Round 5 Todo List:Qwen3-ASR 中文高级模型 状态:Round 5 启动中 所属子项目:`02-P-NBL` Round:Round 5 日期:2026-06-03 ## 1. 文档与启动 - [x] 创建 Round 5 worktree:`/Users/ar/Projects/VoiceSnap-2.1.1-Round5` - [x] 基于 Round 4 用户验收 commit `a19e8d9` 创建分支:`codex/round5-qwen3-asr-chinese` - [x] 读取项目规则和全局交付/QA/发布规则 - [x] 核准 Round 5 主题:Qwen3-ASR 中文高级模型 - [x] 核准 Qwen3-ASR 官方模型包 URL 和大小 - [x] 核准 `sherpa-onnx-go* v1.12.24` 不支持 Qwen3-ASR - [x] 核准 `sherpa-onnx-go* v1.13.2` 支持 Qwen3-ASR - [x] 创建 Round 5 README - [x] 创建 Round 5 PRD - [x] 创建 Round 5 研发任务拆解 - [x] 创建 Round 5 QA 测试计划 ## 2. 研发实现 - [ ] 升级 `sherpa-onnx-go*` 到 `v1.13.2` - [ ] 修改 macOS 构建脚本以适配新版 `libonnxruntime` - [ ] 新增 `Qwen3ASRModelID` - [ ] 新增 `BackendQwen3ASR` - [ ] 新增 `qwen3-asr-0.6b` profile - [ ] 新增 tokenizer 目录解析/校验 - [ ] 新增 Qwen3-ASR backend builder - [ ] 中文模型列表加入 Qwen3-ASR - [ ] 中文可从 SenseVoice 切到 Qwen3-ASR - [ ] 中文可从 Qwen3-ASR 切回 SenseVoice - [ ] Qwen3-ASR 下载失败不破坏已有模型 - [ ] English Moonshine/Parakeet 路径不退化 ## 3. 开发自查 - [ ] `go test ./... -count=1` - [ ] `npm run build` - [ ] `git diff --check` - [ ] 本地 macOS arm64 build - [ ] 研发自查报告 - [ ] 代码复审 - [ ] QA handoff ## 4. QA - [ ] 自动化/半自动 QA - [ ] Qwen3-ASR 真实下载和加载 - [ ] Qwen3-ASR 中文识别 - [ ] Qwen3-ASR 中英混输识别 - [ ] Qwen3-ASR 断网中文识别 - [ ] SenseVoice 回退 - [ ] English Moonshine/Parakeet 回归 - [ ] 下载失败保护 - [ ] 用户数据保护 - [ ] QA 报告 ## 5. 交付 - [ ] 测试包版本递增 - [ ] 生成 `.dmg` - [ ] 生成 `RELEASE_MANIFEST.md` - [ ] 验证 `.dmg` - [ ] tag - [ ] 用户验收候选包 - [ ] 用户验收 ## 6. 暂缓记录 以下事项不作为 Round 5 阻断项: - 左侧 Logo 区只显示 `PrivateVoice`,下方小字显示 `Private. Offline.`。 - App 正式名称从 `PrivateVoice Input` 改为 `PrivateVoice Dictation`。 - 粤语作为独立语言版本。 - 欧洲语言 UI。 - 模型删除 UI 的完整成熟化。