前言¶
DeepSeek Harness 的 Web GUI 自带语音输入能力,但默认链路意味着音频要经过远端语音服务。要从录音到文字都不出本机,就得自己找本地识别方案并接进语音管线——先找模型、再找命令行工具、再把输出塞回 Harness,中间每一步都要自己搭。下面介绍的 linj1k/dsh-whisper-local(分类:模型推理,维护者 Linj1k)把这个流程做成一个插件:浏览器录下 16 kHz 单声道 WAV,Host 端用 whisper.cpp 转写,音频不经过网络,也不需要 OpenAI 账号或 API Key。
需要说明的是,这是一个社区 bundle,不是 DeepSeek 官方插件。项目目录页放在 skillhub.cn,那是第三方社区站点,与 DeepSeek 没有官方从属关系。
这是什么¶
一句话定位:给 DSH 的 Web GUI 提供一个 host-local 语音提供者(SpeechProvider),底层是 whisper.cpp 的 Windows x64 CPU 版本。浏览器只负责录音并把音频送到 Host,Host 上负责落盘、调 whisper-cli.exe、读取文本、清理临时文件。
它解决的三个具体问题:
- 零外部依赖的识别链路——不需要注册外部语音服务、不需要 API Key。
- 运行时和模型的托管——whisper.cpp 运行时和 GGML 模型按需下载,带大小和 SHA-256 校验,下载后缓存并可离线复用。
- 模型切换有入口——Harness UI 里有模型下拉框,改完立即生效并持久化。
核心功能¶
下面按 README 列出的能力逐条说明,全部为本地执行:
- 完全本地听写:
whisper-cli.exe跑在 CPU 上,模型和音频都留在本机。 - 默认自动语种检测:
language: auto让 Whisper 自行判断每条录音的语种;99 种 Whisper 语种也可以在语音设置里手动指定。 - UI 内选模型:插件页可选 tiny、base、small、medium、large-v3-turbo,改动即时生效并保存。
- 托管式安装:Windows x64 whisper.cpp 运行时和 GGML 模型按需下载、校验(大小 + SHA-256)、缓存,之后可离线使用。
- 不留存录音:每条录音写成临时 WAV,转写完即删除。
- Agent 集成:助手可通过
whisper_model工具列出模型、后台下载、或切换当前模型。
工作流程如下:
浏览器(Harness composer)
└─ 麦克风按钮录制 16 kHz 单声道 PCM WAV
└─ speech Remote 把录音发送到 Host
└─ whisper-local SpeechProvider
├─ 写临时 WAV
├─ 用选中的 GGML 模型启动 whisper-cli.exe
├─ 读取文本输出
└─ 删除临时文件并返回转写结果
Provider 通过 ctx.speechToText.register() 注册,并声明 location: 'host-local'。这样语音 UI 能显示准备状态,也能在需要时触发模型下载。
安装与启用¶
环境要求¶
| 项 | 说明 |
|---|---|
| DeepSeek Harness | 桌面版/Web 版,且启用实验性的 Voice Input bundle |
| 系统 | Windows 10/11 x64(固定运行时是 Windows CPU 构建) |
| 运行时依赖 | tar.exe(Windows 10/11 自带,用于解压运行时归档) |
| 磁盘 | 解压后的运行时约 90 MB,每个模型 31–547 MB |
| CPU | 任意 x64 CPU,核数和线程越多越快。不使用 GPU |
| 麦克风 | 需要操作系统和浏览器的麦克风授权 |
运行时不需要 Node.js、Python、编译器或 CUDA。
从 GitHub 安装(推荐)¶
- 先启用官方 Voice Input bundle:Plugins → Voice Input。
- 打开 Plugins → Add plugin → Install a third-party plugin。
- 输入仓库 Git 地址:
git+https://github.com/Linj1k/dsh-whisper-local.git
要固定版本可用:
git+https://github.com/Linj1k/dsh-whisper-local.git#v1.3.0
- 确认 bundle 已启用。它的 patch 会把语音模块设为
whisper-local+language: auto,并注册whisper_model工具。 - 如果 Host 模块是在 Harness 运行期间加入的,Provider 没出现,就重启一次 Harness。只改浏览器端的 UI 是热重载的,不需要重启。
其他安装方式¶
- 发布包:从 GitHub Releases 下载
dsh-whisper-local-1.3.0.tgz,在 Plugins → Add plugin 里指向该文件。 - npm:包名
dsh-whisper-local,待维护者执行npm publish后即可通过 Plugins → Add plugin 填包名安装(可加版本,如dsh-whisper-local@1.3.0)。 - 本地检出:在 Plugins → Add plugin 里填本目录绝对路径,适合开发调试。
典型用法¶
听写¶
- 点 composer 里的麦克风按钮(在模型选择器和 Send 之间)。
- 首次使用会要求授权麦克风。
- 说话,然后按 Stop。
- 转写结果会插入草稿,按正常流程检查并发送。
选模型¶
打开 Plugins → Whisper local,页面提供模型下拉框(带体积与速度/精度提示)、当前生效的模型、以及 Save model 按钮。选择会通过 Harness Settings 服务写入 profile 配置,重启后依然生效。如果所选模型尚未下载,准备流程会自动开始,进度显示在 Voice Input bundle 详情里的 Download and prepare 区域。
选语种¶
Whisper local 提供 99 种语种加 auto。在 Plugins → Voice Input → bundle details → Language 里改。官方选择器对 auto、en、zh、ja、ko 显示翻译后的标签,其他语种显示 ISO 代码(如 fr、de、es)。
默认值是 auto,不会强制法语或任何固定语种。混合用语场景适合自动检测;录音短或噪音大时,显式指定语种更稳。
模型清单¶
模型均来自 ggerganov/whisper.cpp 托管的多语种 GGML 构建:
| Key | 文件 | 体积 | 说明 |
|---|---|---|---|
tiny-q5_1 |
ggml-tiny-q5_1.bin |
~31 MB | 最快,精度最低 |
base-q5_1 |
ggml-base-q5_1.bin |
~57 MB | 快,基础精度 |
small-q5_1 |
ggml-small-q5_1.bin |
~181 MB | 默认,均衡 |
medium-q5_0 |
ggml-medium-q5_0.bin |
~514 MB | 更准,更慢 |
large-v3-turbo-q5_0 |
ggml-large-v3-turbo-q5_0.bin |
~547 MB | 多语种精度最好 |
官方给出的参考(AMD Ryzen 9 9950X3D,8 线程,约 10 秒语音):small-q5_1 处理法语约 1.3 s、日语约 1.2 s;large-v3-turbo-q5_0 法语约 3.3 s、日语约 4.0 s。
固定运行时是官方 nightly b5454 Windows x64 OpenBLAS 构建,校验值为其 release SHA-256。
配置项¶
bundle patch(cordis.patch.yml)给出的默认配置:
- insert:
- id: whisper-local
name: 'dsh-whisper-local'
config:
dataRoot: !!js dshHomePath('speech-to-text', 'whisper-local')
model: small-q5_1
threads: 8
timeoutMs: 180000
- id: speech-to-text
config:
defaultProvider: whisper-local
language: auto
| 字段 | 默认 | 含义 |
|---|---|---|
dataRoot |
%USERPROFILE%\.dsh\speech-to-text\whisper-local |
运行时、模型和诊断信息的托管目录 |
model |
small-q5_1 |
上表中的模型 Key 之一,也可从 UI 修改 |
threads |
8 |
传给 whisper-cli 的 CPU 线程数 |
timeoutMs |
180000 |
单次转写时限 |
modelPath |
未设置 | 使用已有的 GGML 模型文件,跳过托管下载 |
whisperCli |
未设置 | 使用已有的 whisper-cli.exe,跳过托管运行时 |
用户覆盖写在 profile 的 patch 层,优先级高于 bundle 默认值;UI 里选中的模型也写在那里。
Agent 工具¶
bundle 注册了 whisper_model 工具,助手可以执行三类操作:列出模型目录、后台下载模型、切换当前模型。适合让 Agent 在用户一句「换成 small」时自行完成切换。
适用场景与注意事项¶
适合这些情况:
- 录音内容涉及隐私或不宜出网,需要在本地完成转写。
- 环境里没有可用的外部语音 API Key,或不想为听写单独申请账号。
- 已经有一台 x64 Windows 机器,想用 CPU 换来一条约 10 秒的语音秒级出稿。
需要注意:
- 权限范围。插件以当前 DSH 进程的权限运行,下载运行时和模型、执行
whisper-cli.exe、读写dataRoot目录都发生在该进程权限下。安装前应该先读一遍源码和许可证(MIT),确认目录路径和命令执行范围符合预期,不要只看目录页描述就装。 - 平台与机型限制。只支持 Windows 10/11 x64,只用 CPU,不使用 GPU。在 macOS / Linux 或 ARM 机器上不适用。
- 磁盘与首次下载。运行时约 90 MB,模型 31–547 MB,首次启用(尤其选 medium 以上)会有一段下载时间。运行时和模型带大小与 SHA-256 校验,尽量保持默认配置,不要手工替换。
- 默认语种是 auto。如果使用场景语种固定、录音又短或噪声大,建议显式指定语种,避免自动检测出错。
- 音频不落盘。只在临时 WAV 上转写,转写后删除——这条仅指插件自身的行为,具体效果取决于你在 Harness 之外还有没有其他录音链路。
- 社区项目。这是第三方 bundle,非 DeepSeek 官方插件;star 数与版本信息以 GitHub 当前状态为准,升级前核对版本号。
结尾¶
这个插件的价值在于把「浏览器录音 + 本机转写」这条链路收敛成一个可以安装的 bundle:不用配外部服务、不用管运行时怎么装,模型选择和语种选择都在 UI 里完成,并且音频不出本机。如果本地听写已经是日常操作,值得一试;如果只是偶尔录音,先估算一下模型下载的体积成本。
目录页:https://www.skillhub.cn/plugins/Linj1k/dsh-whisper-local
GitHub:https://github.com/Linj1k/dsh-whisper-local