dsh-fish-tts:給 DSH Web GUI 接上 Fish Audio 語音朗讀

前言

在 DeepSeek Harness(DSH)的 Web GUI 裏,助手回覆是純文本,長回覆只能逐行看。如果你已經持有 Fish Audio 的 API Key 和自己的音色,缺的只是一層把這些能力接進 Web GUI 的膠水——不用複製文本去別的工具,也不用自己寫腳本調 API。下面介紹的 dsh-fish-tts 就做這件事。

這是什麼

dsh-fish-tts 是面向 DSH Web GUI 的第三方語音合成(TTS)插件,由 MaRi23333 維護,MIT 許可證,當前版本 0.2.11。它僅支持 Fish Audio API,需自備 Key,插件不分發、不託管任何 Key。已針對 DSH 0.1.2-rc.1 的會話 API 與界面圖標變化完成適配和驗證,要求 Node >= 22(Node 20 已 EOL)。

接入方式上,client 側註冊了 conversation.chat.assistant-actions、conversation.input.left、settings.section 三個 slot,分別對應消息操作條、輸入框工具行和設置頁,朗讀按鈕、自動朗讀開關和設置頁因此出現在原生界面的對應位置。

核心功能

逐條朗讀

每條定稿的助手消息操作條上有一個「朗讀 / Read aloud」按鈕,點擊合成並播放該條回覆:

  1. 播放中再點一次即中斷停止,不會從頭重播;
  2. 點其他消息的按鈕直接切換播放;
  3. 合成等待中再點一次可取消。

合成前會清洗 markdown,路徑、URL、長編號和代碼塊不會被讀出來。

自動朗讀

輸入框工具行有一個「自動朗讀」開關(與設置頁同步),開啓後自動朗讀頁面加載後產生的新回覆。

設置頁

入口在 Settings → 語音朗讀(Voice (Fish TTS)),可配置:

  • TTS 模型:下拉建議加手動輸入,支持 s2.1-pro-free / s2.1-pro / s2-pro 等,默認 s2.1-pro-free;
  • 音色 reference_id:必填。音色是個人數據,插件不提供默認音色;
  • API Key:AES-256-GCM 加密存儲;
  • HTTP 代理:直連不通時可填;
  • 試聽按鈕、音量滑條(默認 60%)、倍速滑條(0.5–2.0×,不變調;瀏覽器不支持時固定 1×)。

所有設置保存後立即生效,無需重啓。朗讀和試聽都走你配置的語音,可以使用自己的 Fish 音色 reference_id,包括自行克隆的音色。界面爲中英雙語,跟隨 DSH 語言設置。

安裝與啓用

從 npm 安裝(推薦):

npx @deepseek-ai/dsh plugin --profile web add dsh-fish-tts

安裝後重啓 dsh web(關掉終端重新運行 dsh web)並刷新頁面。

也可以從 GitHub 安裝,倉庫已提交 lib/ 構建產物,git 安裝無需本地構建:

npx @deepseek-ai/dsh plugin --profile web add github:MaRi23333/dsh-fish-tts

一個已知的坑:從 GitHub 版換到 npm 源時,裸包名 add dsh-fish-tts 對已裝的 git 版是靜默空操作,需改用 @latest,或先 remove 再 add:

npx @deepseek-ai/dsh plugin --profile web add dsh-fish-tts@latest

配置與首次使用

經過上面的步驟插件已裝好,接下來在設置頁完成首次配置:

  1. 打開 Settings → 語音朗讀;
  2. 填入 API Key 和音色 reference_id;
  3. 點保存設置,API Key 狀態變爲「已配置」;
  4. 點試聽驗證——未保存或音色爲空時,試聽按鈕保持置灰。

也可以在 profile 的 cordis.patch.yml 裏給 fish-tts 行加 config 作爲默認值(會被設置頁保存的值覆蓋):

- id: fish-tts
  config:
    model: s2.1-pro-free
    format: wav
    stateDir: /custom/state/dir

安全與限制

  • API Key 以 AES-256-GCM 加密落盤於 $DSH_HOME/fish-tts/settings.json,密鑰文件 key.bin 自動生成並在 Windows 上收緊 ACL;Key 不出現在任何 GET 響應、日誌或倉庫中。
  • 僅本機使用:所有 /fish-tts/* 路由拒絕非 loopback(127.0.0.1 / ::1 / ::ffff:127.0.0.1)來源的請求(403),即使宿主監聽在 0.0.0.0 也不開放遠程訪問。
  • 寫接口(synthesize/config)強制 application/json 並校驗同源/loopback Origin。
  • 代理不支持帶用戶名密碼的地址(保存時被拒絕);環境變量 HTTPS_PROXY/HTTP_PROXY 帶憑據會被忽略。
  • 合成請求文本上限 12000 字符;結果在進程內緩存,最多 200 條,重啓即清。

適用場景與注意

適合誰:已持有 Fish Audio 賬號和 Key、想用自己的音色(含自行克隆的音色)在 DSH Web GUI 裏聽回覆的用戶。

使用前注意幾點:

  • 只可使用你有權使用的音色(reference_id),未經授權不得克隆或模仿公衆人物、名人或他人的聲音;對外分發生成的音頻時,建議主動披露其爲 AI 合成內容;
  • Fish Audio 免費額度僅限個人、非商業用途,商業使用需訂閱官方付費套餐;
  • 本項目爲獨立社區項目,與 Fish Audio / Hanabi AI Inc. 無隸屬、合作或背書關係,與 DeepSeek 也無隸屬關係;
  • 插件以當前 dsh 進程權限運行,安裝前建議先檢查源碼與許可證。

結尾

回顧一下:dsh-fish-tts 把 Fish Audio 的合成能力接進 DSH Web GUI——消息旁一鍵朗讀、輸入欄自動朗讀、設置頁統一管理模型、音色和加密 Key,配置保存即生效。倉庫與目錄頁:

  • GitHub:https://github.com/MaRi23333/dsh-fish-tts
  • 社區插件目錄頁:https://www.skillhub.cn/plugins/MaRi23333/dsh-fish-tts
羽毛球分组比赛记分
小程序二维码

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

小夜