dsh-voice-dialog:DSH 连续语音对话与自动朗读

前言

在 DeepSeek Harness(DSH)里做智能体,输入多半仍落在键盘和 Composer 文本框。若希望「开着麦、边说边听回复」,常见做法是单独接 ASR/TTS 脚本,或在浏览器里切模式、挂浮层。维护者 ggfgfgf-on 的 dsh-voice-dialog 以客户端插件形式把连续听写、回复朗读、软打断和多人声纹区分收进 Composer 的一个麦克风入口,并与 DSH 的 session.prompt、语音 STT 宿主行和 llm/stream 对齐。下面介绍它是什么、能做什么,以及如何安装与使用。

这是什么

dsh-voice-dialog 是 DSH 社区插件(分类:客户端),仓库 ggfgfgf-on/dsh-voice-dialog,当前 package 版本 0.8.1,许可证 MIT。简介可概括为:Composer 里一个麦克风开启连续语音对话;麦克风打开时自动朗读助手回复;模型可控制语速与音量;用户插话时默认压低朗读而非硬切会话,必要时再由并行 organizer 或口令决定 steer / queue / ignore。

SkillHub 目录页:https://www.skillhub.cn/plugins/ggfgfgf-on/dsh-voice-dialog(社区独立站点,与 DeepSeek / 幻方无官方从属关系)。

核心功能

一个麦克风,无模式切换

Composer 麦克风负责开始和停止连续监听,没有额外面板或第二套工具栏。监听中:左侧关闭按钮停止监听,但已排队朗读可播完;方形挂断按钮会打断当前播放,并取消主机上仍在合成的句子。

连续听写与严格 FIFO 投递

内置 VAD 在约 1.4 s 静音后结束一句,经 DSH speech-to-text 转写。默认可并行识别最多 3 路 utterance,投递按说话顺序走 严格 FIFO。已登记「主人」的语音默认以 session.prompt(..., "queue") 发送,等当前回复结束;设置可改为 steer 立即插话。其他说话人默认排队,也可配置为 steer 或 ignore。麦克风开门阈值可调,适配安静房间或嘈杂环境。

启用可选的 MossFormer2 同时说话分离时,每路分离源各自约 1.6 s 静音断句,两人叠说时可拆成两路识别与声纹标签。

边听边读

主机监听 llm/stream,把助手文本按句切分,用 Edge TTS 合成并通过 SSE 推流;首句过长时可在首个自然逗号处提前开读。只有麦克风打开时才接受新句入队;关麦后不再接新句,但已排队音频会播完。Edge 不可达时回退到浏览器系统语音,句子不会静默丢失。

软打断与并行 organizer

用户开口时朗读会被 duck(压低),默认不直接 cancel 整段回复。主人新一句会先进入 FIFO 队头,同时可选的 parallel speech organizer 用独立、带版本的模型调用(purpose voice-organizer,不会被朗读)决定当前条目是 interrupt、queue 还是 ignore:interrupt 会在 250 ms 内淡出当前句并以 steer 投递;超时、畸形输出或缺少模型目标时回退为 queue。用户说 「打断 / 停一下」 会取消 organizer 请求、停播、清空未发送队列并立即 steer 剩余内容,该口令优先级最高。

队列感知语音口令

句首 「打断 / 停一下」:停播、清未发队列、立即 steer。「忽略客人1 / 别理老婆」 等可当场改说话人策略并移除该客人排队条目;「恢复」 可重新排队。普通内容仍按说话顺序 FIFO。

不读 chain-of-thought

Compaction、session-title、voice-organizer 等按 GenerateOptions.purpose 过滤;推理正文整段不朗读,只扫描显式 [[voice: ...]] 指令;工具参数不进 TTS。

模型可控的语音

推理中可用标记,例如 [[voice: 要说的内容]]、[[voice: volume +0.15]]、[[voice: rate +10]]、[[voice: repeat]]、[[voice: stop]]。另有 voice_dialog 工具 响应「轻一点 / 重复一遍 / 别说了」等元指令,并通过同一 SSE 广播到浏览器;stop 会静音新句直到用户再次说话。

声纹与多人

可选本地 CAM++(sherpa-onnx-node,约 27 MB 模型,无云端调用)区分主人与客人,转写前缀如 [声纹:我]、[声纹:客人1];设置页可登记主人与最多 12 名具名客人。可选 只回应我的声音。模型也可通过 voice_dialog 的 speaker 动作按人设置 ignore / queue 或重命名声纹标签。

