linj1k/dsh-whisper-local:在 DSH 裏跑本地 Whisper 語音輸入

前言

DeepSeek Harness 的 Web GUI 自帶語音輸入能力,但默認鏈路意味着音頻要經過遠端語音服務。要從錄音到文字都不出本機,就得自己找本地識別方案並接進語音管線——先找模型、再找命令行工具、再把輸出塞回 Harness,中間每一步都要自己搭。下面介紹的 linj1k/dsh-whisper-local(分類:模型推理,維護者 Linj1k)把這個流程做成一個插件:瀏覽器錄下 16 kHz 單聲道 WAV,Host 端用 whisper.cpp 轉寫,音頻不經過網絡,也不需要 OpenAI 賬號或 API Key。

需要說明的是,這是一個社區 bundle,不是 DeepSeek 官方插件。項目目錄頁放在 skillhub.cn,那是第三方社區站點,與 DeepSeek 沒有官方從屬關係。

這是什麼

一句話定位:給 DSH 的 Web GUI 提供一個 host-local 語音提供者(SpeechProvider),底層是 whisper.cpp 的 Windows x64 CPU 版本。瀏覽器只負責錄音並把音頻送到 Host,Host 上負責落盤、調 whisper-cli.exe、讀取文本、清理臨時文件。

它解決的三個具體問題:

  1. 零外部依賴的識別鏈路——不需要註冊外部語音服務、不需要 API Key。
  2. 運行時和模型的託管——whisper.cpp 運行時和 GGML 模型按需下載,帶大小和 SHA-256 校驗,下載後緩存並可離線複用。
  3. 模型切換有入口——Harness UI 裏有模型下拉框,改完立即生效並持久化。

核心功能

下面按 README 列出的能力逐條說明,全部爲本地執行:

  • 完全本地聽寫:whisper-cli.exe 跑在 CPU 上,模型和音頻都留在本機。
  • 默認自動語種檢測:language: auto 讓 Whisper 自行判斷每條錄音的語種;99 種 Whisper 語種也可以在語音設置裏手動指定。
  • UI 內選模型:插件頁可選 tiny、base、small、medium、large-v3-turbo,改動即時生效並保存。
  • 託管式安裝:Windows x64 whisper.cpp 運行時和 GGML 模型按需下載、校驗(大小 + SHA-256)、緩存,之後可離線使用。
  • 不留存錄音:每條錄音寫成臨時 WAV,轉寫完即刪除。
  • Agent 集成:助手可通過 whisper_model 工具列出模型、後臺下載、或切換當前模型。

工作流程如下:

瀏覽器(Harness composer)
  └─ 麥克風按鈕錄製 16 kHz 單聲道 PCM WAV
       └─ speech Remote 把錄音發送到 Host
            └─ whisper-local SpeechProvider
                 ├─ 寫臨時 WAV
                 ├─ 用選中的 GGML 模型啓動 whisper-cli.exe
                 ├─ 讀取文本輸出
                 └─ 刪除臨時文件並返回轉寫結果

Provider 通過 ctx.speechToText.register() 註冊,並聲明 location: 'host-local'。這樣語音 UI 能顯示準備狀態,也能在需要時觸發模型下載。

安裝與啓用

環境要求

項 說明
DeepSeek Harness 桌面版/Web 版,且啓用實驗性的 Voice Input bundle
系統 Windows 10/11 x64(固定運行時是 Windows CPU 構建)
運行時依賴 tar.exe(Windows 10/11 自帶,用於解壓運行時歸檔)
磁盤 解壓後的運行時約 90 MB,每個模型 31–547 MB
CPU 任意 x64 CPU,核數和線程越多越快。不使用 GPU
麥克風 需要操作系統和瀏覽器的麥克風授權

運行時不需要 Node.js、Python、編譯器或 CUDA。

從 GitHub 安裝(推薦)

  1. 先啓用官方 Voice Input bundle:Plugins → Voice Input。
  2. 打開 Plugins → Add plugin → Install a third-party plugin。
  3. 輸入倉庫 Git 地址:
   git+https://github.com/Linj1k/dsh-whisper-local.git

要固定版本可用:

   git+https://github.com/Linj1k/dsh-whisper-local.git#v1.3.0
  1. 確認 bundle 已啓用。它的 patch 會把語音模塊設爲 whisper-local + language: auto,並註冊 whisper_model 工具。
  2. 如果 Host 模塊是在 Harness 運行期間加入的,Provider 沒出現,就重啓一次 Harness。只改瀏覽器端的 UI 是熱重載的,不需要重啓。

其他安裝方式

  • 發佈包:從 GitHub Releases 下載 dsh-whisper-local-1.3.0.tgz,在 Plugins → Add plugin 裏指向該文件。
  • npm:包名 dsh-whisper-local,待維護者執行 npm publish 後即可通過 Plugins → Add plugin 填包名安裝(可加版本,如 dsh-whisper-local@1.3.0)。
  • 本地檢出:在 Plugins → Add plugin 裏填本目錄絕對路徑,適合開發調試。

典型用法

聽寫

  1. 點 composer 裏的麥克風按鈕(在模型選擇器和 Send 之間)。
  2. 首次使用會要求授權麥克風。
  3. 說話,然後按 Stop。
  4. 轉寫結果會插入草稿,按正常流程檢查併發送。

