dsh-speech-input:給 DeepSeek Harness Web 輸入框加一個麥克風按鈕

前言

在 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.jsDEFAULT_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、幻方沒有官方從屬關係。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