zfu691531-hash/dsh-realtime-voice
zfu691531-hash★ 0TypeScript最后同步: 2026-08-16
Lightweight realtime ASR → DeepSeek Harness → TTS community plugin.
README 摘要
dsh-realtime-voice DeepSeek Harness 的轻量实时语音插件。不包含 Docker、Python或本地模型。千问线路是确定性的三段式管线:浏览器采集 PCM,Harness Host 以同源 WebSocket 代理专用 ASR/TTS;空闲时完整语句经原生输入框自动交给当前 Harness 会话,忙时的新语音留在输入框等待用户发送或清空,语音厂商没有独立回答的机会。 能力 - 国内线路: qwen3-asr-flash-realtime → DeepSeek Harness → qwen3-tts-flash-realtime (阿里云百炼,北京/新加坡)。 - 全球线路: gpt-realtime-2.1 (OpenAI Realtime)。 - 千问使用两个独立语音模型:ASR 只转写,TTS 只播报;不再使用 Omni Realtime 作为对话模型。 - ASR final 统一经过原生输入框:空闲且输入框为空时,在续说窗口结束后自动调用原生发送;Harness 推理或播报期间、以及输入框已有待处理文字时,只追加草稿等待用户发送或清空。推理、记忆、联网、插件与工具调度全部由 Harness 完成。 - VAD 默认 threshold=0.85 、尾静音 700ms ,并关闭浏览器自动增益以优先近讲。ASR final 先进入候选断句,再等待 1200ms 的续说窗口;从停顿开始约 1.9s 才提交 Harness,期间继续说话仍属于同一轮。 - 严格的 TurnCoordinator 为每轮分配唯一 ID,并串行处理 ASR 状态事件;旧轮的迟到回调不能再启动 Harness、覆盖新轮或播放过期语音。 - Harness 执行工具期间,普通背景转写不会再取消当前任务;只有明确说“停止 / 取消 / 算了”才会中止。 - Harness 正在推理或 TTS 正在播报时,新语音只追加到原生输入框;播报结束后不会跳过这些文字。输入框有待处理内容时,后续识别继续合并,直到用户发送或清空;输入框为空才恢复下一轮自动提交。 - 语音模式开启期间,插件旁路观察用户手动提交的原生 Harness turn,流式提取口语摘要并交给 TTS;不需要插件再次提交相同消息。 - TTS 使用 24kHz PCM 流式播放。播报期间麦克风音频先留在浏览器本地,不会直接污染云端 ASR;经过播放预热且检测到至少 500ms 持续近讲后,才暂停播放器并把带预卷的候选音频交给 ASR。 - 候选插话经过文本有效性与播报回声相似度复核;误触发会恢复原播报,确认插话才停止 TTS。插话文字只进入原生输入框,等待用户发送或清空,不会自动抢开第二个 Harness 任务。 - TTS 播放结束后保留 400ms 防回声窗口,清理残留 ASR 缓冲后才重新进…
在 GitHub 查看完整 README →