dsh-doubao-tts:在 DSH 里为助手回答接上豆包流式语音合成

前言

在 DeepSeek Harness(DSH)里跑智能体或长对话时,助手回复往往很长:代码块、Markdown、链接混在一起。若要把某一条已定稿的回答念出来,常见做法是切到浏览器朗读、或自己写脚本调 TTS API,再手动对齐「是哪条消息、正文是什么」。DSH 的插件体系允许在 Web GUI 的固定槽位挂 UI、在宿主进程注册路由;dsh-doubao-tts 走这条路,把火山引擎豆包「双向流式语音合成 V3」接到对话界面:每条助手消息旁有朗读入口,点一下即按该条正文合成并播放,同一段文本合成结果会落盘缓存。

下面按「是什么 → 能做什么 → 怎么装 → 怎么用 → 注意点」说明。事实以仓库 README 与 package.json 为准;社区目录页简介若与仓库不一致,以 GitHub 为准。

这是什么

  • 名称:dsh-doubao-tts(npm 包名同仓库名)
  • 维护者:qin-yu-1314
  • 分类:模型推理(目录站归类);实际能力是 语音合成(TTS),不是接入豆包语言模型对话。
  • 版本(资料中明确):0.2.2
  • 许可证:MIT
  • 最低 DSH:>= 0.1.5-rc.2(需要 slot 系统与 settings.section)
  • 适用 profile:web / desktop(桌面版也可在应用内插件页管理)

一句话:在 DSH Web GUI 中,为已定稿的助手回答增加朗读按钮,并在侧栏设置里配置火山引擎大模型语音合成凭据与音色。

核心功能

界面侧

  1. 向 conversation.chat.assistant-actions 注入朗读按钮(与官方反馈类插件共用同一 slot);另挂 conversation.chat.turnTail,在动作行默认悬停才显示时仍保留常显入口。
  2. 客户端 bundle 手写 __ModuleLoader__,只 require('react'),无需单独构建步骤。
  3. 未配置凭据时点击会给出红色提示,而不是静默失败。