選模型

打開 Plugins → Whisper local,頁面提供模型下拉框(帶體積與速度/精度提示)、當前生效的模型、以及 Save model 按鈕。選擇會通過 Harness Settings 服務寫入 profile 配置,重啓後依然生效。如果所選模型尚未下載,準備流程會自動開始,進度顯示在 Voice Input bundle 詳情裏的 Download and prepare 區域。

選語種

Whisper local 提供 99 種語種加 auto。在 Plugins → Voice Input → bundle details → Language 裏改。官方選擇器對 auto、en、zh、ja、ko 顯示翻譯後的標籤,其他語種顯示 ISO 代碼(如 fr、de、es)。

默認值是 auto,不會強制法語或任何固定語種。混合用語場景適合自動檢測;錄音短或噪音大時,顯式指定語種更穩。

模型清單

模型均來自 ggerganov/whisper.cpp 託管的多語種 GGML 構建:

Key 文件 體積 說明
tiny-q5_1 ggml-tiny-q5_1.bin ~31 MB 最快,精度最低
base-q5_1 ggml-base-q5_1.bin ~57 MB 快,基礎精度
small-q5_1 ggml-small-q5_1.bin ~181 MB 默認,均衡
medium-q5_0 ggml-medium-q5_0.bin ~514 MB 更準,更慢
large-v3-turbo-q5_0 ggml-large-v3-turbo-q5_0.bin ~547 MB 多語種精度最好

官方給出的參考(AMD Ryzen 9 9950X3D,8 線程,約 10 秒語音):small-q5_1 處理法語約 1.3 s、日語約 1.2 s;large-v3-turbo-q5_0 法語約 3.3 s、日語約 4.0 s。

固定運行時是官方 nightly b5454 Windows x64 OpenBLAS 構建,校驗值爲其 release SHA-256。

配置項

bundle patch(cordis.patch.yml)給出的默認配置:

- insert:
    - id: whisper-local
      name: 'dsh-whisper-local'
      config:
        dataRoot: !!js dshHomePath('speech-to-text', 'whisper-local')
        model: small-q5_1
        threads: 8
        timeoutMs: 180000

- id: speech-to-text
  config:
    defaultProvider: whisper-local
    language: auto
字段 默認 含義
dataRoot %USERPROFILE%\.dsh\speech-to-text\whisper-local 運行時、模型和診斷信息的託管目錄
model small-q5_1 上表中的模型 Key 之一,也可從 UI 修改
threads 8 傳給 whisper-cli 的 CPU 線程數
timeoutMs 180000 單次轉寫時限
modelPath 未設置 使用已有的 GGML 模型文件,跳過託管下載
whisperCli 未設置 使用已有的 whisper-cli.exe,跳過託管運行時

用戶覆蓋寫在 profile 的 patch 層,優先級高於 bundle 默認值;UI 裏選中的模型也寫在那裏。

Agent 工具

bundle 註冊了 whisper_model 工具,助手可以執行三類操作:列出模型目錄、後臺下載模型、切換當前模型。適合讓 Agent 在用戶一句「換成 small」時自行完成切換。

適用場景與注意事項

適合這些情況:

  • 錄音內容涉及隱私或不宜出網,需要在本地完成轉寫。
  • 環境裏沒有可用的外部語音 API Key,或不想爲聽寫單獨申請賬號。
  • 已經有一臺 x64 Windows 機器,想用 CPU 換來一條約 10 秒的語音秒級出稿。

需要注意:

  1. 權限範圍。插件以當前 DSH 進程的權限運行,下載運行時和模型、執行 whisper-cli.exe、讀寫 dataRoot 目錄都發生在該進程權限下。安裝前應該先讀一遍源碼和許可證(MIT),確認目錄路徑和命令執行範圍符合預期,不要只看目錄頁描述就裝。
  2. 平臺與機型限制。只支持 Windows 10/11 x64,只用 CPU,不使用 GPU。在 macOS / Linux 或 ARM 機器上不適用。
  3. 磁盤與首次下載。運行時約 90 MB,模型 31–547 MB,首次啓用(尤其選 medium 以上)會有一段下載時間。運行時和模型帶大小與 SHA-256 校驗,儘量保持默認配置,不要手工替換。
  4. 默認語種是 auto。如果使用場景語種固定、錄音又短或噪聲大,建議顯式指定語種,避免自動檢測出錯。
  5. 音頻不落盤。只在臨時 WAV 上轉寫,轉寫後刪除——這條僅指插件自身的行爲,具體效果取決於你在 Harness 之外還有沒有其他錄音鏈路。
  6. 社區項目。這是第三方 bundle,非 DeepSeek 官方插件;star 數與版本信息以 GitHub 當前狀態爲準,升級前核對版本號。

結尾

這個插件的價值在於把「瀏覽器錄音 + 本機轉寫」這條鏈路收斂成一個可以安裝的 bundle:不用配外部服務、不用管運行時怎麼裝,模型選擇和語種選擇都在 UI 裏完成,並且音頻不出本機。如果本地聽寫已經是日常操作,值得一試;如果只是偶爾錄音,先估算一下模型下載的體積成本。

目錄頁:https://www.skillhub.cn/plugins/Linj1k/dsh-whisper-local
GitHub:https://github.com/Linj1k/dsh-whisper-local

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

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

小夜