前言¶
在 DeepSeek Harness(DSH)里写提示词、改草稿时,键盘输入往往打断思路。原版 dsh-hold-to-talk 已经在 Web composer 上提供「按住鼠标说话、松手写入」的手势,并可用本机 SenseVoice(sherpa-onnx)离线识别。若你希望改用百炼、SiliconFlow 或自建 OpenAI 兼容转写接口,同时维护术语表与错词纠正规则,并把输入框已有草稿一并交给识别侧作上下文,就需要在现有手势之上扩展 ASR 提供方与配置方式。lcx19970714/dsh-hold-to-talk-plus 即在此基础上的 fork,包名与 bundle id 仍与上游一致(dsh-hold-to-talk),可作为 profile 插件替换安装。
这是什么¶
维护者为 GitHub 用户 lcx19970714,社区目录分类为「模型推理」。插件面向 DSH Web 对话 composer:按住说话、松手后把转写文本插入草稿;浮动层、「上滑取消」与 60 秒自动结束等行为与上游一致。相对 dsh-hold-to-talk@0.1.4,本 fork 增加第三方云端 ASR、用户词库、草稿作上下文提示、设置页与云端说话时的实时预览等能力。许可证为 MIT(fork 自 wangzhanchao883/dsh-hold-to-talk)。当前资料中的版本号为 0.1.4-cloud.6,运行时要求 Node ^22.0.0 || >=24。
核心功能¶
下面按 README 功能对比表归纳已核实能力。
识别引擎¶
- 本机离线:SenseVoice(sherpa-onnx),与上游相同。
- 云端 ASR:支持 OpenAI 兼容的
/v1/audio/transcriptions,以及阿里云百炼兼容端点上的chat/completions+input_audio(chat-audio协议)。 - 端点协议:根据 URL 自动判断协议,避免协议与端点不匹配导致的 400。
- 失败回退:云端调用失败时自动回退到本机 ASR。
词库与上下文¶
- 用户词库(wordbank):术语表,以及
correct=wrong1|wrong2形式的纠正规则;识别结果在本地与云端路径上均可做后处理。 - 草稿作上下文:composer 中已有草稿会作为 context prompt 参与组装(云端侧见
cloud-asr.mjs中的 system prompt 逻辑)。 - 百炼说明:在百炼兼容端点上,ASR 任务会忽略 instruction 式提示;术语表接受但效果有限,可靠纠错仍依赖 wordbank 的
correct=wrong规则。
设置与联调¶
- 路径 Settings → Voice input:选择提供方预设、填写 API Key,可先 Test connection 再保存(未保存亦可测);401/403/404/429/超时等会译为可读说明。
- 云端实时预览:按住说话时使用云端 ASR 时,对尾部窗口约每 2 秒重新解码一次,便于边说边看。
代码结构(便于对照源码)¶
lib/
├─ index.js # 路由、引擎管理、提示组装、云端分支、/settings
├─ client.js # 按住手势、浮层、设置页
├─ asr-worker.mjs # 本机 sherpa-onnx
├─ cloud-asr.mjs # WAV 编码与两种第三方协议
├─ wordbank.mjs # 词库解析与后处理
└─ settings-store.mjs # ~/.dsh/hold-to-talk/settings.json
预设提供方(资料原文)¶
| Provider | Endpoint | Model | Protocol |
|---|---|---|---|
| Alibaba Cloud Model Studio (BaiLian) | https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions |
qwen3-asr-flash |
chat-audio |
| SiliconFlow (free tier) | https://api.siliconflow.cn/v1/audio/transcriptions |
TeleAI/TeleSpeechASR |
transcriptions |
| Self-hosted (faster-whisper / whisper.cpp / FunASR gateway) | http://127.0.0.1:8000/v1/audio/transcriptions |
whisper-large-v3 |
transcriptions |
| Local offline (no key) | — | SenseVoiceSmall int8 | local |
安装与启用¶
本仓库作为 DSH profile 插件安装,是 dsh-hold-to-talk 的直接替换,步骤以仓库 README 为准。安装前请自行阅读源码与 MIT 许可证;插件在 DSH 进程权限下运行,API Key 与词库会写入本机配置(如 ~/.dsh/hold-to-talk/settings.json)。
1、获取源码并安装依赖(含 sherpa-onnx 原生运行时)
git clone https://github.com/lcx19970714/dsh-hold-to-talk-plus.git "H:\DSH-鼠标语音输入"
cd "H:\DSH-鼠标语音输入"
pnpm install
2、将 desktop profile 指向本地副本
编辑 %USERPROFILE%\.dsh\profiles\desktop\package.json,增加或改为:
"dsh-hold-to-talk": "link:H:/DSH-鼠标语音输入"
随后在 profile 目录执行依赖安装(README 给出的 PowerShell 示例):
$node = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\node\bin\node.exe"
$pnpm = "$env:USERPROFILE\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\pnpm\bin\pnpm.cjs"
& $node $pnpm install --dir "$env:USERPROFILE\.dsh\profiles\desktop"
3、在 cordis.patch 中注册插件
编辑 %USERPROFILE%\.dsh\profiles\desktop\cordis.patch.yml,按仓库内 cordis.patch.yml 与 README.zh.md 填写 id、name 与 config。
4、重启 DSH
完全退出 DSH(托盘 → Quit)后重新打开。
5、配置识别提供方
打开 Settings → Voice input,选择提供方、粘贴 API Key,点击 Test connection,确认通过后保存。若仅使用本机 local 提供方,则无需 Key。
典型用法¶
- 在 DSH Web composer 输入区域按住鼠标左键,开始说话;需要取消时按上游交互上滑取消。
- 松手后,转写文本插入当前草稿;若已配置 wordbank,错词规则会在结果上生效。
- 使用云端提供方时,按住期间可观察 live preview 的阶段性转写;超过 60 秒会自动结束一轮。
- 在设置页切换 Provider 或自建
http://127.0.0.1:8000/v1/audio/transcriptions时,先用 Test connection 确认可达,再保存,避免把错误配置写入settings.json。
更细的 config 字段与中文说明见仓库 README.zh.md。
适用场景与注意¶
- 适合:长期在 DSH 里写提示词、希望「按住即说」且要在本机离线与多家云端 ASR 之间切换的开发者;对专有名词、易混谐音有 wordbank 纠正需求;希望把输入框已有内容作为识别上下文的场景。
- 与上游关系:手势与 60 秒等行为未改,差异集中在 ASR 提供方、词库、设置页与云端预览;安装时仍使用包名
dsh-hold-to-talk,勿与未增强的上游包混用 link 目标。 - 安全与合规:云端模式会向所选 Endpoint 发送音频(及 README 描述的 prompt 组装内容);自建网关时需自行保证网络与密钥管理。安装前审阅
lib/cloud-asr.mjs、lib/wordbank.mjs等是否符合你的数据策略。 - 生态说明:DSH 采用「一切皆插件」思路;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-hold-to-talk-plus 在保留 DSH 按住说话体验的前提下,把识别扩展到 OpenAI 兼容与百炼协议、词库纠正、设置页联调与云端预览,并在云端失败时回退本机 SenseVoice。查阅参数与中文文档请以 GitHub 仓库为准。
- 目录页:https://www.skillhub.cn/plugins/lcx19970714/dsh-hold-to-talk-plus
- 源码:https://github.com/lcx19970714/dsh-hold-to-talk-plus