dsh-plugin-speech:在 DeepSeek Harness 里朗读助手回复

前言

在 DeepSeek Harness(DSH)里调试智能体时,长回复往往要盯着屏幕逐段扫读。浏览器本身没有「把当前这条助手消息读出来」的能力;若把文本丢给系统朗读或外接 TTS 工具,又要手动复制、且很难跟消息气泡上的播放/停止状态对齐。社区维护者 NakamuraIA 发布的 @nakamuraia/dsh-plugin-speech 把朗读做进 Harness 界面:每条已完成的助手消息在操作栏多一个播放控件,合成与密钥放在 Host 侧,浏览器只 POST 文本并流式播放返回的音频。

这是什么

@nakamuraia/dsh-plugin-speech(npm 包名,GitHub 仓库 NakamuraIA/dsh-plugin-speech)是 DSH 的客户端类插件,当前发布版本 0.2.1,许可证 MIT。简介与 README 一致:在 DeepSeek Harness 中为助手回复提供文本转语音(TTS),并支持流式播放。

插件依赖 Harness 表面(dsh web 或桌面应用)0.2.0-rc.2 及以上;更早版本缺少插件自有的 Cordis entry 配置与 ctx.configForms,设置页无法按当前方式工作。除访问所选语音服务所需的网络外,无需下载模型;默认的 Microsoft Edge 提供商也不需要账号或 API Key。

核心功能

消息级朗读

每条已完成的助手消息,在其操作行会出现播放控件。点一次开始朗读该条回复,再点一次停止。整段回复通过一次请求交给 TTS 服务,Host 在服务仍在合成时就把音频字节流式回传;浏览器先缓冲约 1.5 秒(用于覆盖首包抖动),再开始出声。README 给出的体验量级是:从点击到约 1 秒内开始播放,两分钟的朗读内容在随后约两秒内陆续到达并继续播放。

语音服务与扩展

当前 README 列出的提供商以 Microsoft Edge 为默认:无需 Key,可使用该服务发布的完整音色目录(各语言)。新增提供商的方式是在 src/providers/ 下增加目录,并在 src/providers/registry.ts 增加一行注册;设置页会根据提供商声明的字段自动生成表单。

Edge 握手需要短时效的 Sec-MS-GEC token。2026 年 10 月 endpoint 切换到第二代 token 算法;仍用第一代时服务会返回裸 403(浏览器侧常见为 Edge TTS WebSocket error: Unexpected server response: 403,表现为点了播放却没有声音)。插件在 src/providers/edge/gec.ts 复现当前接受的生成方式,并由 server.ts 注入 msedge-tts 的 URL 构建逻辑。若朗读突然失效,README 建议优先排查 token 是否过期——这是插件里唯一可能在不改代码的情况下失效的部分。

设置项(General → Read aloud)

在 General 设置里有一行 Read aloud,对应插件 entry 配置(命名空间 row id 为 ui-speech),包括:

  • Service:选用哪家 TTS 提供商。
  • Language、Voice:音色目录中的条目。
  • Speed、Volume、Pitch:每次请求一并传给服务。
  • Skip code:是否跳过围栏代码块与行内代码的朗读。
  • Test voice:在设置页用当前选项试读一段示例(无论是否已保存)。

朗读前会对正文做清洗:表格与粘贴的 spreadsheet 从不朗读;Skip code 只决定围栏/行内代码是否读出声(关闭时会读代码本身,仅去掉 fence)。链接保留可见文字、去掉 URL;emoji、引号与孤立符号会丢弃;句读标点保留以便停顿。配置写入 profile patch 中该 entry 旁,而非独立 settings 文档;Host 拒绝的写入会保留原值并在界面上提示。

架构要点

合成在 Host 完成(浏览器无法安全保存 Key,也受 CORS 限制)。浏览器 POST /speech/speak { text },Host 按自身 entry 配置选 provider 并转发到服务,音频流回浏览器播放。可编辑的配置项标记为 .volatile(),保存后 Host 无需重载即可读到与浏览器一致的新值。

安装与启用

本包声明 dsh.bundle.patch,以 profile bundle 方式安装:包管理器链接包、launcher 将其追加到 profile 的 dsh.profile.bundles,bundle 的 patch 层插入插件行;安装后通常即启用(bundle 把「安装」与「在 profile 里启用」合并为一步)。安装后需要重启 Harness 表面:Host 路由在插件加载时注册,新装的 out-of-tree bundle 不会被正在运行的进程自动挂载。

桌面应用:侧栏 → Plugins → Add plugin,可填写以下之一:

  • @nakamuraia/dsh-plugin-speech(npm)
  • github:NakamuraIA/dsh-plugin-speech
  • 本地 checkout 的绝对路径

CLI(与上面等价,且带 profile 作用域):

dsh plugin --profile web add github:NakamuraIA/dsh-plugin-speech

临时叠加、不写入 profile 安装(与 bundle 安装不要同时使用,否则会 duplicate loader entry id):

dsh web --patch ./cordis.patch.yml

cordis.patch.yml 与 bundle 应用的 patch 相同;profile 层更适合覆盖行内 config,而不是重复插入 ui-speech 行。

典型用法

  1. 按上一节安装并重启 dsh web 或桌面应用。
  2. 打开 General,在 Read aloud 中选择 Service、Language、Voice,按需调整语速、音量、音高;需要时可打开 Skip code,用 Test voice 确认音色。
  3. 在对话中等待助手回复完成,点击该消息操作行上的播放按钮;再次点击停止。

无需额外 API Key 即可使用默认 Edge 提供商;若更换 voice,注意部分音色(如 schema 默认的 pt-BR-AntonioNeural)会在句末自带约 0.9 秒静音,属服务返回的音频特性,与插件播放逻辑无关。

适用场景与注意

适合:长时间阅读 Harness 对话、无障碍或「边听边核对」调试智能体回复、需要在客户端一键朗读整段 Markdown 回复的场景。

注意:

  • 插件 Host 部分以当前 DSH 进程权限运行,并向所选 TTS 服务发起网络请求;安装前应阅读仓库源码与 MIT 许可证,确认可接受的数据出站范围。
  • Edge token 算法随微软 endpoint 变化可能再次失效,需关注上游 issue 或插件更新。
  • 社区插件目录 skillhub.cn 上的条目 与 GitHub 仓库由维护者发布;该目录是社区生态站点,与 DeepSeek / 幻方无官方从属关系,也不是官方应用商店。

结尾

dsh-plugin-speech 把「读这条助手回复」收成消息气泡上的一个控件,并把 TTS 握手与流式合成放在 Host,浏览器只负责播放字节流。若要查看详情或提交 issue,可访问 GitHub:NakamuraIA/dsh-plugin-speech 与 SkillHub 目录页。

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

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

小夜