前言¶
DeepSeek Harness(DSH)桌面端支持语音输入,内置 SenseVoice 可在本地转写,但对俄语支持不足。若你在 DSH 里用俄语口述需求、注释或混合俄英技术术语,内置路径往往识别不准或无法使用。社区插件 dsh-voice-ru(维护者 ripls56)在 голосовой ввод 侧增加第二个本地 STT 提供商,引擎为 NVIDIA Nemotron 3.5 ASR Streaming 0.6B(GGUF),通过 transcribe.cpp 原生运行时推理;模型与运行时不在仓库内,首次使用时下载并以 sha256 校验。分类上属于 模型推理。DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-voice-ru 是 DSH 的本地语音转文字插件:注册 id 为 nemotron-local 的提供商(默认 providerId),接收 voice-input 客户端送来的 16 kHz 单声道 PCM16 WAV,在本地完成转写。除俄语外,README 英文说明还支持另外 28 种语言区域;仓库本身只保留三个用于测试的合成 WAV,不含模型权重与原生库二进制。
环境与磁盘¶
- DSH 桌面版已开启语音输入;平台支持 Windows x64、Linux x64/arm64、macOS arm64/x64。
- 约 1 GB 空闲磁盘(模型约 751 MB + 运行时约 2–21 MB + 缓存)。
- 首次 准备阶段需要联网:运行时从 GitHub release 拉取,模型从 Hugging Face 拉取;之后可离线使用。
Node 依赖 koffi(^2.16.3);插件要求 Node >=20,peer 依赖 @deepseek-ai/cordis ^4.0.1。当前 package 版本 0.2.2,许可证 MIT。
安装与启用¶
下面介绍三种 README 记载的安装方式;插件在 当前 DSH 进程权限 下运行,安装前请自行查看 GitHub 源码 与许可证。
方式一:DSH 配置文件命令¶
在目标 profile 下执行(命令来自官方 README,<профиль> 替换为你的 profile 名):
dsh plugin --profile <профиль> add github:ripls56/dsh-voice-ru
若首次出现 ERR_PNPM_IGNORED_BUILDS: koffi@2.16.3,DSH 会在 <профиль>/pnpm-workspace.yaml 写入 allowBuilds 占位;将 koffi: false 后重试。README 说明 koffi 自带预编译二进制,无需跑构建脚本,在该环境下也不应设为 true(cnoke 构建会失败)。
dsh plugin add 只装依赖,不会自动写入 bundles。需在 <профиль>/package.json 的 dsh.profile.bundles 中加入 dsh-voice-ru,例如:
"dsh": { "profile": { "bundles": ["...", "dsh-voice-ru"] } }
重启 DSH。不启动应用时可检查:dsh <профиль> --dump-config | findstr voice-ru,应出现 - id: voice-ru。
方式二:GUI¶
Settings → Plugins → 安装 bundle,规格 github:ripls56/dsh-voice-ru。若询问 koffi 的 build 脚本,可不授权。安装后重启 DSH。
方式三:本地 link(开发者)¶
在插件目录 npm install 后,于 profile 的 package.json 增加 dependencies 的 link: 路径及 bundles 中的 dsh-voice-ru,重启 DSH。插件自带 cordis.patch.yml,无需手改 - id: voice-ru。
选用提供商¶
经过上面的步骤后,在 Settings → Voice input 选择提供商 Nemotron 3.5 ASR 0.6B (Q8_0 GGUF),语言建议 Авто(Auto)。
首次准备与缓存¶
在 Settings → Voice input 点准备,或第一次录音触发 prepare() 时,插件会下载并校验:
| 内容 | 来源 | 大小 |
|---|---|---|
| transcribe.cpp v0.3.1(按平台) | GitHub release | 1.8–21 MB |
nemotron-3.5-asr-streaming-0.6b-Q8_0.gguf |
Hugging Face | 751 MB |
缓存目录:Windows 为 %LOCALAPPDATA%\dsh-voice-ru,Linux 等为 ~/.local/share/dsh-voice-ru(可通过配置 dataRoot 覆盖)。部分下载的文件在校验通过前不会进入缓存;网络中断不会污染已验证文件。进度在 Voice input 设置页可见。README 说明无断点续传:751 MB 下载中断会重新开始,未校验的临时文件会被清理。
语言模式:俄语、英语与混说¶
- Авто:模型自动判语种;俄语正常识别,句中英词倾向保留拉丁字母。README 默认推荐此项。
- ru:强制俄语提示,纯俄语略稳,但英文词可能被写成西里尔字母。
README 在合成语音上对比了混说 tech 术语:auto 更易保留 main branch、Pull Request、git push 等拉丁写法;ru 模式下部分术语会西里尔化。模型不支持 VOCABULARY / CONTEXT_PROMPT,无法通过词表提示专有名词;连读的 config.json 等在 auto 下仍可能变成西里尔近似读法。
工作原理与性能¶
数据路径(README 示意):
voice-input 客户端 (WAV 16 kHz mono PCM16)
│ speech/transcribe
▼
speechToText (DSH) → nemotron-local(本插件)
│ subprocess + bearer token
▼
lib/worker.js: koffi → transcribe_run → 文本
主要模块:lib/index.js(注册、prepare、下载、队列、空闲 5 分钟卸载 worker)、lib/runtime.js(平台 runtime URL/sha256、解压 .tar.gz)、lib/download.js(原子下载与校验)、lib/worker.js(FFI + HTTP /transcribe?language=…)、lib/locales.js(如 ru → ru-RU)。
README 给出的参考速度(RTX 3060 Vulkan):约 8.6 s 音频 ~0.5 s(RTF 约 15–18×);纯 CPU 约 1.3 s(RTF 约 6×)。模型在多次录音之间常驻内存,直到 idleTimeoutMs(默认 300000 ms)触发卸载。
可选配置¶
在插件配置项中(均可省略):
| 键 | 默认 | 含义 |
|---|---|---|
providerId |
nemotron-local |
DSH 内提供商 id |
dataRoot |
见上文系统路径 | 运行时与模型缓存根目录 |
runtimeDir |
— | 使用已有 transcribe.cpp 目录,跳过下载 |
modelPath |
— | 使用已有 GGUF 文件 |
backend |
auto |
auto / cpu / vulkan / cuda / cpu_accel |
threads |
0 |
CPU 线程(0 由库决定) |
idleTimeoutMs |
300000 |
空闲后卸载 worker |
inferenceTimeoutMs |
120000 |
单次转写超时 |
适用场景与限制¶
适合:需要在 DSH 里本地、离线(首次准备后)转写俄语或俄英混说,且可接受约 751 MB 模型与首次下载的开发者。
注意:
- 单次录音上限跟随 DSH voice-input(120 s)。
- 插件代码 MIT;模型 OpenMDW-1.1(nvidia/nemotron-3.5-asr-streaming-0.6b);GGUF 与 transcribe.cpp 来源见 README「Лицензии и источники」。
- 仓库提供
npm run test/test:fresh/test:lang等脚本,供维护者验证 provider、下载链路与语言行为;普通用户按 GUI 准备即可。