前言¶
在 DeepSeek Harness(DSH)裏跑 agent,常見做法是文本對話或外掛 TTS 播報。Oopz 語音頻道里需要的是「能聽、能想、能接話、該停就停」的參與者,而不是一段按腳本念稿的機器人。下面介紹社區插件 dsh-oopz-voice(維護者 Kingyibin,GitHub:Kingyibin/dsh-oopz-voice):把本地 ASR、OpenAI 兼容大模型、本地 TTS 和 Agora 推流串成一條鏈路,讓 agent 以接近真人的節奏在語音房裏說話。README 給出的感知延遲約 1.6 秒(說完到聽見回應),並強調這不是「語音助手」式單向播報。
這是什麼¶
dsh-oopz-voice 歸類爲 DSH 社區目錄中的工作流插件(npm 包名 dsh-oopz-voice,當前版本 1.1.0,MIT 許可證)。它解決的是:DSH agent 如何長時間掛在有權限的 Oopz 語音頻道裏,處理多人說話、插話與讓位,並把合成的人聲推回房間。接入走的是對 Oopz 客戶端協議的逆向實現,不是 Oopz 官方 API;使用前需自行閱讀倉庫中的合規與隱私說明。
數據流在 README 中概括爲:
別人的聲音 ──▶ 能量 VAD ──▶ SenseVoice ASR ──▶ 大模型 ──▶ VITS TTS ──▶ Agora 推流
(Agora) (~50ms) (86–137ms) (~500ms) (55ms/字) (48kHz)
核心能力(與邊界)¶
它會做的事¶
- 進房:進入有權限的 Oopz 語音頻道;通過心跳續期(約每 20 秒重發
enter),README 實測 7 分 41 秒零掉線。 - 聽:僅在檢測到有人說話時處理音頻,按靜音斷句;過短的語氣詞會被丟棄。
- 想:將識別文本交給配置的 OpenAI 兼容接口,並可配合自寫人格文件(默認
runtime/persona.example.md)。 - 說:本地 VITS 合成後,經 headless Chrome 內的 Agora Web SDK 以 host 角色推自定義 PCM 軌。
- 讓位與補聽:他人持續說話時 agent 會停說;讓位期間聽到的內容會在對方說完後繼續參與上下文(README 對 VAD 分桶、重疊判定有詳細說明)。
它刻意不做的事¶
- 不做回聲消除,靠讓位避讓,而非 AEC。
- 不處理英文(SenseVoice 中文版限制,見 README「已知限制」)。
- 官方
oopz-sdk的語音相關能力不完整,插件自研登錄、進房與心跳邏輯。
本地還有三層記憶(人物檔案、會淡忘的事實、當日流水),說話路徑讀內存、寫盤攢批,避免每輪打磁盤拖延遲;細節見 README「它是怎麼做到的」一節。
前置條件¶
裝插件前,README 要求環境大致如下:
| 需要 | 說明 |
|---|---|
| DSH | dsh --profile web 能正常運行 |
| Node 20+ | 依賴 puppeteer-core 啓動 Chrome |
| Python 3.10+ | python -m pip install numpy sherpa-onnx |
| 真 Chrome / Edge | 不能用 headless shell;需要 WebAudio + Agora Web SDK |
| DeepSeek API Key 或兼容接口 | 僅識別文本發往大模型 |
| Oopz 賬號 | 手機號 + 密碼,且能進目標語音頻道 |
ASR/TTS 模型可在設置頁「下載模型」從 HuggingFace 鏡像拉取(約 300MB),無需自行找模型文件。
安裝與啓用¶
官方安裝命令(來自 README,使用 desktop profile):
dsh plugin --profile desktop add dsh-oopz-voice
裝完後重啓 DSH,設置裏會出現 語音房 項。
插件以當前 DSH 進程權限運行;安裝前建議在 GitHub 閱讀源碼與 LICENSE,並理解 HTTP 路由經 DSH requestRejection 信任柵欄的原因(README 隱私一節)。
典型用法:五步跑起來¶
經過安裝與重啓,可按 README 的「五步跑起來」操作:
- 登錄:填寫 Oopz 手機號與密碼(密碼僅當次請求使用,不落盤迴顯);憑據存
<DSH_HOME>/oopz-voice/cred.json。 - 填 API Key:保存至
<DSH_HOME>/oopz-voice/secret.json。 - 下載模型:約 300MB,看設置頁進度。
- 讀我的域:列出可見域與語音頻道,並標出各頻道人數(建議選有人的頻道)。
- 頂部點 進房:首次需加載兩個本地模型,約 10–25 秒;狀態爲「在房裏」即成功。
設置頁頂部有七行「差什麼」體檢,全綠再進房;某行報錯時,頁面會提示缺什麼或該點哪裏。
常用配置項包括:域/語音頻道、Python 與瀏覽器路徑(可留空自動探測)、ASR/TTS 模型目錄、語速(如 0.95 偏慢)、大模型接口地址與模型名、溫度、人格 Markdown、「開口概率」「說完到下一句的間隔」(默認 300ms)、「只聽不說」「只連不進房」等調試開關,以及 VAD 能量門檻。完整列表見 README「設置頁每一項」。
適用場景與注意¶
適合:你已有 DSH desktop 環境、能合法使用自己的 Oopz 賬號與頻道,希望 agent 在語音場景裏像參與者一樣聽和說,且能接受約 1.6s 量級的往返延遲與中文 ASR 的聽寫特點(README 對 CER、極短句、同賬號兩人等限制寫得很直白)。
務必注意:
- 項目聲明爲逆向協議接入,客戶端升級可能導致失效;勿在他人房間騷擾或隱瞞程序身份,封號與協議風險自負。
- 語音房裏其他人默認不知道說話的是程序,請自行判斷場景是否合適。
- 音頻 ASR/TTS 在本地;只有識別出的文字發往大模型。插件不做英文、不做聲紋區分同 uid 下兩人(CAM++ 未實現)。
結尾¶
dsh-oopz-voice 把 Oopz 進房、多路 VAD、本地 SenseVoice + VITS、大模型與人格、Agora 推流收進 DSH 插件形態,適合要把 agent 放進真實語音工作流、又希望鏈路可控的開發者。倉庫 README 還包含延遲預算、踩坑記錄與目錄結構,值得對照源碼閱讀。