dsh-playmate:给 DSH 加「看屏、语音输入、念回答」的客户端陪玩插件

前言

在 DeepSeek Harness(DSH)里跑智能体时,常见做法是纯文本对话:模型看不到你屏幕上的变化,你也得切回窗口打字。若希望「模型能按需看屏、用麦克风说一句话进会话、把回答开头念出来」,通常要自己接抓屏、ASR、TTS 和会话注入,和 DSH 的插件机制还要对齐。

下面介绍社区插件 dsh-playmate(维护者 ZiFeng11,分类:客户端)。它把三件事做成三个独立开关模块——看(see)、说(talk)、听(hear)——默认全关;不附带任何声音模型与参考音频,「念出来」需自备 TTS 服务。仓库采用 MIT 许可证;README 写当前版本 0.1.0,同仓库 package.json 为 0.1.1。该项目未上 DSH 插件市场,从 GitHub 分发;SkillHub 目录页:https://www.skillhub.cn/plugins/ZiFeng11/dsh-playmate。

这是什么

dsh-playmate 是给 DeepSeek Harness 用的陪玩插件:看屏幕 / 听你说话 / 把回答念出来。作者定位为个人作品:不承诺长期维护、不接定制、不加云端依赖、不收集数据;代码量约 2,600 行。三个模块互不依赖,关着的模块不会抓屏、录音或出声。

插件以当前 DSH 进程权限在本机运行。安装前建议阅读源码与 MIT 许可证;抓帧与识别在本机完成,只有「把图交给当前会话」会走 DSH 自身的模型请求。

核心功能

看(see)

  • 手动(默认):模型需要时通过工具 play_see 抓屏,按变化挑帧、可拼图后交给会话;静止屏约 1 帧 ≈ 233 token,9 帧拼图约 2,100 token。
  • 自动:后台定时抓帧,画面变化足够大才投递;静止屏不投递。每次投递会唤醒一轮对话(重读上下文),故有「多主动」三档(安静 / 正常 / 热闹)控制最短间隔与变化门槛。
  • 依赖:ffmpeg(无则该开关无法就绪)。

说(talk)

  • 按住说话(热键 Ctrl+Alt+V,按一下开始、说完自动停)或 一直听;本地 FunASR 识别,识别结果 POST 进指定或最近会话,作为普通用户消息注入;本地识别 0 token。
  • 默认识别模型 iic/SenseVoiceSmall(快,长句同音字易错);可改 asrModel 换 Paraformer-large 等,关开「听我说话」后引擎按新模型重启。
  • 依赖:Python(需能 import numpy, sounddevice)、麦克风;SenseVoiceSmall 显存约 1.1 GB。

听(hear)

  • 取回答开头一段文字,POST {text} 到你配置的 ttsUrl,由外部 TTS 念出;0 token,显存取决于你的 TTS(例如 GPT-SoVITS 约 1.6 GB)。
  • 插件不内嵌、不下载 TTS 模型;需自备 3–10 秒参考音并自建 GPT-SoVITS / IndexTTS 等服务,再把地址填入配置。

它不做什么(摘要)

不上传屏幕/录音做云端留存(抓帧写临时目录、用完即删);不操作鼠标键盘;不附带模型权重与参考音;配置越界返回 400,不静默改成边界值。HTTP 接口仅接受回环地址。

安装与启用

依赖先说清楚:看屏幕需要 ffmpeg;听我说话需要 Python + 麦克风 + FunASR;念出来默认关着,填好 ttsUrl 即可,插件侧无需额外安装 TTS。

本项目没有 dsh plugin add github:... 一类市场命令,请按仓库 README 的三种方式之一安装。

方式一:让 AI 帮你装(推荐)

把下面这句发给你的 DSH(需要文件权限),将 desktop 换成你的 profile 名:

