dsh-say
让你的 DSH 用你喜欢的声音开口说话、汇报内容,过长的汇报先压缩再念。角色声线不需要自己训练:一段 3-10 秒参考音就能克隆,也能直接用别人训练好的模型;不必为此装一整套 6.4 GB 的 GPT-SoVITS —— 运行时和声线都由插件自己装好。已有 GPT-SoVITS 的话也能直接接上,两者跑的是同一套声线。
安装
dsh plugin --profile web add dsh-say
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
<div align="center">
<img src="site/assets/readme-banner.png" alt="dsh-say" width="100%">
dsh-say
让你的 DSH 用你喜欢的声音开口说话、汇报内容!


[三分钟上手](#-三分钟上手) ·
[工具](#-工具) ·
[配置](#-配置) ·
[排错](#-排错) ·
[English](#english)
</div>
⚡ 三分钟上手
不需要下载任何东西。 默认走你操作系统自带的语音 —— 不用 Python、不用显卡、不用账号。
1 · 装插件
npx dsh-say
就这一条,不用参数。 它默认装进 web profile;用别的 profile 加 --profile <名字>,想看它要执行什么加 --print。
等价的手写命令(npx 那条就是替你跑这个):
dsh plugin --profile web add dsh-say
然后重启 profile —— 这一步必须由你做,命令行没法替你重启你正开着的会话。npx 跑完会把这句再说一遍,因为它只负责装,重启不了你的会话。
装完就结束。这条命令会把包装好、登记进 profile、并自动应用本包自带的组合层,tts_* 工具在重启后出现。
<details>
<summary><b>从源码装 / 用 git 地址(git 来源首次需要放行构建)</b></summary>
<br>
git clone https://github.com/fangqian616/dsh-say dsh plugin --profile web add "file:E:/path/to/dsh-say" # 或用 git 地址: dsh plugin --profile web add github:fangqian616/dsh-say
git 来源的插件靠 prepare 脚本构建,pnpm 默认拦着。dsh plugin 会直接打印出要放行的那个键 —— 把它加到 profile 目录的 pnpm-workspace.yaml 的 allowBuilds 下,再重跑一次即可。
本地 file: 路径要用绝对路径:pnpm 的工作目录是 profile 目录,相对路径 . 会指到 profile 自己。
</details>
<details>
<summary><b>它在 profile 里动什么</b></summary>
<br>
profile 根目录的 cordis.yml 是空的,它自己写着不要改它。真正的用户层是 cordis.patch.yml,但这里也不用你手写 —— 本包声明了:
"dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
dsh plugin add 识别到这个声明后,会把它列进 profile 的 dsh.profile.bundles 层栈,并在启动时套用包内那一行:
- insert:
- id: say
name: dsh-say
这是 dsh 插件的标准打包方式,所以升级、卸载、dsh plugin list 都能正常跟踪。
</details>
如果智能体已经能读到仓库,直接说一句 "装上这个语音插件" 就行。它会用 voice-setup skill 走完这一步,并且在没重启之前不会谎称装好了。
2 · 让它说话
对智能体说:
把"你好,我现在会说话了"念出来
它会调用 tts_speak,声音从音响里出来。安装到此结束。
3 · 确认后端状态
跑一下 tts_engines
selected: builtin (configured: auto) built-in: available, 3 voice(s) gpt-sovits: unavailable — no GPT-SoVITS checkout found voice packs: 0 in ~/.dsh/voice-packs
没声音时先跑这个 —— 它会指出确切原因。
4 · 想要角色声线(可选)
main 是插件本体,releases 是声线素材。
| | main(本仓库) | [Releases](../../releases/latest) |
|:--|:--|:--|
| 是什么 | 插件本体 | 推理素材:模型 + 声线 + 参考音 |
| 下载量 | 0(用你系统自带的语音) | 见下面 |
两条路,先选一条
想要角色声线,不需要先有 GPT-SoVITS。
· ONNX 那条 · GPT-SoVITS 那条
你要先准备什么 · 什么都不用 · 本机得有一个能跑的 GPT-SoVITS
声线包 · sample-onnx-v2ProPlus.zip 290.8 MB · sample-full-v2ProPlus.zip 1,343.8 MB
什么时候选它 · 本机没有 GPT-SoVITS · 已经有了:零下载,而且更快
两条路跑的是同一套声线模型,只是运行时不同(onnxruntime / PyTorch)。
sample-full-v2ProPlus.zip 里有什么
· 在包里吗 · 内容
4 个 base 模型(推理必需) · ✅ 在 · chinese-roberta、chinese-hubert、s1v3、s2Gv2ProPlus,约 1.14 GB
声线权重 + 参考音 · ✅ 在 · 约 316 MB
GPT-SoVITS 程序本身 · ❌ 不在 · 需要本机已有一个能跑的检出
Python + torch 运行时 · ❌ 不在 · 约 6 GB,分 Windows/Linux、分 CUDA 版本
sample-onnx-v2ProPlus.zip 里有什么
· 在包里吗 · 内容
ONNX 模型(推理必需) · ✅ 在 · 9 个文件,320.4 MB
参考音 + 逐字文本 · ✅ 在 · ref.wav + ref.txt
base 模型 · ➖ 不需要 · Genie-TTS 自带 hubert 和 BERT
GPT-SoVITS / PyTorch · ➖ 不需要 · 用 onnxruntime 跑
Python 环境 + Genie 资源 · ❌ 不在 · 由 install-onnx.mjs 装,约 800 MB
安装GPT-SoVITS
前置条件:本机需求 GPT-SoVITS 检出加 Python 环境。 如果没有,官方 Windows 整合包解压双击即可(下载,6.4 GB)
把 sample-full-v2ProPlus.zip 下载好,对你的 AI 说一句:
安装试听音频
它会在 Downloads 找到那个包、解压、铺好 base 模型和声线权重、登记声线包。已经存在的文件会跳过。
<details>
<summary><b>想自己动手 / AI 没有自动做</b></summary>
<br>
一条命令,不用传路径 —— 它会去 Downloads、当前目录找这个包:
node scripts/install-voice.mjs
要指定别的包或别的 GPT-SoVITS:
node scripts/install-voice.mjs --from "D:/downloads/某个.zip" --engine "D:/GPT-SoVITS"
</details>
安装 ONNX
把 sample-onnx-v2ProPlus.zip 下载好:
node scripts/install-onnx.mjs --voice
脚本自己建 Python 环境、装引擎、下运行时数据、铺声线。对 AI 说「安装试听音频」也行。
唯一要本机有的是 Python 3.9-3.13;没有的话对 AI 说一声,它会装。--check 随时复查状态。
本试用声音资源仅供学习交流,严禁用于商业用途,如有侵权,请联系作者,作者得知后会于24小时内删除。
🛠 工具
工具 · 作用
tts_speak · 短句直接念
tts_report · 长汇报:先压缩再念,避免把整篇念完
tts_engines · 诊断后端 + 返回当前人设
tts_voices · 列出或登记声线包
tts_config · 读改设置,不用碰配置文件
为什么汇报要先压缩
中文语音实测约 5 字/秒 —— 一份 500 字的汇报整篇念完要 100 秒,比读它还慢,用户会直接关掉声音。
tts_report 会先把长报告压成短稿再朗读,并返回它实际念出来的文本,方便确认没漏关键信息:
· 字数 · 约合时长
原文 · 500 · 100 秒
朗读 · 120 · 24 秒
压缩是本地句序排序,零额外模型调用。要更多细节就调大 budget。
⚙️ 配置
需要你配什么(大多数情况下是「什么都不用」)
项 · 默认 · 什么时候要动
GPT-SoVITS 目录 · 自动找 · 找不到时(见下)
声线包目录 · ~/.dsh/voice-packs · 一般不动
系统语音(默认引擎) · 用系统自带的 · 不用配
Python 环境 · 引擎目录里的 / conda / PATH 上的 · 引擎能用就不用管
profile · 你装插件时指定的那个(web 等) · 用别的 profile 时
环境变量 · 一个都不需要 · —
环境变量全都不必需。 DSH_VOICE_ENGINE_ROOT、DSH_VOICE_VOICES_DIR、DSH_VOICE_CONFIG 都只是覆盖项,设了会优先于配置文件。下面这些走配置文件就够。
GPT-SoVITS 目录是怎么找到的
自动搜索,不需要你填。 顺序是:
1. 配置里的 engines.gptSovits.engineRoot(你手动指定时)
2. 环境变量 DSH_VOICE_ENGINE_ROOT(一般不用)
3. ~/GPT-SoVITS、~/GPT-SoVITS-main、~/gpt-sovits
4. 每个盘符根目录下名字像 GPT-SoVITS… 的文件夹(所以解压到 E:\ 或 F:\ 也能找到)
5. 已经跑起来的 API(配了 serverUrl 时)
第 4 条是关键:官方整合包是个 7z,大家通常解压到空间大的盘根目录,不是 C:\。以前写死 C:\/D:\,引擎明明在那儿却报"找不到"。
真的找不到时(引擎在很深的子目录里之类),跟智能体说一句就行:
GPT-SoVITS 在 E:\tools\GPT-SoVITS-main,帮我配上
它会用 tts_config 写进 engines.gptSovits.engineRoot。不用你手改文件。
设置文件
你不用手改配置文件。 插件自己维护一份设置,存在你家目录:
~/.dsh/voice/config.json
首次加载时它会问你三个问题(声线、人设、要不要自动播报),答案直接写进去。之后想改,跟智能体说就行:
把语速调到 1.2
默认声线换成 XX
看看现在的配置
<details>
<summary><b>可用的键</b>
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:1,最后更新 2026-09-21