DeepSeek Harness 全双工语音插件 —— 边说边出字 · 按句朗读 · 开口即打断
 > **Full-duplex voice mode for DeepSeek Harness** —— 在会话内用语音完成整轮对话:说话时**边说边出字**、停顿后自动发送;回复**按句朗读**并跟随实时字幕;朗读中**开口即打断**。识别在本地推理、无需 API Key;朗读默认 Edge 云端(快且自然),本地 VITS / Kokoro 可选(隐私优先)。兼容 dsh 0.1.1-rc.2 起全版本(已在 0.1.1 / 0.1.2 / 0.1.5-rc.1 / 0.1.5-rc.2 端到端验证)。当前版本 **v0.7.7**,254 项测试全绿。 --- ## 💡 它是什么 在 DeepSeek Harness 的会话里,点一下麦克风就能用语音完成整轮对话: - 🎤 **你说** —— 一边说一边**实时出字**(流式识别),停顿约 **1500ms 自动发送**; - 🔊 **它答** —— 最终回复**按句朗读**,全程实时字幕跟随; - ⏸️ **随时打断** —— AI 还在朗读时**开口即打断**,你的话直接被听见。 **零 API Key**:识别在宿主端**本地推理**(**zipformer2** 流式 + SenseVoice 定稿);朗读默认 **Edge 云端**(快、自然),可选本地 **VITS** 纯中文 / **Kokoro** 中英混读(回复文本不出本机,隐私优先)。 --- ## 🤔 为什么值得用(5 个真痛点) | # | 痛点 | 我们的应对 | | --- | --- | --- | | 1 | **专有名词识别不对** —— 「dsh-voice-mode」总识别成「DSH voice 模式」 | 识别热词偏置 `asrHotwords: "dsh-voice-mode:2.5"` —— 显著提升专有名词召回 | | 2 | **语种乱漂** —— 中英混说时句子中途跳英文 / 一锁 en 又跳回中文 | `recognitionLanguage` = `auto/zh/en/ja/ko/yue` 6 语种锁定 + 重建 worker | | 3 | **字幕看不清** —— 字小、窄屏被输入框挡住 | `captionFontSize` 4 档(12/14/18/24px)+ `captionMaxWidth` 3 档(50/70/90vw) | | 4 | **让位误打断** —— AI 朗读时插一句「嗯/对」就被硬打断 | `backchannelYield` 让位语义:短词自动让位 1.5s,真要说走才硬打断 | | 5 | **本地 TTS 太机械** —— 一句话读完停顿 3-5 秒 | 本地 VITS / Kokoro 原生 addon + epoch 队列管理,按句流式朗读、句间无停顿 | --- ## ✨ 功能(按用户价值) 1. 🎙️ **识别准** —— 热词偏置 + SenseVoice 多语种 + ITN(数字/日期/货币自动规范化) 3. 🗣️ **不说错** —— 唤醒词待机、唤醒词前缀语气词白名单(`嗯`/`那个` 不再误触) 5. 🤝 **让位** —— 让位语义 + 三档打断灵敏度(`interruptLevel`),外放也能精准打断 7. 💬 **有感情** —— 本地 Kokoro 103 音色 + Edge 322 音色,行内可试听;分段朗读不漏句 9. 👁️ **字幕 a11y** —— 4 档字号 + 3 档宽度,浅色主题变量跟随 dsh 主题 --- ## 🎬 Demo  > 真实录屏见 [`demos/RECORDING-SCRIPT.md`](demos/RECORDING-SCRIPT.md)(60s/30s/15s 三段脚本)。 > 真机截图清单见 [`screenshots/MANIFEST.md`](screenshots/MANIFEST.md)(12 张)。 --- ## 🚀 5 分钟上手(Quick Start) ```sh dsh plugin --profile web add dsh-voice-mode systemctl restart dsh # Linux;其他平台重启 dsh 进程 ``` **第一次用**: 1. 进入任一会话,按 `Ctrl+Shift+V`(或点输入区麦克风按钮)进入语音模式,状态条显示「聆听中…」; 2. 说一句完整的话(如「帮我看看今天的天气」)→ 实时字幕立即出现,停顿后自动发送; 3. AI 回复开始朗读时,**开口说话 → 朗读即刻停止,你的话被听见**(这就是 barge-in)。 ### 操作手势 | 手势 | 作用 | | --- | --- | | `Ctrl+Shift+V` | 进入 / 退出语音模式 | | 直接说话(toggle) | 边说边出字,停顿 1500ms 自动发送;按住 `Ctrl` 强制立即发送 | | 按住麦克风按钮(hold) | 松手发送;短按退出;滑出 / `Esc` / 失焦放弃本段 | | 点输入框旁模式按钮 | 在「持续聆听 ⇄ 按住说」间切换(保存到设置) | | AI 朗读时开口说话 | 打断朗读并取消当前回合 | | 点状态条「退出」 | 退出语音模式 | | 点字幕浮层「跳过」 | 跳过当前句朗读 |  --- ## ⚙️ 配置(7 新设置字段 + 5 默认值微调) **设置 → Plugins → 插件配置 → 语音模式(voice-mode)**。 ### 7 新设置字段(11 批次周全修复落地) | 你想调什么 | 改哪个键 | 默认 | 说明 | | --- | --- | --- | --- | | 识别热词 | `asrHotwords` / `asrHotwordsScore` | 空 / `1.5` | 每行一词或「词:分数」(如 `dsh-voice-mode:2.5`);变更触发 recognizer 重建 | | 识别语种 | `recognitionLanguage` | `auto` | SenseVoice 多语:`auto` / `zh` / `en` / `ja` / `ko` / `yue`;切换终止并重建 worker | | 逆文本归一化 | `senseITN` | `true` | SenseVoice 数字/日期/货币规范化(默认开,关掉保留原文) | | 字幕字号 | `captionFontSize` | `0` | 档位 0=12px / 1=14px / 2=18px / 3=24px | | 字幕宽度 | `captionMaxWidth` | `1` | 档位 0=50vw / 1=70vw / 2=90vw | | 让位语义 | `backchannelYield` | `true` | 朗读期说「嗯/对」自动让位 1.5s,真要说走硬打断(ADR-0008) | ### 5 默认值微调(批 J) | 字段 | 旧 | 新 | 理由 | | --- | --- | --- | --- | | `rate` | 1.0 | **1.1** | Edge 默认略慢,统一提速 10% 改善体验 | | `idleTimeoutMinutes` | 10 | **5** | 空闲退出更灵敏(朗读仍计为活动) | | `interruptLevel` description | 旧描述 | 新描述 | 明确「3/2/1 帧确认」机制 | > 字段名零变化,旧 `~/.dsh/settings.yaml` 100% 兼容。 完整 19 项设置表见 [plugin/dsh-voice-mode/README.md](plugin/dsh-voice-mode/README.md#%E8%AE%BE%E7%BD%AE%E8%AE%BE%E7%BD%AE--plugins--%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE--%E8%AF%AD%E9%9F%B3%E6%A8%A1%E5%BC%8F)。 --- ## 🏛️ 架构(Architecture) ```mermaid flowchart LR subgraph Client["浏览器 Client"] Mic[麦克风 16kHz