服务端侧

  1. 注册 /dsh-doubao-tts/* 路由,按火山 v3 二进制帧协议 WebSocket 合成,边收边以 chunked 流式回给浏览器。
  2. 客户端只传 sessionId + messageId(或按 seq / turn);服务端优先查活会话,再回落读 $DSH_HOME/sessions/<slug>/<sessionId>/session.v4.jsonl.zstd,并对正文做朗读清洗(去掉代码块、Markdown 记号,URL 换成「链接」)。
  3. 同一段文本只向火山付费合成一次,音频落盘缓存。

设置页

侧栏 「设置」→「豆包语音合成」(settings.section 槽):鉴权、音色 Resource ID、音频格式/采样率/语速/音量、WebSocket 端点等;支持保存、测试合成、清空缓存。密钥在 GET 接口只回掩码,改配置有约 5 秒缓存,保存后一般不必重启进程。

整体数据流(README 示意):

浏览器                    DSH 宿主(插件服务端)              火山引擎
┌──────────────┐  GET    ┌──────────────────────────┐  WSS  ┌────────────────┐
│ 朗读按钮      │ ──────► │ /dsh-doubao-tts/speak     │ ────► │ bidirection v3 │
│ <audio> 播放  │ ◄────── │ ① 按 messageId 取正文     │ ◄──── │ 二进制帧 + 音频 │
└──────────────┘ 音频流   │ ② 合成 ③ 落盘缓存         │       └────────────────┘
                          └──────────────────────────┘

安装与启用

前置条件:在火山引擎控制台开通「大模型语音合成」,自备 API Key,或 App ID + Access Key / Access Token。插件无运行时 npm 依赖(自带 WebSocket 实现)。

推荐:CLI 从 Git 安装(web profile 示例)

桌面版将 --profile web 换成 desktop:

dsh plugin --profile web add git+https://github.com/qin-yu-1314/dsh-doubao-tts

本机没有 git 时,可使用 Release 压缩包(README 给出的示例 URL 对应版本 0.2.2):

# dsh plugin --profile web add "https://github.com/qin-yu-1314/dsh-doubao-tts/releases/latest/download/dsh-doubao-tts-0.2.2.tgz"

桌面版本地目录

README 还写了三种本地安装方式:侧栏「插件」页填目录绝对路径、link: 的 CLI(需完全退出 Desktop)、或 node tools/install-local.mjs --apply。装好后新增 bundle 可由 HMR 热加载,但浏览器页面需刷新一次才会拉新客户端 bundle;若改的是已加载包的 JS,需重启 DSH 进程。

装好后在 「设置」→「豆包语音合成」 填密钥与音色,点「测试合成」验证。

配置凭据

可复制仓库中的 volc_tts.env.example 为 %USERPROFILE%\.dsh\volc_tts.env(Linux/macOS 用户将路径换为各自主目录下的 .dsh/volc_tts.env),或使用环境变量。README 列出的字段如下:

字段 说明
VOLC_API_KEY 新版 API Key(与下面一对二选一)
VOLC_APP_ID + VOLC_ACCESS_TOKEN 老版密钥对;也接受 VOLC_ACCESS_KEY
VOLC_RESOURCE_ID 须与音色商品一致,例如合成 2.0 音色用 seed-tts-2.0,1.0 公版用 volc.service_type.10029
VOLC_SPEAKER 音色 ID,从控制台音色列表复制

凭据在 火山引擎控制台 → 语音技术 → 大模型语音合成 → 开通管理获取。改完配置后可用探针验证(README 示例为 Windows PowerShell,端口以本机 DSH 为准):

Invoke-WebRequest http://127.0.0.1:19387/dsh-doubao-tts/probe -Method POST -UseBasicParsing | Select-Object -Expand Content

返回 {"ok":true,"ms":…,"bytes":…} 表示通道可用。

典型用法

在 GUI 里

  1. 完成安装并刷新页面。
  2. 在助手消息动作行(复制/分支一侧)或 turn 尾部找到喇叭图标。
  3. 点击后对当前消息正文发起合成并播放;已缓存的同文本会直接读缓存。

HTTP 路由(节选)

路由 方法 用途
/dsh-doubao-tts/speak GET/POST sessionId + messageId,或 sessionId + seq,或 text=;返回音频
/dsh-doubao-tts/status GET 配置是否齐全、音色、缓存统计、能力清单
/dsh-doubao-tts/probe POST 用测试句真实合成一次
/dsh-doubao-tts/settings GET/POST 设置页读写 env(密钥掩码)

命令行工具(不开 GUI)

仓库 tools/ 下脚本(README 示例):

node tools/probe.mjs
node tools/speak-message.mjs --out reply.mp3
node tools/speak-message.mjs --session <id> --seq <n>
node tools/speak-message.mjs --text "你好" --out a.mp3

排障

插件会写不含凭据的自检报告:%USERPROFILE%\.dsh\doubao-tts-selfcheck.json(以该路径为准)。可区分「服务端已加载但客户端 bundle 未执行」「slot 注册失败」「仅缺凭据」等情况。亦可运行:

node tools/verify-install.mjs

匿名探针:/status 返回 401 通常表示路由已注册、被宿主信任栅栏拦截,属预期;404 表示插件服务端未加载。

适用场景与注意

适合谁:已在 DSH 里用 Web/desktop 对话,希望把助手回复用豆包/火山 Seed-TTS 朗读、且愿意自备火山语音合成凭据的开发者。

注意:

  1. 插件在当前 DSH 进程权限下运行,会读会话日志、写缓存与 env;安装前应阅读源码与 MIT 许可证,自行评估信任边界。
  2. 朗读会调用火山按量计费接口;Resource ID 与音色不匹配会报错(README 提到错误码 55000000)。
  3. DSH 社区目录(SkillHub)是独立站点,与 DeepSeek / 幻方无官方从属关系;安装来源以你信任的 Git URL 或 Release 包为准。
  4. 目录页一句话简介若写成「语言模型」「阅读对话」,与仓库 TTS 定位不符时,以 GitHub README 为准。

结尾

dsh-doubao-tts 把火山豆包双向流式语音合成 V3 嵌进 DSH 对话 UI:槽位上的朗读按钮、设置页、按 messageId/seq 取正文与流式播放、磁盘缓存,构成一条可复现的接入路径。需要细节、路由表与本地安装脚本说明时,直接看仓库 README。

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

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

Xiaoye