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
羽毛球分组比赛记分
小程序二维码

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

小夜