前言¶
在 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