dsh-minimax-tts:在 DSH 里用 MiniMax 朗读 assistant 消息

前言

在 DeepSeek Harness(DSH)里跑 Agent,回复往往很长:代码、链接、表格混在一起,眼睛跟不住时很难「听一遍」。外接通用 TTS 要么要你自己把消息拷出去,要么和对话流脱节。下面介绍社区插件 dsh-minimax-tts(维护者 Shiro-Design-16):只对接 MiniMax(海螺)语音合成,在每条 assistant 消息上挂朗读按钮,并可选让 Agent 登记带情绪标记的待播稿。

这是什么

dsh-minimax-tts 是 DSH 的联网类插件(目录页:SkillHub)。宿主半边提供合成路由与本地缓存;客户端半边在 Web UI 注入「播放 / 停止」按钮和插件设置页。实现为纯 ESM JavaScript,无 TypeScript、无构建步骤;当前包版本为 0.1.1(MIT)。

  • v1:手动模式——点一条读一条,设置页可调模型、音色、语速等。
  • v1.1:灵动模式——Agent 通过技能 emotion-tts 与工具 emotion_tts 登记朗读稿,仍由人点播放;不登记时按钮念消息可见正文。

明确不做:声音克隆、双音色、变声、音乐音效、流式合成、边生成边朗读等。

核心功能

手动朗读

每条 assistant 消息旁一颗按钮:未播放为播放图标,播放中为停止图标;同一时刻只播一条,新开会自动停上一条。朗读前会做文本清洗(去掉代码块、URL、emoji 等),保留 MiniMax 支持的停顿、情绪、拼音标注类标记;清洗后为空则不会请求上游。

设置与缓存

在 DSH 「设置 → 插件」 中配置 API、模型、音色、情绪、采样率、格式等;支持试听与打开本地缓存目录。合成结果按文本与参数哈希缓存到 $DSH_HOME/dsh-minimax-tts/cache/;命中缓存时不发上游请求。cleanup 可按天数、条数、总字节任一项超限淘汰旧文件。

灵动模式(可选)

emotionTts.scope 三态:off(默认,Agent 不可见)、preset(仅白名单 preset 行注册技能/工具)、global(全局注册)。工具只把稿子写入 pending/<session>.json,不触网;点击播放时先认领稿子,未命中则用可见正文 + 设置页参数。同一条消息会记入回放账本,换音色后再点仍用 Agent 那份文稿重新合成。

HTTP 接口(本机)

路由仅允许回环地址访问。典型合成示例:

curl -s -X POST http://127.0.0.1:3080/dsh-minimax-tts/synthesize \
  -H 'content-type: application/json' \
  -d '{"text":"你好,这是一次试听。","preview":true}'

成功时返回 url,拼在 DSH 的 origin 后即可播放;另有 GET/POST /config、GET /audio/<hash>.<ext>、缓存查询与清理、/pending 与 /pending/claim 等(详见仓库 README)。

安装与启用

profile 目录为 $DSH_HOME/profiles/<name>。官方说明的三种等价做法:在 DSH「插件」页添加本仓库目录(写成 link: 依赖)、或直接改 profile 的 package.json,并务必把包名写进 dsh.profile.bundles(dsh plugin add 只写依赖,bundle 清单才是挂载入口)。在 profile 目录执行包管理安装后重启 DSH。

{
  "dependencies": {
    "dsh-minimax-tts": "link:<本仓库绝对路径>"
  },
  "dsh": {
    "profile": {
      "bundles": ["dsh-minimax-tts"]
    }
  }
}

运行环境要求 Node ^22.19.0 || >=24(见 package.json 的 engines)。

配置要点

配置落盘 $DSH_HOME/dsh-minimax-tts/config.json(权限 0600)。常用字段包括:

字段 默认 说明
baseUrl https://api.minimax.cn 也可使用其他官方 API 域名
apiKey 空 顺序:config.apiKey → 环境变量 MINIMAX_API_KEY → ~/.dsh/.env
model speech-2.8-hd 支持 2.8 / 2.6 / 02 / 01 等系列
voices 默认 female-shaonv isDefault: true 为默认音色;更多 voice_id 可参考 MiniMax 试听页
emotionTts { scope: 'off' } 灵动模式开关见上文

也可用 POST /dsh-minimax-tts/config 传 { patch } 浅合并(voices 需整体替换)。

开启 preset 白名单时,在 agent preset 行列表增加一行,并将 emotionTts.scope 设为 preset:

- id: dsh-minimax-tts-skill
  name: 'dsh-minimax-tts'
  config: { role: skill-only }

典型用法

  1. 按上文装好 bundle,在插件设置里填入 MiniMax apiKey,选模型与默认音色,用「试听」确认连通。
  2. 在对话里让 assistant 回复后,点该条消息旁的播放按钮;播放中再点即停止。
  3. 若需要 Agent 登记念稿:把 emotionTts.scope 设为 preset 或 global,配置 skill-only 行,并在人格提示中说明每轮可用 emotion-tts 登记;播放时优先使用认领到的稿子。

适用场景与注意

适合已在 DSH 中使用 MiniMax 账号、希望就地听 assistant 长回复的开发者。灵动模式适合需要 (laughs)、停顿标记等、又不想把标记写进用户可见正文的场景。

插件以当前 DSH 进程权限运行,会持有 API Key 并写本地缓存;安装前请自行审阅 GitHub 源码 与 MIT 许可证。SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-minimax-tts 把 MiniMax TTS 嵌进对话流:手动一点即读,可选让 Agent 登记待播稿而不强迫自动播报。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye