朗读助手回复(仅支持 Fish Audio API,需自备 Key):逐条朗读、自动朗读开关,设置页可配模型、音色 reference_id、加密 API Key 与代理。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-fish-tts
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:MaRi23333/dsh-fish-tts
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
中文 | English
English: dsh-fish-tts is a third-party TTS plugin for the DeepSeek Harness Web GUI — Fish Audio API only, bring your own key: a per-message "Read aloud" action, an auto-read toggle in the composer, and a settings page for model / voice / encrypted API key / proxy. Bilingual UI (zh/en). See README.en.md for the full English version.
简介
面向 DeepSeek Harness(DSH)Web GUI 的第三方语音合成(TTS)插件:为每条助手回复提供一键朗读,输入栏带自动朗读开关,模型 / 音色 / 加密 Key / 代理均可配置。仅支持 Fish Audio API,需自备 API Key。 使用你自己的 Fish 音色(reference_id,含自行克隆的音色)——朗读、试听都走你配置的语音。
30 秒对比:与常见 Edge TTS 朗读插件
| 对比项 | dsh-fish-tts(本插件) | 常见 Edge TTS 朗读插件 |
|---|---|---|
| 合成引擎 | Fish Audio 官方 API(仅支持;需自备 Key) | 微软 Edge 内置语音 |
| 音色 | 你自己的音色 reference_id(含自行克隆的音色,须有使用权限) |
Edge 内置固定音色库 |
| API Key | 必须自备(设置页 AES-256-GCM 加密保存) | 无需 |
| 适合谁 | 已有 Fish Audio 账号、想要自己或克隆音色的用户 | 想免费快速试用、固定音色即可的用户 |
功能
- 朗读按钮:每条定稿的助手消息操作条里有一个「朗读 / 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 加密存储在本机
$DSH_HOME/fish-tts/settings.json,密钥文件key.bin自动生成并在 Windows 上收紧 ACL;Key 不会出现在任何 GET 响应、日志或仓库中) - HTTP 代理(例如
http://127.0.0.1:7890,直连不通时可填) - 试听按钮、自动朗读开关、音量滑条(默认 60%)、倍速滑条(0.5–2.0×,不变调;浏览器不支持时固定 1×)
- 双语界面(中文 / English,跟随 DSH 语言设置;en 词条与 zh 完全对齐)。
界面截图
安装
一条命令,从 npm 安装(推荐):
npx @deepseek-ai/dsh plugin --profile web add dsh-fish-tts
然后重启 dsh web(关掉终端重新运行 dsh web)并刷新页面,打开 Settings → 语音朗读。
其他安装方式:
# 从 GitHub 安装(git-hosted 插件会在安装时构建)
npx @deepseek-ai/dsh plugin --profile web add github:MaRi23333/dsh-fish-tts
# 从本地目录安装
git clone https://github.com/MaRi23333/dsh-fish-tts.git
cd dsh-fish-tts
pnpm install && pnpm run build
npx @deepseek-ai/dsh plugin --profile web add /absolute/path/to/dsh-fish-tts
仓库已提交
lib/构建产物,git 安装无需本地构建;改源码后运行pnpm run build再重启即可。
从 GitHub 版换到 npm 源:裸包名
add dsh-fish-tts对已装的 git 版是静默空操作(pnpm 判定同名依赖已满足)。请改用npx @deepseek-ai/dsh plugin --profile web add dsh-fish-tts@latest,或先remove再add。
安装刚发布的 npm 版本时,pnpm 的供应链保护可能自动在 profile 的
pnpm-workspace.yaml写入minimumReleaseAgeExclude: [dsh-fish-tts@…],属正常行为,不影响使用。
安装后验证
- 打开 Settings → 语音朗读(Voice (Fish TTS));
- 填入你的 API Key 和音色
reference_id; - 点 保存设置(API Key 状态变为「已配置」);
- 点 试听——听到你的音色朗读测试句,安装即成功。
「试听」按钮会调用一次真实合成,一次验证 Key、音色与网络代理配置是否就绪;未保存或音色为空时「试听」保持置灰。
配置
首次使用:打开 Settings → 语音朗读,填模型、音色、API Key(Fish Audio 的 key),必要时填代理,保存后用「试听」验证。所有设置在保存后立即生效,无需再次重启。
也可以在 profile 的 cordis.patch.yml 里给 fish-tts 行加 config(会被设置页保存的值覆盖):
- id: fish-tts
config:
model: s2.1-pro-free
format: wav
stateDir: /custom/state/dir
配置项
| Key | 默认 | 说明 |
|---|---|---|
model |
'' |
默认模型(设置页保存值优先) |
voice |
'' |
默认音色 reference_id(设置页保存值优先) |
format |
wav |
wav / mp3 / opus / pcm |
apiKey |
'' |
一般不填;优先使用设置页加密保存的 Key,其次环境变量 FISH_API_KEY |
apiKeyFile |
'' |
读取指定 dotenv 文件的 FISH_API_KEY |
proxy |
'' |
HTTP(S) 代理(设置页保存值优先) |
stateDir |
$DSH_HOME/fish-tts |
设置/密钥文件目录 |
安全
- API Key 只以加密形态落盘(AES-256-GCM,每机随机密钥
key.bin,0600/ACL 收紧),不写入仓库、日志或任何 GET 响应。 - 写接口(synthesize/config)强制
application/json并校验同源/loopback Origin,杜绝跨站表单盗刷。 - 仅本机使用:所有
/fish-tts/*路由拒绝非 loopback(127.0.0.1 / ::1 / ::ffff:127.0.0.1)来源的请求(403),即使宿主监听在 0.0.0.0 也不开放远程访问。 - 代理不支持带用户名密码的地址(
http://user:pass@host:port会在保存时被拒绝);环境变量HTTPS_PROXY/HTTP_PROXY若带凭据同样会被忽略(不泄露、无回退),请改用无凭据的代理或直连。 - 代理地址、模型、音色均为用户本机设置,仓库不携带任何个人信息。
- 合成请求的文本上限 12000 字符;结果在进程内缓存(最多 200 条),重启即清。
开发
pnpm install
pnpm run typecheck
pnpm run test # node:test 单元/集成测试(上游 Fish API 使用本地 mock,不触网)
pnpm run build # host: lib/index.js;client: lib/client.js(ModuleLoader CJS closure)
pnpm run smoke # host 入口 + client ModuleLoader 冒烟
pnpm run check:pack # npm pack 内容白名单校验
要求 Node >= 22(Node 20 已 EOL)。CI(
.github/workflows/ci.yml)在 Node 22 与 24 上执行全部门禁,并校验lib/构建产物与提交一致。
- host 侧在
src/index.ts(Node,注册/fish-tts/*路由与设置存储) - client 侧在
src/client/(React,注册conversation.chat.assistant-actions、conversation.input.left、settings.section三个 slot) - 已针对 DSH
0.1.2-rc.1的会话 API 与界面图标变化完成适配和验证;其他版本如接口漂移请对照 deepseek-harness 仓库 相应 tag 调整。
License
合规与第三方声明
- 本项目是第三方开源插件,与 Fish Audio / Hanabi AI Inc. 无任何隶属、合作或背书关系。"Fish Audio" 为其权利人的商标,此处仅为描述性使用(说明本插件所对接的服务)。
- 本插件不分发、不托管任何 API Key;请使用你自己的 Fish Audio 账号与 Key,并妥善保管。
- Fish Audio 免费额度仅限个人、非商业用途;商业使用请订阅官方付费套餐。详见 Terms of Use。
- 仅可使用你有权使用的音色(reference_id)。未经授权,不得克隆或模仿公众人物、名人或他人的声音。详见 Acceptable Use Policy。
- 对外分发生成的音频时,建议主动披露其为 AI 合成内容,不得误导听众认为是真人真实发言。
- 使用本插件即表示你同意遵守 Fish Audio 的全部服务条款;条款如有更新,以官方页面为准。
独立社区项目,与 DeepSeek 无隶属关系,亦未经其认可。DeepSeek 与 DeepSeek Harness 商标归各自所有者所有。 Independent community project — not affiliated with or endorsed by DeepSeek.
链接
同类插件
PolinniZhong/dsh-omi-voice★ 74
DeepSeek Harness 对话内朗读:点一下即可朗读、暂停、继续 AI 回复,豆包 TTS 自然音色(BYOK),只读最终回答并过滤代码、表格与图形,本地引擎,插件零 Key。
PensiveFei/dsh-voice-scribe★ 34
面向 Web UI 的语音输入插件:点按 Alt(或 Alt+空格)开始/停止听写,支持浏览器内置 Web Speech(零配置)或 OpenAI 兼容云端 ASR,可选经 DSH 已配置模型润色,带设置页。
1624318455/dsh-plugin-tts★ 21
用免费 Edge TTS 或你自己的 RVC 音色朗读 AI 回复:消息朗读与自动朗读、长文自适应分块渐进播放(无缝衔接)、音色包仓库一键安装、便携 RVC 运行时。
WizisCool/dsh-ears★ 21
面向 DeepSeek Harness (dsh) 的语音输入插件:输入框的麦克风按钮把语音转成草稿文本,支持多种语音识别后端,可选经 dsh 自有 LLM 路由润色,并带原生设置页。
PerryLink/dsh-talk★ 15
DeepSeek Harness 的语音输入输出:麦克风语音转文字与文字转语音。
qishuilalala/dsh-voice-mode#dsh-voice-mode★ 15
DeepSeek Harness Web UI 全双工语音对话:按钮或 Ctrl+Shift+V 进入,持续聆听(停顿自动发送)或按住说话,zipformer2 流式识别入可编辑草稿、可选唤醒词;回复按句 Edge TTS 朗读并显示实时字幕,开口即打断播放与回合(真 barge-in);识别模型本地推理、Edge TTS 在线合成,无需 API Key。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。