dsh-oopz-voice:讓 DSH Agent 進 Oopz 語音房開口說話

前言

在 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)

核心能力(與邊界)

它會做的事

  1. 進房:進入有權限的 Oopz 語音頻道;通過心跳續期(約每 20 秒重發 enter),README 實測 7 分 41 秒零掉線。
  2. 聽:僅在檢測到有人說話時處理音頻,按靜音斷句;過短的語氣詞會被丟棄。
  3. 想:將識別文本交給配置的 OpenAI 兼容接口,並可配合自寫人格文件(默認 runtime/persona.example.md)。
  4. 說:本地 VITS 合成後,經 headless Chrome 內的 Agora Web SDK 以 host 角色推自定義 PCM 軌。
  5. 讓位與補聽:他人持續說話時 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 的「五步跑起來」操作:

  1. 登錄:填寫 Oopz 手機號與密碼(密碼僅當次請求使用,不落盤迴顯);憑據存 <DSH_HOME>/oopz-voice/cred.json。
  2. 填 API Key:保存至 <DSH_HOME>/oopz-voice/secret.json。
  3. 下載模型:約 300MB,看設置頁進度。
  4. 讀我的域:列出可見域與語音頻道,並標出各頻道人數(建議選有人的頻道)。
  5. 頂部點 進房:首次需加載兩個本地模型,約 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 還包含延遲預算、踩坑記錄與目錄結構,值得對照源碼閱讀。

羽毛球分组比赛记分
小程序二维码

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

小夜