请把 https://github.com/ZiFeng11/dsh-playmate 装进我的 DSH:
克隆到 ~/.dsh/plugins/dsh-playmate,
在 profiles/desktop/node_modules 下建目录联接,
并在 cordis.patch.yml 里加一条 id: playmate 的 insert。
装完告诉我怎么重启。

装完后需自行重启 DSH。设置里点「环境自检」,四个勾都绿才算依赖齐。

方式二:Windows 脚本

在仓库目录执行:

powershell -ExecutionPolicy Bypass -File .\install.ps1

脚本会找 profile、克隆/更新到 ~\.dsh\plugins\dsh-playmate、建目录联接、写 patch(已写过则跳过并备份)。

方式三:手动

将仓库目录放到(或联接到)<profile>/node_modules/dsh-playmate(Windows 可用目录联接 mklink /J),并在 <profile>/cordis.patch.yml 末尾增加:

- insert:
  - id: playmate
    name: dsh-playmate
    config: {}

然后重启 DSH,设置页会出现「陪玩」。

配置要点

配置保存在 $DSH_HOME/playmate.json(默认 ~/.dsh/playmate.json),设置页也可改。常用项:

键 说明
see / talk / hear 三个模块总开关,默认均为 false
seeMode manual | auto
seePace 自动模式「多主动」:quiet | normal | dense
ffmpegPath 留空走 PATH
talkMode ptt(热键)| always(常听)
pythonPath 跑 ear.py 的解释器,建议绝对路径
asrModel 默认同上 SenseVoiceSmall
ttsUrl 例如 http://127.0.0.1:PORT/say;留空表示未接线
targetMode / targetSessionId 语音送进最近活动会话或固定会话(防串台)

完整字段与取值范围见仓库 README「配置」表。TTS 需接受 POST {text};若有 /health,环境自检会探活。

本地 API 示例(均回环):GET /api/playmate/status、POST /api/playmate/toggle、GET/POST /api/playmate/config、GET /api/playmate/diag 等。

典型用法

  1. 只开语音输入:设置里打开「听我说话」,选热键或一直听;说完停顿约 1 秒自动结束;文字进入当前或固定会话。固定会话:设置 → 语音送到哪个会话 → 固定。
  2. 模型按需看屏:保持 seeMode: manual,在对话中让模型使用看屏能力;避免不必要的自动投递以节省「唤醒」成本。
  3. 演示或游戏时自动看变化:打开 see 且 seeMode: auto,按场景选「多主动」档位;太吵或太费时改回 manual 或切到「安静」。
  4. 念回答:自建 TTS 后填 ttsUrl,打开 hear;插件只转发文字,声音与引擎完全由你决定。

识别不准时:优先将 asrModel 改为 README 推荐的 Paraformer-large,然后关闭再打开「听我说话」重启引擎。

适用场景与注意

适合:在本机 DSH 里希望低耦合地加看屏、语音输入、外接 TTS 朗读;三个能力可只开其一;强调本地抓帧与 ASR、不上传录像。

注意:

  • 插件随 DSH 宿主 API 变化可能失效;同一机器不要给两个 profile 都注册本插件(会双实例)。
  • 自动看屏依赖 DSH 的 attachments 服务(插件 inject 已声明)。
  • 受限环境下全局键盘钩子可能装不上,故热键为「按一下开始」而非按住;冲突时可改 lib/ptt/ptt-window.ps1 中的热键注册。
  • 日志与反馈:<DSH_HOME>/playmate-plugin.log、<临时目录>/dsh-playmate/ear.log;issue 请附系统与 DSH 版本、环境自检结果。

结尾

dsh-playmate 把 DSH 会话扩展成「能看、能说、能听(外接 TTS)」的客户端陪玩组合,开关分离、默认全关,且明确不捆绑声音模型。DeepSeek Harness 生态强调「一切皆插件」;SkillHub 目录是社区站点,与 DeepSeek / 幻方无官方从属关系。

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

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

Xiaoye