dsh-voice:DSH 双向语音插件

前言

在 DSH(DeepSeek Harness)的 Web 应用中,如果希望让智能体既“听得见”也“说得响”,通常需要组合多个插件或自行实现语音输入/输出链路。现有的 dsh-voice-chat 套件和旧版 dsh-voice-output 插件都已不再维护。dsh-voice 是一个独立的双向语音插件,将语音输入与输出整合为一个统一的组件,提供统一的语音按钮、自动朗读和独立的 TTS 服务器。

插件定位

  • 名称:dsh-voice
  • 维护者:martindye
  • 仓库:https://github.com/martindye/dsh-voice
  • 版本:1.0.8(截至 2024 年 10 月)
  • 定位:DSH Web 应用的自包含双向语音插件,提供语音输入、消息朗读和自动朗读功能,内置 TTS 服务器。

核心功能

语音输入

  • 统一按钮:34 px 蓝色按钮。空草稿时为语音录入;输入中显示发送箭头;Agent 运行或系统朗读时显示停止方块;语音轮次激活时显示关闭叉号。
  • 持续监听:回复结束后麦克风自动重新打开;自动打开但未识别到内容时会安静重试几次。
  • 语音暂停命令:说出“hold the mic”“pause the mic”“stop listening”可挂起监听但不发送。
  • 通话静音:语音轮次激活时,录音按钮变为静音/取消静音切换(静音时显示红底白字);静音后音频不再送入识别器,语音活动计时器冻结。

语音输出

  • 每条助手消息旁的扬声器按钮:点击朗读或停止。
  • 自动朗读:2 分钟内的新回复,如果设备已开启自动朗读开关且在该设备上使用过语音输入(标记为 dsh.voice-chat.v1),则自动朗读。不依赖 PC 端桥接,各设备朗读自己显示的内容。
  • 设备级自动朗读开关:会话头部右上角有一个开关,开启时显示绿点(表示该设备已“语音就绪”),开关状态在浏览器内持久化。
  • 文本处理:从会话日志中解析文本,去除代码、链接和 Markdown 后再进行语音合成。

架构与依赖

  • 源码目录:
  • src/:插件源码。src/index.ts(宿主入口),src/tts-host.ts(TTS 监控与语音准备,宿主侧),src/client/(浏览器侧:语音输入、扬声器按钮、头部开关、播放)。
  • tts/:插件自带的 TTS HTTP 服务器(server.py)及引擎(qwen3.py GPU 语音,pocket.py CPU 回退)。
  • bin/tts-server.exe:qwen3 引擎打包的 qwentts.cpp 服务器(若系统中已有兼容的驻留服务在 127.0.0.1:8095,则优先使用)。
  • ref_voices/:qwen3 引擎克隆的参考音色(pocket、warm-brit),均为合成音色,不包含真人录音。
  • lib/:构建产物(lib/index.js 宿主侧,lib/client.js 浏览器侧),通过 pnpm bundle 生成。
  • tests/:vitest 客户端测试(jsdom):语音输入音频管线、波形、带 trace 文件的对话模拟。
  • 运行依赖(DSH 所在机器):
  • Python 3(可通过 DSH_VOICE_PYTHON 覆盖),需安装 numpy、requests,CPU 回退引擎需 pocket-tts。
  • TTS 服务器按需启动在 127.0.0.1:8189(可通过 DSH_VOICE_TTS_PORT 覆盖),由插件宿主监控。
  • qwen3(GPU)模型位于 ~/.dsh/voice-chat/models/qwen3(talker + tokenizer GGUF),引擎选择通过共享配置文件 ~/.dsh/voice-chat/consent.json("engine": "qwen3" | "pocket")决定;存在模型时默认 qwen3。
  • 宿主日志:~/.dsh/logs/voice-tts.log。

安装与启用

插件通过 npm 发布,包含预构建产物,无需本地构建步骤。

dsh plugin --profile <profile> add @martindye/dsh-voice

示例:dsh plugin --profile web add @martindye/dsh-voice 用于 Web 应用。安装后重启 Web 宿主(或启动宿主)并打开应用:composer 中会出现统一语音按钮,每条助手消息旁会出现扬声器按钮。

典型用法

  1. 确保运行 DSH 的机器满足运行依赖:Python 3、所需 TTS 依赖,以及 qwen3 模型(如使用 qwen3 引擎)。
  2. 执行上述安装命令。
  3. 在会话中,当 composer 为空时点击蓝色按钮开始语音输入;Agent 回复后,点击消息旁的扬声器按钮可手动朗读。
  4. 在会话头部右上角开启“自动朗读”开关,随后 2 分钟内的新回复会自动朗读(仅限使用过语音输入的设备)。
  5. 语音轮次激活时,点击麦克风按钮可静音/取消静音;说出“pause the mic”可挂起监听但不发送。
  6. 若使用 qwen3 引擎,TTS 服务器会自动启动并连接 GPU 模型;若使用 Pocket,则只预热 CPU 引擎且不支持 GPU 回退。

注意事项

  • 插件以当前 DSH 进程的权限运行,安装前建议检查源码与许可证。
  • 需要浏览器授予麦克风权限以进行语音输入;语音识别模型会在首次使用时从 DSH 主目录拉取。
  • 自动朗读依赖设备侧状态(dsh.voice-chat.v1 标记),同一浏览器内多标签页会选举一个自动朗读者,不会同时朗读同一条回复(重启后恢复)。
  • TTS 服务器与引擎配置影响资源占用与语音质量,建议根据硬件情况选择引擎(GPU 模型在支持环境下优先使用 qwen3)。

小结

dsh-voice 将 DSH Web 应用的语音输入与输出收束为一个统一的插件,提供一致的 UI 交互、自动朗读与独立的 TTS 服务器。对于需要在 Web 端实现双向语音对话的开发者,这是一个可快速接入的方案。更多细节与源码可参考:https://github.com/martindye/dsh-voice

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

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

Xiaoye