DSH-oopz-voice: Enabling DSH Agents to Enter Oopz Voice Rooms and Speak

前言

在 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 还包含延迟预算、踩坑记录与目录结构,值得对照源码阅读。

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

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

Xiaoye