前言¶
在 DeepSeek Harness 的插件生態中,Web profile 的語音輸入往往需要調用外部 API 或依賴雲端服務。dsh-hold-to-talk 插件提供了一個無需密鑰、完全離線的語音輸入方案。它複用了微信桌面版“長按說話”的交互邏輯:在輸入框按住鼠標,說話,鬆開將文本寫入草稿。識別完全在本地運行,音頻不會離開機器。
是什麼¶
這是一個爲 DeepSeek Harness Web composer 提供本地語音輸入能力的客戶端插件。由 wangzhanchao883 維護。它通過 sherpa-onnx 調用 SenseVoice 模型,在瀏覽器端完成實時語音識別。
核心功能¶
- 長按說話交互:在輸入框上按住鼠標靜止 ≥400ms 開始錄音,鬆開將文本插入草稿。
- 本地識別:使用 sherpa-onnx 運行 SenseVoice 模型,無需 API 密鑰,離線運行,音頻不離開機器。
- 實時預覽:錄音時浮層顯示實時轉錄文本,僅作爲預覽,不寫入草稿。
- 取消機制:錄音過程中上滑或按 Esc 鍵可取消。
- 自動完成:按住超過 60 秒自動完成錄音並插入。
- 線程優化:解碼運行在 Web Worker 線程中,避免阻塞主線程。
安裝與配置¶
安裝¶
確保已安裝 DeepSeek Harness 並運行 Web profile(dsh web),執行以下命令:
dsh plugin --profile web add dsh-hold-to-talk
安裝後重啓 dsh web 並刷新頁面(Ctrl+Shift+R)。
配置¶
插件的默認配置位於 profile 的 cordis.patch.yml 文件中。在 dsh-hold-to-talk 項下添加 config 字段即可覆蓋默認值:
- id: dsh-hold-to-talk
name: dsh-hold-to-talk
config:
holdThresholdMs: 400 # 長按觸發閾值
cancelSlidePx: 60 # 上滑取消距離
interimIntervalMs: 1500 # 實時預覽間隔
maxWindowSec: 6 # 預覽解碼窗口
minHoldMs: 250 # 最小觸發時間(防誤觸)
maxHoldMs: 60000 # 最大自動完成時間
autoSend: false # 是否自動發送(默認僅插入)
language: auto # 語言模式
useItn: true # 是否啓用逆文本歸一化
numThreads: 2 # 引擎線程數
典型用法¶
- 開始錄音:在 DSH Web 的輸入框上按住鼠標,保持靜止 ≥400ms。此時會彈出一個浮層,顯示“鬆開發送 · 上滑取消”。
- 說話與預覽:說話過程中,浮層實時顯示轉錄文本(預覽)。文本不會立即寫入輸入框。
- 插入文本:鬆開鼠標,浮層中的完整文本會被插入到輸入框的草稿中。
- 取消錄音:錄音過程中上滑 >60px,或按 Esc 鍵,可取消本次錄音。
- 自動完成:按住超過 60 秒,錄音自動完成並插入文本。
- 預取模型:首次使用會自動下載模型(約 230MB)。若需提前下載,可在插件目錄執行:
npm run model:fetch
注意事項¶
- 環境要求:DeepSeek Harness 必須運行在 Web profile 下(
dsh web)。宿主機器需安裝 Node.js >=22.19 或 >=24。 - 瀏覽器兼容:需要 Chromium 內核瀏覽器(Chrome/Edge),並允許麥克風權限。
- 磁盤佔用:首次運行需下載模型文件,佔用約 230 MB 磁盤空間。
- 預覽與草稿:浮層顯示的“實時轉錄”僅爲預覽,不會寫入草稿。只有鬆開鼠標後的完整音頻解碼結果纔會被插入。
- 重採樣機制:音頻重採樣總是從樣本 0 開始,不支持增量式重採樣。
總結¶
dsh-hold-to-talk 通過本地化 ASR 和 Web Worker 解碼,爲 DSH Web 提供了輕量級、隱私友好的語音輸入能力。對於需要在本地處理敏感數據或離線工作的場景,該插件提供了可行的解決方案。
插件目錄:https://www.skillhub.cn/plugins/wangzhanchao883/dsh-hold-to-talk
GitHub:https://github.com/wangzhanchao883/dsh-hold-to-talk