# 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。 核心顺序: ```text Round 1:先抽象 Round 2:再做语言 Round 3:接英文默认 Moonshine Round 4:接英文高级 Parakeet Round 5:接中文高级 Qwen3-ASR Round 6:完善模型管理和未来欧洲语言扩展 Round 7:X-ASR 流式中英混输候选模型评估 ``` 第一期可交付版本建议至少做到: ```text 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 纳入多模型架构。 当前: ```text 写死 SenseVoice ``` 目标: ```text 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 范围 新增配置: ```json { "LanguageMode": "auto", "LanguageID": "zh-CN", "SelectedModelID": "sensevoice-zh" } ``` 支持: - 自动检测系统语言。 - 中文系统默认 `zh-CN`。 - English 系统默认 `en`. - 其他系统语言暂时默认 `en`。 - 用户可手动选择中文或 English。 - 手动选择后保存。 设置页新增: ```text 语言版本 自动(跟随系统) 中文 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 文案。 模型路径: ```text models/moonshine-en/ ``` 预期文件: ```text encoder_model.ort decoder_model_merged.ort tokens.txt ``` sherpa config: ```go config.ModelConfig.Moonshine.Encoder = encoderPath config.ModelConfig.Moonshine.MergedDecoder = mergedDecoderPath config.ModelConfig.Tokens = tokensPath ``` ### 5.3 用户体验 English 系统首次启动: ```text 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 下载、安装、使用、删除。 模型路径: ```text models/parakeet-en/ ``` 预期文件: ```text encoder.int8.onnx decoder.int8.onnx joiner.int8.onnx tokens.txt ``` sherpa config: ```go 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 识别模型页: ```text Moonshine English 轻量英文模型,推荐。 Parakeet 高质量英文/欧洲语言模型,体积较大。 ``` 用户点击 Parakeet: ```text 下载 -> 安装 -> 使用 ``` 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 下载、安装、使用、删除。 模型路径: ```text models/qwen3-asr-0.6b/ ``` 预期文件: ```text conv_frontend.onnx encoder.int8.onnx decoder.int8.onnx tokenizer/merges.txt tokenizer/vocab.json ``` sherpa config: ```go config.ModelConfig.Qwen3ASR.ConvFrontend = convFrontendPath config.ModelConfig.Qwen3ASR.Encoder = encoderPath config.ModelConfig.Qwen3ASR.Decoder = decoderPath config.ModelConfig.Qwen3ASR.Tokenizer = tokenizerDir ``` ### 7.3 用户体验 中文识别模型页: ```text 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-ASR` 的 `X-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 ms` 或 `960 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 内部技术版本 ```text Round 1 ``` 目的: - 验证 profile 抽象不会破坏现有 SenseVoice。 ### 10.2 English MVP ```text Round 1 + Round 2 + Round 3 ``` 目的: - 英文系统可自动进入 English 体验。 - 默认 Moonshine English。 - 形成英文用户可用版本。 ### 10.3 English Pro ```text Round 4 ``` 目的: - 为英文用户提供 Parakeet 高级模型。 ### 10.4 Chinese Pro ```text Round 5 ``` 目的: - 为中文用户提供 Qwen3-ASR 高级模型。 ### 10.5 多语言准备版 ```text Round 6 ``` 目的: - 稳定模型管理。 - 为未来欧洲语言版本做技术准备。 ### 10.6 实时输入探索版 ```text 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. 总体建议 最稳的执行策略: ```text 先做 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 混入当前正式模型发布链路;先证明实时输入价值。