中文EN

dsh-say

voice已测通过npmMIT

让你的 DSH 用你喜欢的声音开口说话、汇报内容,过长的汇报先压缩再念。角色声线不需要自己训练:一段 3-10 秒参考音就能克隆,也能直接用别人训练好的模型;不必为此装一整套 6.4 GB 的 GPT-SoVITS —— 运行时和声线都由插件自己装好。已有 GPT-SoVITS 的话也能直接接上,两者跑的是同一套声线。

下载量 / Downloads
1,260
依赖体积 / node_modules
0.82 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

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 用你喜欢的声音开口说话、汇报内容!

![tests](https://github.com/fangqian616/dsh-say/actions/workflows/tests.yml)

![license](LICENSE)

[三分钟上手](#-三分钟上手) &nbsp;·&nbsp;

[工具](#-工具) &nbsp;·&nbsp;

[配置](#-配置) &nbsp;·&nbsp;

[排错](#-排错) &nbsp;·&nbsp;

[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

链接

GitHub · Homepage · npm

同类插件