edit | blame | history | raw

VoiceSnap 多语言与多模型 Round 分期计划

状态:研发分期建议稿
日期:2026-06-02
子项目目录:02-P-NBL
关联文档:

  • product-plan.md
  • engineering-plan.md
  • x-asr-realtime-insertion-report.md

1. 分期原则

这次改造不建议一次性做完。原因:

  • 当前代码是单 SenseVoice 模型路径,直接上四模型会扩大风险。
  • Moonshine、Parakeet、Qwen3-ASR 的模型文件结构不同。
  • 下载、切换、删除、回滚都涉及用户本地大文件,必须分阶段验证。
  • 未来要支持 30+ 语言,第一版就要避免硬编码。

建议拆成 6 个 Round。

核心顺序:

Round 1:先抽象
Round 2:再做语言
Round 3:接英文默认 Moonshine
Round 4:接英文高级 Parakeet
Round 5:接中文高级 Qwen3-ASR
Round 6:完善模型管理和未来欧洲语言扩展
Round 7:X-ASR 流式中英混输候选模型评估

第一期可交付版本建议至少做到:

Round 1 + Round 2 + Round 3

这样可以真正形成一个英文默认 Moonshine 的可用分支。

2. Round 总览

Round 目标 用户可见变化 风险
Round 1 模型 profile 基础设施 基本无变化
Round 2 语言检测与语言设置 可选择中文/English
Round 3 Moonshine English 默认模型 英文系统默认 Moonshine 中高
Round 4 Parakeet 高级模型 英文用户可下载 Parakeet
Round 5 Qwen3-ASR 高级模型 中文用户可下载 Qwen3-ASR
Round 6 模型管理成熟化 + 欧洲语言准备 删除、回滚、未来多语言
Round 7 X-ASR 流式候选模型评估 未来可能支持实时边说边出字和中英混输 中高

3. Round 1:模型 Profile 基础设施

3.1 目标

不改变用户体验,先把现有 SenseVoice 纳入多模型架构。

当前:

写死 SenseVoice

目标:

ModelProfile -> EngineFactory -> SenseVoice

3.2 范围

新增:

  • ModelProfile
  • ModelRegistry
  • LanguageProfile
  • LanguageRegistry
  • ModelInstallState
  • sensevoice-zh profile
  • EngineFactory

改造:

  • 把现有 ModelPath()ModelDir()ModelExists() 改成基于 profile。
  • 保持旧 models/sensevoice 兼容。
  • 现有 SenseVoice 仍然能加载。

3.3 不做

  • 不接 Moonshine。
  • 不接 Parakeet。
  • 不接 Qwen3-ASR。
  • 不做语言 UI。
  • 不做模型选择 UI。

3.4 验收标准

  • 中文现有功能不退化。
  • SenseVoice 可正常下载、加载、识别。
  • 旧模型目录兼容。
  • 旧配置兼容。
  • 单元测试覆盖 profile required files 校验。

3.5 预估工作量

中等。
建议 3-5 个研发日。

4. Round 2:语言检测与语言版本设置

4.1 目标

建立语言版本概念,首次启动根据系统语言选择中文或 English。

4.2 范围

新增配置:

{
  "LanguageMode": "auto",
  "LanguageID": "zh-CN",
  "SelectedModelID": "sensevoice-zh"
}

支持:

  • 自动检测系统语言。
  • 中文系统默认 zh-CN
  • English 系统默认 en.
  • 其他系统语言暂时默认 en
  • 用户可手动选择中文或 English。
  • 手动选择后保存。

设置页新增:

语言版本
自动(跟随系统)
中文
English

4.3 不做

  • 不做 30 种语言列表。
  • 不做粤语。
  • 不做法语/德语/西语等欧洲语言。
  • 不自动切换模型删除。

