状态:v0.1 研发拆解稿
所属子项目:02-P-NBL
Round:Round 3
日期:2026-06-03
输入文档:
Round 3 的研发目标是:
English effective language 默认使用 moonshine-en,并通过 sherpa-onnx Moonshine v1 完成英文离线识别。
本轮必须保持中文 SenseVoice 路径不退化。
moonshine-en model profile。BackendMoonshine backend kind。DefaultModelID=moonshine-en。T0 代码现状确认
T1 Moonshine profile
T2 默认模型解析器
T3 Engine factory/backend builder
T4 Onboarding 下载 current model
T5 语言切换后的模型同步
T6 前端文案与状态展示
T7 单元测试
T8 开发自查
T9 QA handoff
负责人:后端 + 前端
类型:准备任务
重点文件:
privatevoice.src/internal/model/profile.goprivatevoice.src/internal/model/registry.goprivatevoice.src/internal/model/downloader.goprivatevoice.src/internal/model/install_state.goprivatevoice.src/internal/config/config.goprivatevoice.src/internal/language/resolver.goprivatevoice.src/internal/engine/engine.goprivatevoice.src/internal/engine/engine_darwin.goprivatevoice.src/services/engine_service.goprivatevoice.src/services/config_service.goprivatevoice.src/frontend/src/components/onboarding/OnboardingView.svelteprivatevoice.src/frontend/src/App.svelte完成标准:
负责人:后端
建议文件:
privatevoice.src/internal/model/profile.goprivatevoice.src/internal/model/registry.goprivatevoice.src/internal/model/model_test.go工作内容:
MoonshineModelID = "moonshine-en"BackendMoonshine = "moonshine"moonshine-en profile。DefaultModelID 改为 moonshine-en。preprocess.onnxencode.int8.onnxuncached_decode.int8.onnxcached_decode.int8.onnxtokens.txtProviderOrder 使用 cpu。DownloadURLs 使用官方 base-en-int8 URL。完成标准:
GetModelProfile("moonshine-en") 可返回完整 profile。ListModelProfiles() 顺序稳定。NormalizeModelID("moonshine-en") 返回自身。负责人:后端
建议文件:
privatevoice.src/internal/config/config.goprivatevoice.src/internal/language/resolver.goprivatevoice.src/internal/model/registry.goprivatevoice.src/internal/model/selection.goprivatevoice.src/internal/model/selection_test.go工作内容:
ModelSelectionMode stringautomanualauto。ResolveCurrentModel(cfg, detector)
DefaultModelID。SelectedModelID。完成标准:
moonshine-en。sensevoice-zh。ModelSelectionMode 时不会锁死在 SenseVoice。负责人:后端
建议文件:
privatevoice.src/internal/engine/engine.goprivatevoice.src/internal/engine/engine_darwin.goprivatevoice.src/internal/engine/engine_test.go工作内容:
NewWithResolvedModel 不再只允许 BackendSenseVoice。resolved.BackendKind 分发到:buildSenseVoiceConfigbuildMoonshineConfigconfig.ModelConfig.Moonshine.Preprocessor = resolved.Files["preprocessor"]
config.ModelConfig.Moonshine.Encoder = resolved.Files["encoder"]
config.ModelConfig.Moonshine.UncachedDecoder = resolved.Files["uncached_decoder"]
config.ModelConfig.Moonshine.CachedDecoder = resolved.Files["cached_decoder"]
config.ModelConfig.Tokens = resolved.Files["tokens"]
config.ModelConfig.Provider = "cpu"
HardwareInfo() 对 Moonshine 显示可区分信息,例如 Moonshine English · CPU。完成标准:
负责人:后端 + 前端
建议文件:
privatevoice.src/services/engine_service.goprivatevoice.src/frontend/src/components/onboarding/OnboardingView.svelteprivatevoice.src/frontend/src/App.svelte工作内容:
EngineService.GetCurrentModelStatus() 或等价 API。EngineService.DownloadCurrentModel()。ModelExists() 检查 current model。DownloadCurrentModel(),不再传 config URL。model:download-progress。完成标准:
负责人:后端 + 前端
建议文件:
privatevoice.src/services/config_service.goprivatevoice.src/services/engine_service.goprivatevoice.src/frontend/src/components/settings/GeneralPage.svelteprivatevoice.src/frontend/src/App.svelte工作内容:
SetLanguageAuto() / SetLanguageManual() 后,前端刷新 current model 状态。完成标准:
负责人:前端
建议文件:
privatevoice.src/frontend/src/lib/i18n/zh.jsonprivatevoice.src/frontend/src/lib/i18n/en.jsonprivatevoice.src/frontend/src/components/onboarding/OnboardingView.svelte工作内容:
完成标准:
负责人:后端 + 前端
后端至少覆盖:
moonshine-en。sensevoice-zh。ModelSelectionMode fallback。前端至少覆盖:
建议命令:
cd privatevoice.src
go test ./...
cd privatevoice.src/frontend
npm run build
负责人:研发
必须执行:
cd privatevoice.src/frontend
npm run build
cd privatevoice.src
go test ./... -count=1
git diff --check
自查结论必须记录:
负责人:研发 + QA
QA 移交必须包含: