前言¶
在 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.pyGPU 语音,pocket.pyCPU 回退)。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 中会出现统一语音按钮,每条助手消息旁会出现扬声器按钮。
典型用法¶
- 确保运行 DSH 的机器满足运行依赖:Python 3、所需 TTS 依赖,以及 qwen3 模型(如使用 qwen3 引擎)。
- 执行上述安装命令。
- 在会话中,当 composer 为空时点击蓝色按钮开始语音输入;Agent 回复后,点击消息旁的扬声器按钮可手动朗读。
- 在会话头部右上角开启“自动朗读”开关,随后 2 分钟内的新回复会自动朗读(仅限使用过语音输入的设备)。
- 语音轮次激活时,点击麦克风按钮可静音/取消静音;说出“pause the mic”可挂起监听但不发送。
- 若使用 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