4.4 验收标准

  • 中文系统首次启动为中文 + SenseVoice。
  • English 系统首次启动为 English。
  • 用户手动切换语言后配置持久化。
  • 语言切换不破坏用户词库、历史、热键设置。

4.5 预估工作量

中等。
建议 3-5 个研发日。

5. Round 3:Moonshine English 默认模型

5.1 目标

让 English 语言版本真正可用,并默认使用 Moonshine English。

5.2 范围

新增:

  • moonshine-en profile。
  • Moonshine required files 校验。
  • Moonshine 下载、解压、安装。
  • Moonshine config builder。
  • English UI 文案。

模型路径:

models/moonshine-en/

预期文件:

encoder_model.ort
decoder_model_merged.ort
tokens.txt

sherpa config:

config.ModelConfig.Moonshine.Encoder = encoderPath
config.ModelConfig.Moonshine.MergedDecoder = mergedDecoderPath
config.ModelConfig.Tokens = tokensPath

5.3 用户体验

English 系统首次启动:

English UI
Moonshine English 默认模型

中文系统不受影响。

5.4 不做

  • 不接 Moonshine Voice framework。
  • 不做实时 partial transcript。
  • 不做 Parakeet。
  • 不做 Qwen3-ASR。

5.5 验收标准

  • English 系统默认模型为 Moonshine English。
  • Moonshine 可下载、校验、加载。
  • 英文语音可识别。
  • 用户词库、历史、上屏逻辑复用。
  • Moonshine 初始化失败时不破坏 SenseVoice。

5.6 预估工作量

中高。
建议 5-8 个研发日。

6. Round 4:Parakeet 英文高级模型

6.1 目标

让 English 用户可以主动下载并切换到 Parakeet。

6.2 范围

新增:

  • parakeet-en profile。
  • nemo_transducer backend builder。
  • Parakeet required files 校验。
  • Parakeet 下载、安装、使用、删除。

模型路径:

models/parakeet-en/

预期文件:

encoder.int8.onnx
decoder.int8.onnx
joiner.int8.onnx
tokens.txt

sherpa config:

config.ModelConfig.Transducer.Encoder = encoderPath
config.ModelConfig.Transducer.Decoder = decoderPath
config.ModelConfig.Transducer.Joiner = joinerPath
config.ModelConfig.Tokens = tokensPath
config.ModelConfig.ModelType = "nemo_transducer"

6.3 用户体验

English 识别模型页:

Moonshine English
轻量英文模型,推荐。

Parakeet
高质量英文/欧洲语言模型,体积较大。

用户点击 Parakeet:

下载 -> 安装 -> 使用

Moonshine 保留。

6.4 不做

  • 不把 Parakeet 作为 English 默认模型。
  • 不开放法语/德语/西语等欧洲语言 UI。
  • 不自动删除 Moonshine。

6.5 验收标准

  • Parakeet 未安装时不能直接使用。
  • Parakeet 可下载、校验、加载。
  • Moonshine 和 Parakeet 可切换。
  • 删除 Parakeet 后可回到 Moonshine。
  • 当前正在使用 Parakeet 时不能直接删除 Parakeet。

6.6 预估工作量

中等。
建议 4-7 个研发日。

7. Round 5:Qwen3-ASR 中文高级模型

7.1 目标

让中文用户可以主动下载并切换到 Qwen3-ASR。

7.2 范围

新增:

  • qwen3-asr-0.6b profile。
  • qwen3_asr backend builder。
  • Qwen3-ASR required files 校验。
  • tokenizer 目录校验。
  • Qwen3-ASR 下载、安装、使用、删除。

模型路径:

models/qwen3-asr-0.6b/

预期文件:

conv_frontend.onnx
encoder.int8.onnx
decoder.int8.onnx
tokenizer/merges.txt
tokenizer/vocab.json

sherpa config:

