Ariver
2026-06-03 50263bd08a9979bb18258a2314ad223899e96f0d
Add Round 5 Qwen3-ASR planning docs
5 files added
855 ■■■■■ changed files
02-P-NBL/round-5/README.md 114 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-5/engineering-tasks.md 266 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-5/prd.md 254 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-5/qa-test-plan.md 143 ●●●●● patch | view | raw | blame | history
02-P-NBL/round-5/todo-list.md 78 ●●●●● 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 的完整成熟化。