前言¶
在 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 许可证。
典型用法¶
- 打开会话,点击 Composer 麦克风开始连续监听。
- 正常说话;停顿触发断句并插入当前轮次。
- 助手回复在麦克风仍打开时自动朗读。
- 点红色麦克风停止监听:已排队音频播完,不再读新句。左侧关闭仅停监听;方形挂断会打断朗读并取消主机排队合成。口语如「轻一点」「重复一遍」「别说了」由模型经
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