状态:v0.1 决议稿
所属子项目:02-P-NBL
Round:Round 6
日期:2026-07-02
决策来源:2026-07-02 架构讨论
目标交付版本:2.2.0
PrivateVoice 已从最初的中文 / English 双语言模型路线,扩展到多语种语言 profile 和模型 profile 架构。当前产品不再以 Mac App Store 为主要发布渠道,后续将以独立站下载和销售为主。
在粤语能力上,公开资料显示 sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09 是基于 2024 SenseVoice 多语种模型、使用 21.8k 小时粤语数据 fine-tune 的新版模型,支持中文、粤语、英文、日文、韩文。该模型仍使用 sherpa-onnx / ONNX 路线,适合优先接入现有 PrivateVoice 主版本。
资料依据:
本轮选择:
在当前 PrivateVoice 主版本中新增“粤语”语言选项。
用户选择粤语后,自动下载并激活 SenseVoice Yue 2025-09-09。
不先拆独立 App 包。
开发完成并通过验收后的 App 版本号记录为 2.2.0。
产品表达:
粤语 语言版本。Round 6 完成后:
| 场景 | 期望结果 |
|---|---|
| 用户打开语言设置 | 可以看到 粤语 选项,位置靠近 中文 |
| 用户选择粤语,模型未安装 | App 提示或引导下载粤语离线模型 |
| 用户确认下载 | 下载 SenseVoice Yue 2025-09-09,显示进度 |
| 下载和校验成功 | 自动切换并激活粤语识别 |
| 用户再次启动 App | 仍保持粤语语言和粤语模型,除非用户切换 |
| 用户切回中文 | 恢复中文默认模型,不删除粤语模型 |
| 下载失败 | 不破坏原语言、原模型和用户数据 |
| 初始化失败 | 原可用模型继续可用,并给出失败提示 |
核心目标:
yue 语言参数,不默认使用 auto。明确不做:
粤语语言版本(主功能)
├── 语言选择中新增“粤语”
├── 粤语默认模型自动下载
├── 粤语模型安装校验
├── 粤语模型自动激活
├── 粤语识别后处理
└── 下载/初始化失败保护
官网“粤语版”营销表达(非本轮 App 功能)
└── 同一个 App 的独立落地页或下载入口
Fun-ASR-Nano 高准确率模型(后续评估)
└── 仅当 SenseVoice Yue 真实 QA 不达标时进入 spike
作为粤语用户,我想在语言设置里直接选择 粤语,以便 App 使用适合粤语的离线识别模型,而不是让我在模型列表里猜哪个模型支持粤语。
前置:
流程:
输入 或 语言 设置页。粤语。期望:
粤语。SenseVoice Yue。作为已选择粤语的用户,我希望重启 App 后仍然是粤语输入,以便不用每次重新选择。
期望:
作为中粤双语用户,我想从粤语切回中文,以便使用普通中文识别模型。
期望:
作为用户,我希望粤语模型下载失败时,原来可用的输入能力不被破坏。
期望:
语言选择中新增 粤语,建议顺序:
自动 / 中文 / 粤语 / English / Français / Deutsch / Español / Italiano / Português / 日本語 / 한국어
如果后续已拆出独立 语言 页签,则 粤语 作为独立语言行出现,位置紧跟 中文。
推荐交互:
用户点击“粤语”
-> UI 显示:需要下载粤语离线模型,约 226 MB
-> 用户确认下载
-> 显示下载进度
-> 下载完成并校验
-> 自动激活 SenseVoice Yue
可接受的轻量版本:
用户点击“粤语”
-> App 直接开始下载
-> 语言按钮保持选中
-> 状态显示“正在下载粤语离线模型”
选择哪种交互由实现前最终确认。若无进一步产品确认,默认采用“首次下载前提示确认”,避免用户误触发 200MB+ 下载。
当当前语言为 粤语:
SenseVoice Yue。SenseVoice 作为备用,但必须明确不是粤语专项。Qwen3-ASR,除非后续验证其对粤语有明确优势。X-ASR zh-en 960ms,避免误导。示例文案:
SenseVoice Yue
粤语专项离线模型,基于 SenseVoice 并使用粤语数据增强。
状态文案:
未安装 · 约 226 MB
正在下载 42%
已安装
当前
如果用户首次启动时系统 locale 匹配不到粤语,不自动进入粤语。粤语应由用户手动选择。
如果未来官网“粤语版”下载入口需要默认粤语,可以通过首次启动配置或发行渠道参数实现,但不在本轮做独立包。
新增粤语语言 profile:
LanguageID: yue-HK 或 yue
DisplayName: Cantonese
NativeName: 粤语
UILocale: zh
DefaultModelID: sensevoice-yue-2025-09-09
SystemMatchers: yue, yue-HK, zh-HK 可考虑但不默认强行匹配
建议:
yue-HK,产品显示为 粤语。zh-HK 是否自动映射到粤语需谨慎。香港用户不一定都希望默认粤语;本轮可先不自动将 zh-HK 归为粤语,避免误判。新增模型 profile:
ModelID: sensevoice-yue-2025-09-09
DisplayName: SenseVoice Yue
BackendKind: sensevoice
Tier: default
SupportedLanguageIDs: yue-HK
RecommendedFor: yue-HK
LanguageParam: yue
Description: 粤语专项离线模型,基于 SenseVoice 并使用粤语数据增强。
ApproxSize: 约 226 MB 模型文件;下载包大小以实际 HTTP HEAD 为准
InstallDirName: sensevoice-yue-2025-09-09
下载 URL:
https://github.com/k2-fsa/sherpa-onnx/releases/download/asr-models/sherpa-onnx-sense-voice-zh-en-ja-ko-yue-int8-2025-09-09.tar.bz2
Required files:
model.int8.onnx
tokens.txt
粤语模型加载时:
sense_voice.model = model.int8.onnx
sense_voice.language = yue
sense_voice.use_itn = 按现有 SenseVoice 路线决定
tokens = tokens.txt
关键要求:
由于 2025-09-09 模型文档明确不支持 punctuation,本轮需要保守后处理:
切换粤语时:
后端单元测试:
NormalizeLanguageID("yue-HK")GetLanguageProfile("yue-HK")sensevoice-yue-2025-09-09GetModelProfile("sensevoice-yue-2025-09-09")model.int8.onnx 时校验失败tokens.txt 时校验失败前端构建:
cd privatevoice.src/frontend
npm run build
后端测试:
cd privatevoice.src
go test ./... -count=1
| ID | 场景 | 前置条件 | 期望结果 |
|---|---|---|---|
| R6-QA-001 | 语言列表显示 | 打开输入/语言设置 | 粤语 出现在 中文 后 |
| R6-QA-002 | 选择粤语未安装 | 模型未安装 | 显示下载提示或开始下载 |
| R6-QA-003 | 下载进度 | 联网下载 | 进度可见,不能重复触发 |
| R6-QA-004 | 下载完成 | 下载成功 | 模型校验通过并自动激活 |
| R6-QA-005 | 粤语短句识别 | SenseVoice Yue ready | 粤语短句可识别 |
| R6-QA-006 | 粤英混输 | SenseVoice Yue ready | 英文产品名/技术词不被明显破坏 |
| R6-QA-007 | 普通话混入 | SenseVoice Yue ready | 普通话片段不导致崩溃或空结果 |
| R6-QA-008 | 切回中文 | 两模型均安装 | 中文默认模型可用 |
| R6-QA-009 | 再切回粤语 | 粤语模型已安装 | 不重复下载,直接加载 |
| R6-QA-010 | 下载失败 | 断网/中断下载 | 原模型可继续使用 |
| R6-QA-011 | 坏包/缺文件 | 删除 required file | App 显示未安装或需修复 |
| R6-QA-012 | 重启持久化 | 已选择粤语 | 重启后仍为粤语 |
| R6-QA-013 | 旧用户配置 | 旧配置无 yue | 正常回退,不崩溃 |
| R6-QA-014 | English 回归 | 切到 English | Moonshine/Parakeet 不受影响 |
| R6-QA-015 | 中文回归 | 切到中文 | SenseVoice/Qwen3-ASR 不受影响 |
每类至少 10 条,优先使用真实香港粤语用户录音:
Round 6 通过条件:
粤语,位置和文案符合要求。SenseVoice Yue。CHANGELOG.md、release manifest 和安装包命名均记录为 2.2.0,build 编号继续使用 YYYYMMDD.HHMM。| 风险 | 说明 | 处理 |
|---|---|---|
| 模型许可 | 需要确认模型权重商业使用、归属和 attribution 要求 | 发布前做 license 审核 |
| 标点能力 | 2025-09-09 文档写明不支持 punctuation | 做保守后处理,不承诺复杂标点 |
| 自动匹配 zh-HK | zh-HK 用户不一定都想用粤语 |
本轮先手动选择,不强制自动映射 |
| 下载体验 | 200MB+ 模型在弱网下可能失败 | 使用现有断点/重试能力,QA 覆盖弱网 |
| 准确率 | 粤语真实口音、噪声、领域词可能不足 | 建立真实语料 QA 和失败样本池 |
| 独立营销名 | “粤语版”可能被用户理解为独立 App | 官网文案说明为同一 App 的粤语语言版本 |
如果 SenseVoice Yue 真实 QA 不达标,再进入技术 spike:
Fun-ASR-Nano 2512 GGUF / llama.cpp runtime
评估维度:
只有 Fun-ASR-Nano 明显优于 SenseVoice Yue,才考虑作为“高准确率模型”或“Pro 模型”进入产品主链路。