前言¶
在 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」按鈕,點擊合成並播放該條回覆:
- 播放中再點一次即中斷停止,不會從頭重播;
- 點其他消息的按鈕直接切換播放;
- 合成等待中再點一次可取消。
合成前會清洗 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
配置與首次使用¶
經過上面的步驟插件已裝好,接下來在設置頁完成首次配置:
- 打開 Settings → 語音朗讀;
- 填入 API Key 和音色
reference_id; - 點保存設置,API Key 狀態變爲「已配置」;
- 點試聽驗證——未保存或音色爲空時,試聽按鈕保持置灰。
也可以在 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