前言¶
在 dsh web 裏和模型對話,長一點的提示詞往往要敲上好幾分鐘。輸入框本身沒有語音入口,想口述通常只能藉助系統聽寫再粘貼,或者直接改 Harness 的 DOM 往頁面裏塞控件——後者頁面一升級就可能失效。
下面介紹的 dsh-speech-input 走的是另一條路:通過官方插槽在輸入框右側加一個原生麥克風按鈕,點擊開始聽寫,識別結果即時寫入當前草稿,再次點擊停止並補全句末標點,全程絕不自動發送消息。
DSH 的理念是「一切皆插件」,輸入框增強正是插件體系覆蓋的範圍。
這是什麼¶
dsh-speech-input 是 liznee 維護的 DeepSeek Harness 插件,當前版本 v0.2.3(2026-08-29),許可證爲 MIT。它是一個純瀏覽器插件:不需要額外的 API key、服務端,也不用下載模型。
它解決的問題很具體:爲 DeepSeek Harness Web 輸入框增加原生麥克風按鈕,點擊開始聽寫、識別結果即時寫入當前草稿,再次點擊停止並補全句末標點,絕不自動發送消息。
核心功能¶
接入方式:官方插槽與公開接口¶
插件使用官方 conversation.input.right 插槽渲染麥克風按鈕,不查詢、也不改寫 Harness DOM。識別文字只通過 Harness 公開的 inputActions.setDraft() 寫入普通草稿,模型看不到音頻或識別狀態。
聽寫行爲¶
- 支持 Chrome / Edge 的 Web Speech API,中英文跟隨瀏覽器語言
- 中間識別結果原位更新,不會反覆疊加同一句話
- 聽寫期間手工補寫的內容會保留
- 持續 5 秒無語音自動停止並保留已聽寫文字;時長可在
src/client/index.js的DEFAULT_SILENCE_TIMEOUT_MS調整,設爲0可關閉自動停止 - 聽寫中按 Enter 立即停止並保留已聽寫文字(補好句末標點)
聽寫中的界面¶
聽寫時輸入框會顯示一個橢圓膠囊:左側圓環是取消 ×,中間是即時音量條,右側五根音量條是停止按鈕。
音量條不是循環假動畫:插件通過 Web Audio API 在本地計算麥克風 RMS,展示最近 16 個真實音量樣本。
聽寫期間,Harness 的發送按鈕和 Enter 發送會由官方接口置灰禁用,停止或取消後恢復,不存在說到一半被髮出去的情況。
取消與資源清理¶
- 點擊取消會移除本輪語音產生的全部文字,並保留開始聽寫前的草稿
- 權限、麥克風或網絡硬錯誤會給出明確提示
- 頁面切換或插件卸載時中止識別並釋放麥克風
- 支持鍵盤焦點、屏幕閱讀器狀態播報和減少動態效果偏好
安裝與啓用¶
從 GitHub 安裝到 web profile:
dsh plugin --profile web add github:liznee/dsh-speech-input
插件已發佈到 npm,也可以直接安裝:
dsh plugin --profile web add dsh-speech-input
想本地驗證,可以先打一個 tarball 再安裝:
npm ci
npm test
npm pack
dsh plugin --profile web add ./dsh-speech-input-0.2.1.tgz
倉庫已提交預構建的 lib/,Git 安裝不會執行構建腳本,也不需要在 pnpm-workspace.yaml 中授權 allowBuilds。安裝或升級後需要重啓 dsh web。
想在本地開發,需要 Node.js 20 以上版本,常用命令如下:
npm ci
npm test
npm run test:coverage
npm run pack:check
構建產物是 Harness 的懶加載 CommonJS module-factory 格式。
典型用法¶
1、點擊輸入框右側的麥克風按鈕開始聽寫,識別結果即時寫入當前草稿,中間結果原位更新。
2、再次點擊停止,插件會補全句末標點。
3、想直接結束,按 Enter:聽寫立即停止並保留已聽寫文字(補好句末標點),再按一次 Enter 發送。
4、想丟棄本輪內容,點擊膠囊左側的取消,本輪語音產生的全部文字會被移除,草稿恢復爲開始聽寫前的狀態。
隱私與已知限制¶
先說插件自身的行爲:不保存音頻、不寫日誌、不上傳音頻,也不會把音頻發給 Harness 或 DeepSeek。爲了顯示真實音量,插件會額外打開一條本地麥克風流,只連接到 Web Audio AnalyserNode 計算 RMS,不播放、不錄製、不上傳,停止或取消時立即關閉音軌。
需要特別注意的是識別路徑:Web Speech API 的處理由瀏覽器決定,Edge/Chrome 通常會把識別音頻交給瀏覽器廠商的在線語音服務,這不是離線識別。不能接受這條數據路徑的話,請不要授權麥克風。
已知限制:
- Firefox 當前沒有可用的 Web Speech
SpeechRecognition實現,按鈕會禁用 - 瀏覽器語言就是識別語言,首個版本沒有獨立語言設置
- 插件只寫草稿,絕不自動發送
適用場景與注意¶
適合兩類人:
- 經常在 dsh web 裏輸入長提示詞、想減少打字的用戶;
- 想參考輸入框增強類插件寫法的開發者,它的接入方式(
conversation.input.right插槽加inputActions.setDraft())本身就是一個可以對照的實現。
使用前注意:
- 插件以當前 dsh 進程權限運行,安裝前建議先檢查源碼與許可證。許可證爲 MIT,詳見倉庫中的 LICENSE 與 NOTICE;
- Chrome/Edge 的識別走瀏覽器廠商的在線服務,在隱私敏感的環境裏使用前先確認能接受這條路徑;
- Firefox 用戶目前無法使用。
結尾¶
dsh-speech-input 做的事情不大:一個麥克風按鈕、一段即時聽寫、一條只寫草稿的通路。但實現相當剋制——官方插槽接入、公開接口寫草稿、退出時釋放麥克風、把識別路徑的隱私影響寫清楚。如果你經常在 dsh web 裏打長段提示詞,或者正在找輸入框增強類插件的參考實現,值得一試。
- 社區目錄頁:https://www.skillhub.cn/plugins/liznee/dsh-speech-input
- 源碼倉庫:https://github.com/liznee/dsh-speech-input
其中目錄是社區維護的獨立站點,與 DeepSeek、幻方沒有官方從屬關係。