edit | blame | history | raw

Round 5 研发任务拆解:Qwen3-ASR 中文高级模型

状态:v0.1 研发拆解稿
所属子项目:02-P-NBL
Round:Round 5
日期:2026-06-03
输入文档:

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. 推荐任务顺序

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.modgo.sum

完成标准:

  • go test ./... -count=1 可通过。
  • SenseVoice/Moonshine/Parakeet 现有 builder 编译通过。
  • 没有 API 字段名不兼容。

T2:构建脚本 dylib 适配

工作内容:

  • 当前脚本写死:
libonnxruntime.1.23.2.dylib
  • 升级后 macOS module 提供:
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。
  • DefaultLanguageIDUpgradeModelIDs 设置为 []string{Qwen3ASRModelID}
  • 配置 required files。

完成标准:

  • GetModelProfile("qwen3-asr-0.6b") 可返回完整 profile。
  • 中文模型列表包含 SenseVoice 和 Qwen3-ASR。
  • 中文默认仍是 SenseVoice。

T4:tokenizer 目录校验增强

工作内容:

  • 现有 required file rule 已支持 AllOf 相对路径。
  • 需要确保 tokenizer/merges.txttokenizer/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 分支。
  • 设置:
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:测试

后端:

cd privatevoice.src
go test ./... -count=1

前端:

cd privatevoice.src/frontend
npm run build

检查:

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。