后台子智能体

麦克风开启时主机记录父会话语音状态;子 agent 结束时将其最终助手文本摘要后直接入父会话 TTS 队列,无需再开一轮主模型。

设置页

在 Plugins → dsh-voice-dialog 集中配置:自动朗读、音量、duck 电平、Edge 音色与试听、ASR 提供商/语言、模型准备、主人/客人投递策略、并行 organizer、并行识别与输入设备等。活跃麦克风会展开波形、关闭/挂断控件,以及主机合成队列剩余句数。

环境与依赖

  • DSH 0.2.1-rc.2 或兼容构建;Node.js 22+(DSH 要求)。
  • 可用的 DSH STT:插件自行组合宿主行 speech-to-text、speech-to-text-sensevoice、api-speech-to-text。
  • Edge TTS 需能访问 Microsoft 服务;代理可读 HTTPS_PROXY / HTTP_PROXY,或用 DSH_VOICE_TTS_PROXY 覆盖,NO_PROXY 可豁免 Edge。
  • 麦克风需安全上下文:https:// 或 http://localhost / http://127.0.0.1。
  • 可选分离:onnxruntime-node 与约 234 MB MossFormer2 ONNX 模型(Apache-2.0);优先 DirectML,否则 CPU。

安装与启用

从 GitHub 安装(仓库已提交构建产物 lib/):

dsh plugin --profile web add github:ggfgfgf-on/dsh-voice-dialog

本地目录安装示例:

dsh plugin --profile web add file:D:/path/to/dsh-voice-dialog

确认 profile manifest 的 bundles 中包含该插件:

"dsh": { "profile": { "bundles": [ "...", "dsh-voice-dialog" ] } }

重要: 与内置 @deepseek-ai/dsh-experimental-voice-input-bundle 不要同时启用——二者注册同一套 speech 宿主行。启用本插件前,从 dsh.profile.bundles 移除内置 voice-input bundle,或在 Plugins 页禁用,否则可能重复注册、设置页提示 speech 服务不可用。

插件以当前 dsh 进程权限 运行;安装前请自行审阅源码与 MIT 许可证。

典型用法

  1. 打开会话,点击 Composer 麦克风开始连续监听。
  2. 正常说话;停顿触发断句并插入当前轮次。
  3. 助手回复在麦克风仍打开时自动朗读。
  4. 点红色麦克风停止监听:已排队音频播完,不再读新句。左侧关闭仅停监听;方形挂断会打断朗读并取消主机排队合成。口语如「轻一点」「重复一遍」「别说了」由模型经 voice_dialog 处理。

若语音模型未就绪,开麦会引导打开插件页下载/准备;页面上可看 provider 状态与下载进度。声纹:在插件页准备 voiceprint 模型后 录制我的声纹;原生组件缺失时可在 profile 中 pnpm add sherpa-onnx-node 并重启 DSH。

部分配置存储位置(便于排查):

项 存储
自动朗读、音量、duck、输入设备等 浏览器 localStorage
Edge 音色、语速 主机 ~/.dsh/voice-dialog/settings.json
声纹 embedding 主机 ~/.dsh/voice-dialog/voiceprint.json(仅存 embedding,不存原始音频)

适用场景与注意

适合希望在 DSH Web 端做 免切模式连续语音结对编程 / 对话、需要 自动读回复、又要在家人或同事插话时用 队列 + duck + organizer 而不是粗暴 cancel 的用户。多人同桌、需要区分「我说」和「客人说」时,可启用本地声纹与可选双说话人分离。

注意:朗读正文会发往 Edge TTS(仅句子文本);并行 organizer 会把当前转写与播放/排队状态发给所配置的 DSH 模型提供商,但不传完整会话历史。默认 SenseVoice STT 可在本机完成转写。Edge 连接被重置时,可配置代理并在日志中确认 Edge TTS via proxy。

结尾

dsh-voice-dialog 把 DSH 的 STT 宿主、流式回复与浏览器音频收进单一麦克风工作流,并补上 FIFO 队列、软打断与可选声纹/分离。若要在 Harness 里试连续语音对话,可从 SkillHub 目录页或 GitHub README 对照安装命令与禁用内置 voice-input bundle 的说明。

  • 目录页:https://www.skillhub.cn/plugins/ggfgfgf-on/dsh-voice-dialog
  • GitHub:https://github.com/ggfgfgf-on/dsh-voice-dialog
羽毛球分组比赛记分
小程序二维码

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

小夜