前言¶
DSH 的語音能力分散在內置實驗語音棧裏,用起來需要自己拼:開麥錄音、調轉寫、把結果塞進會話、再把回覆念出來。開發智能體交互的人通常只想要一個能跑的閉環,而不是四個半成品。
beepflyer/dsh-voice-chat-mode 就是把這條鏈路接順的客戶端插件。它由 BeepFlyer 維護,走 SkillHub 社區目錄的「客戶端」分類,當前星標 0、版本 0.7.9。它的思路不是自建 ASR/TTS 服務,而是複用 DSH 內置語音棧做識別,額外加一層很薄的 Host 路由(Edge TTS 與模型控制工具)。下面介紹它的能力、安裝方式和適用邊界。
這是什麼¶
一句話定位:給 DeepSeek Harness(DSH)加一個語音聊天模式,說話自動觸發錄音、自動轉寫、自動提交,助手回覆用 Edge TTS 或系統語音念出來。
它做了什麼取捨:同類插件裏 dsh-voice-mode 功能最全,dsh-voice 偏朗讀,dsh-voice-chat / dsh-voice-talk 偏對話式。這個插件的取捨是不重複造 ASR/TTS 服務,只把 DSH 內置語音棧接到最順的交互上。代價是它要求 DSH 內置的實驗語音 bundle 可用,也不提供喚醒詞、流式字幕、音色克隆這些專項能力。
許可證 MIT,源碼在 GitHub,目錄頁在 SkillHub。
核心功能¶
常駐監聽用 VAD(RMS 門限 + 最短語音時長)自動開始和結束錄音,不需要點按鈕。自動提交走會話的 beginSubmission + prompt,默認走 queue,長按開關 500ms 可以把下一次說話標記爲 steer(插話)。
播報有兩種引擎,設置頁可切:edge(默認,Edge TTS 神經語音,8 箇中文音色,默認 zh-CN-XiaoyiNeural +10% 語速)和 system(本機 speechSynthesis,離線但音色舊)。字段級細節:請求失敗自動回退系統語音,斷網也有聲。
模型可以通過 voice_mode 工具主動控制:enable 在當前打開的會話裏開麥、disable 停麥停播放鎖、speak 用當前 TTS 引擎念一段文本(≤500 字)、status 取最近一次狀態(state / speaking / sessionId / detail)。機制上是工具把命令放進 Host 內存隊列,瀏覽器插件每 1.5s 輪詢 GET /api/voice-mode.control 取走執行再回報,所以返回的是「已入隊」,不是同步結果。
口播稿協議值得單獨說。語音輸入時(用戶消息以 [語音] 開頭),助手可以在回覆的不同階段插入多段 [voice-note]: <…>,插件按出現順序逐段朗讀;完全沒有口播稿時回退到念正文前 3 句。尖括號是 Markdown 鏈接引用定義的合法目標,渲染時會被喫掉,聊天裏不可見。
狀態歸屬:會話級開關,切走會話停麥、切回自動恢復;刷新/重載回 OFF。硬關閉路徑明確,短按開關、Esc、切標籤、刷新都行。切換會話只停麥,不打斷正在播的回覆。多窗口用 navigator.locks 按會話加鎖,另一個窗口占用時置灰並說明。
輕量性:無運行時 npm 依賴,不額外分發模型(模型由 DSH 語音 bundle 管理)。Host 側只有一條 /api Fetch 路由 + 一個工具。vendor/python/ 內置 edge-tts 7.3.1 及依賴(約 3.7 MB),合成時加進 PYTHONPATH,優先用自帶依賴,不碰系統 site-packages;缺失時 Host 會自動跑一次 pip install edge-tts --target vendor/python。
安裝與啓用¶
這是「替換內置語音行」的 proof-of-concept,會覆蓋 @deepseek-ai/dsh-experimental-client-ui-voice-input 對應的 Loader 行,因此不要同時啓用兩支麥克風。
前置條件兩條:
- DSH Desktop(或 Web)profile 已啓用內置語音包
@deepseek-ai/dsh-experimental-voice-input-bundle,它提供 Host 側speechToText、SenseVoice provider、Remote 和模型; - 首次使用前在「插件」頁完成語音模型的「下載並準備」。
在創造模式對話裏,或手動執行:
plugin_manager action=install_bundle target=<本目錄絕對路徑>
插件的 cordis.patch.yml 會把內置 ui-voice-input 行置爲 disabled: true,並插入指向本包的 ui-voice-mode 行。
卸載用:
plugin_manager action=remove_bundle target=dsh-voice-chat-mode
關於播報引擎,Edge TTS 依賴 DSH 自帶 Python 裏的 edge-tts。README 給的安裝命令是:
$py = 'C:\Users\Lenovo\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\python\python.exe'
& $py -m pip install edge-tts -q -i https://pypi.tuna.tsinghua.edu.cn/simple
& $py -m edge_tts --list-voices # 能跑通即正常
注意這是 Windows 路徑示例,換機器時要替換 $py。從 v0.7.0 起插件自帶 edge-tts,通常不需要手動這一步。
典型用法¶
裝好後不需要讀 README,agent 也能按約定工作,靠三個模型可見面:
- 系統提示詞節
plugin:voice-chat-mode(order 3200):說明[語音]開頭的用戶消息是口述轉寫、回覆可以用[voice-note]: <…>塊控制朗讀、不要給打字消息加口播稿; - 動態狀態上下文
plugin:voice-chat-mode(order 215):每一步注入一行state=LISTENING, speaking=no之類的當前狀態; - 客戶端頂欄:麥克風開關(輸入獨立入口)和「朗讀/靜音」鍵(只控制助手回覆自動朗讀,立即生效並持久化,工具
speak不受它影響)。
播報中點頂欄或 Esc 只停當前這一句。打斷判定有一層保護:播報中被聲音觸發時先記下剩餘內容再停播,如果轉寫結果爲空或純語氣詞就恢復播報,只有有效發言才真正打斷並提交。
如果想讓不同會話的 agent 都遵守口播稿約定,建議把約定寫進工作區 AGENTS.md。
適用場景與注意¶
適合想在 DSH 裏做「邊說邊答」體驗、且已經能跑通 DSH 內置實驗語音 bundle 的開發者和智能體應用作者。不適合需要喚醒詞、流式字幕、音色克隆,或不願啓用實驗 bundle 的場景。
幾點需要注意:
voice_mode的enable會讓模型主動開麥,只在明確需要時使用;- 命令隊列上限 10 條,超過丟最舊的;
enable需要窗口裏有一個打開的會話(header 已掛載),否則會被忽略並在診斷裏記一條;- Edge TTS 是微軟 Edge 朗讀用的端點,屬非官方接口,可能變更或失效,
speechSynthesis回退是安全帶,僅供本機個人使用; - 本插件以當前 DSH 進程權限運行,安裝前應檢查源碼與 MIT 許可證。
小結¶
這個插件的價值在「不重複造輪子」:識別交給 DSH 內置 SenseVoice,播報用 Edge TTS 或系統語音,插件自己只做常駐監聽、自動提交、口播稿協議和模型工具這四件事,Host 側只有一條路由和一個工具。如果你已經在用 DSH,缺的只是一條順的語音鏈路,它是值得看的一個方案。
目錄頁:https://www.skillhub.cn/plugins/BeepFlyer/dsh-voice-chat-mode
GitHub:https://github.com/BeepFlyer/dsh-voice-chat-mode