config.ModelConfig.Qwen3ASR.ConvFrontend = convFrontendPath
config.ModelConfig.Qwen3ASR.Encoder = encoderPath
config.ModelConfig.Qwen3ASR.Decoder = decoderPath
config.ModelConfig.Qwen3ASR.Tokenizer = tokenizerDir

7.3 用户体验

中文识别模型页:

SenseVoice
轻量中文模型,推荐。

Qwen3-ASR
高质量多语言大模型,适合中文、中英混输、粤语和更多语言。体积较大。

SenseVoice 保留。

7.4 不做

  • 不把 Qwen3-ASR 作为中文默认模型。
  • 不自动删除 SenseVoice。
  • 不把粤语作为独立 UI 语言开放。

7.5 验收标准

  • Qwen3-ASR 未安装时不能直接使用。
  • Qwen3-ASR 可下载、校验、加载。
  • SenseVoice 和 Qwen3-ASR 可切换。
  • 删除 Qwen3-ASR 后可回到 SenseVoice。
  • 当前正在使用 Qwen3-ASR 时不能直接删除 Qwen3-ASR。

7.6 预估工作量

高。
建议 6-10 个研发日。

8. Round 6:模型管理成熟化与欧洲语言准备

8.1 目标

完善模型管理体验,并为未来欧洲语言版本做准备。

8.2 范围

模型管理:

  • 当前模型删除保护。
  • 删除确认。
  • 模型磁盘占用展示。
  • 模型损坏检测。
  • 重新下载。
  • 切换失败回滚。
  • 下载失败不破坏旧模型。
  • 解压失败不破坏旧模型。

未来语言准备:

  • 扩展 LanguageProfile 支持更多语言。
  • 为 Parakeet 标注欧洲语言支持范围。
  • 预留语言列表 UI。
  • 明确 Parakeet 可作为法语、德语、西班牙语、意大利语、葡萄牙语、俄语、乌克兰语等语言的默认候选模型。

8.3 不做

  • 不要求一次性上线 30 种语言。
  • 不要求上线欧洲语言 UI。
  • 不做模型市场。
  • 不做自动语言检测切换模型。

8.4 验收标准

  • 模型删除有确认。
  • 当前模型不能删除。
  • 非当前模型可删除。
  • 删除不影响用户词库、历史、配置。
  • 模型损坏时可重新下载。
  • 切换失败时原模型继续可用。
  • 语言和模型配置没有硬编码阻碍未来扩展。

8.5 预估工作量

中等。
建议 4-8 个研发日。

9. Round 7:X-ASR 流式中英混输候选模型评估

9.1 目标

评估 Gilgamesh-J/X-ASRX-ASR-zh-en 是否值得纳入未来模型选项,重点不是“再加一个模型”,而是判断它能否带来当前模型没有覆盖好的实时输入价值。

后续如要推进“真实实时上屏”,应先阅读独立技术报告:x-asr-realtime-insertion-report.md。该报告记录了只对 X-ASR 生效的隔离策略、实时写入当前输入框的技术路径、目标 App 行为差异风险、fallback 设计和 QA 矩阵。

9.2 产品假设

X-ASR 的价值主要来自:

  • 中文/英文双语和中英混输。
  • true streaming decoding,可支撑未来“边说边出字”。
  • 基于 sherpa-onnx,和当前模型技术栈方向一致。
  • 相比 Qwen3-ASR,可能牺牲一部分离线准确率,换取更小模型规模和更强低延迟交互能力。

9.3 范围

评估项:

  • 下载并整理 X-ASR-zh-en 单个 chunk 变体。
  • 初始只选一个 chunk,不带四个 chunk 全量包。
  • 优先测试 480 ms960 ms:前者偏低延迟,后者偏准确率。
  • 新增实验性 x-asr-zh-en profile,但默认隐藏在普通用户 UI 之外。
  • 验证 sherpa-onnx Go 绑定是否支持当前所需 streaming API。
  • 如当前离线 Engine 接口不适合,先做独立 streaming prototype,不直接接入正式录音上屏链路。

