前言¶
在 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 行。
典型用法¶
- 按上一节安装并重启
dsh web或桌面应用。 - 打开 General,在 Read aloud 中选择 Service、Language、Voice,按需调整语速、音量、音高;需要时可打开 Skip code,用 Test voice 确认音色。
- 在对话中等待助手回复完成,点击该消息操作行上的播放按钮;再次点击停止。
无需额外 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 目录页。