前言¶
在 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