9.4 不做

  • 不替换 SenseVoice 中文默认模型。
  • 不替换 Qwen3-ASR 中文高级模型。
  • 不替换 Moonshine/Parakeet English 路线。
  • 不把四个 chunk 一起发布。
  • 不在技术报告和合规材料补齐前作为正式推荐模型。

9.5 验收标准

  • 明确 X-ASR 与 SenseVoice、Qwen3-ASR、Moonshine、Parakeet 的定位差异。
  • 至少完成 Apple Silicon 真机延迟、内存、发热、识别质量 smoke test。
  • 覆盖中文、中英混输、英文技术词、长句口述和噪声样本。
  • 输出是否进入产品路线的决策:放弃 / 保留研究 / 实验入口 / 正式候选
  • 如果进入产品路线,补齐模型 profile、下载、校验、删除、失败回退和 license notice 方案。

9.6 预估工作量

中高。
建议 3-5 个研发日做技术 spike;如果进入正式产品化,再单独拆 Round。

10. 推荐发布组合

10.1 内部技术版本

Round 1

目的:

  • 验证 profile 抽象不会破坏现有 SenseVoice。

10.2 English MVP

Round 1 + Round 2 + Round 3

目的:

  • 英文系统可自动进入 English 体验。
  • 默认 Moonshine English。
  • 形成英文用户可用版本。

10.3 English Pro

Round 4

目的:

  • 为英文用户提供 Parakeet 高级模型。

10.4 Chinese Pro

Round 5

目的:

  • 为中文用户提供 Qwen3-ASR 高级模型。

10.5 多语言准备版

Round 6

目的:

  • 稳定模型管理。
  • 为未来欧洲语言版本做技术准备。

10.6 实时输入探索版

Round 7

目的:

  • 验证 X-ASR 是否能支撑实时中英混输输入体验。
  • 在不影响当前正式模型路线的前提下,为未来“边说边出字”做技术判断。

11. 关键依赖

11.1 模型包确认

每个模型需要确认:

  • 下载 URL。
  • 压缩包格式。
  • 解压后目录结构。
  • required files。
  • 体积。
  • macOS 可运行性。
  • sherpa-onnx 当前 Go 绑定支持情况。

11.2 sherpa-onnx 版本

当前项目使用 v1.12.24
Qwen3-ASR 在较新版本中支持更完整。建议在 Round 1 或 Round 5 前评估是否升级到较新 sherpa-onnx-go

11.3 UI 文案

English 分支需要完整英文 UI 文案,不只是模型页面。

11.4 回归测试音频

需要准备:

  • 中文短句。
  • 中英混输。
  • 英文短句。
  • 英文技术词。
  • Parakeet 支持语言样例,后续使用。
  • X-ASR 中英混输和实时 partial 输出样例,后续使用。

11.5 后续 UI 与品牌命名调整

以下需求已进入 v2.1.24 build 20260603.1934 品牌命名调整:

  • 左侧 Logo 区只显示 PrivateVoice,下方小字显示 Private. Offline.
  • App 正式名称从 PrivateVoice Input 改为 PrivateVoice Dictation
  • 本轮不迁移用户数据目录,继续使用既有 Application Support/PrivateVoice Input,避免影响历史记录、模型文件和系统权限。

12. 总体建议

最稳的执行策略:

先做 Round 1
确认现有中文产品不退化
再做 Round 2 + Round 3
发布 English MVP
再做 Round 4 和 Round 5
最后做 Round 6
单独做 Round 7 X-ASR 技术 spike

不要在 Round 1 里同时接 Moonshine、Parakeet、Qwen3-ASR。
不要在 English MVP 之前先做 30 种语言 UI。
不要把 Parakeet 和 Qwen3-ASR 作为默认模型自动下载。
不要把 X-ASR 混入当前正式模型发布链路;先证明实时输入价值。