dsh-qq-plugin-group-expand:让 QQ 成为 DSH 的群聊遥控入口

前言

DeepSeek Harness(DSH)支持通过 QQ 频道作为远程入口,上游 dsh-qq-plugin 提供了私聊遥控、扫码绑定、多会话、附件与审批回流等能力。但原插件没有群聊支持,在 QQ 群里只能被动接收消息,无法主动应答或参与群内讨论。

dsh-qq-plugin-group-expand 是对上游项目的扩展分支,补上了群聊收发、群聊礼仪、引用图片、表情包收藏、权限默认值与 token 优化。项目基于官方 QQ 机器人平台,不需要个人号协议,也不依赖公网 IP。

插件定位

  • 包名:dsh-qq-plugin-group-expand
  • 版本:1.2.0
  • 运行环境:DSH desktop 0.2.0-rc.2 或更新
  • QQ 侧:腾讯官方机器人,通过手机 QQ 扫码创建

核心能力

与上游的关系

上游 dsh-qq-plugin 提供的能力在 dsh-qq-plugin-group-expand 中全部继承:

  • 私聊遥控、扫码绑定、多会话(/new /list /switch)
  • 图片 / 文件 / 语音双向
  • 权限审批回流、notify_qq 主动推送
  • 语音优先使用 QQ 服务端 ASR 转写

本分支新增的能力:

  • 群聊收发:支持在 QQ 群里与 agent 交互
  • 群聊礼仪与门禁:只在特定条件(被 @、提到人格名或关键词)下发言
  • 连续对话窗口:被 @ 后 5 分钟内,每条文字消息都交给 agent 判断是否回应
  • 引用图片:下载引用消息中的图片到本地,把绝对路径交给 agent
  • 表情包收藏:自动收集群里的方形小图,支持用户导入,最多 300 张
  • 权限默认值:新会话默认 read-only,强制锁定只读
  • Token 优化:presenceNote(渠道上下文说明)只在每个新对话的第一条提示词里发送一次

安装

从 npm 安装(推荐)

dsh plugin --profile desktop add dsh-qq-plugin-group-expand

也可以在 DSH 的「添加插件」里直接输入包名:

dsh-qq-plugin-group-expand

从 GitHub 安装

dsh plugin --profile web add https://github.com/jjjjjsgrmjjjjj/dsh-qq-plugin-group-expand

或者把 Git 地址粘进「添加插件」。

从本地目录 / tarball

npm pack

生成 dsh-qq-plugin-group-expand-1.2.0.tgz 后,把 .tgz 的绝对路径或放着 package.json 的目录粘进「添加插件」。

从旧插件迁移

  1. 先在 DSH 里停用并移除原来的 dsh-qq-plugin,否则两个插件会抢同一个 QQ 通道和 qqChannel 服务
  2. 安装 dsh-qq-plugin-group-expand
  3. 凭据作用域沿用上游的 dsh-qq-plugin,已绑定过的 AppSecret 可以直接复用
  4. 状态文件仍是 ~/.dsh/qq/state.json,会话映射、待发队列和设置会继续生效
  5. 启动后检查设置页的连接状态和 boot.log

群聊行为与礼仪

群聊和私聊的礼貌规则不同。本分支默认只在以下情况发言:

条件 行为
被 @ 立即交给 agent,正常回答
被 @ 后 5 分钟内 每条文字消息都交给 agent,由模型判断是否回应
正文提到人格名或接话关键词 本地短句 + 表情包接一句,不调用模型
其他 不发言

被 @ 后会开启一个 5 分钟的连续对话窗口。窗口内不按关键词过滤:消息会原样交给 agent,并在提示词里附上最近 8 条群消息(发送者 + 正文,单条截断 120 字)。如果 agent 输出 [[NO_REPLY]],插件会把整条回复丢弃,群里一个字都不发。

表情包与引用图片

表情包

不生成表情包,只用两种来源:

  • 群里像表情包的方形小图,收到时静默下载到 ~/.dsh/qq/stickers/collected/
  • 用户自己导入到 ~/.dsh/qq/stickers/ 根目录的 png/jpg/gif/webp

收藏判定条件:

  • 最长边 ≤ 1024
  • 宽高比 0.45–2.2
  • 文件 ≤ 2 MiB
  • SHA-256 去重
  • 最多 300 张

索引写 index.json。手机照片和截图会被排除。发送失败或目录为空时退到 emoji,不影响文字回复。

引用图片

QQ 把被引消息的图片放在 msg_elements[<refMsgIdx>].attachments。本分支会把引用附件下载到会话媒体目录,把本地绝对路径交给 agent,而不是只写一句「(引用了 image/png)」。

权限与安全

新会话默认 read-only:

  • permissionPreset 默认值改为 read-only
  • newSessionsReadOnly 默认开启,新建/采纳的会话会被强制施加只读,即使状态文件里存着旧的 danger-full-access
  • 已有会话的权限由 DSH 锁定,插件不会偷偷改

要让某条新会话动手,需要先关闭只读锁,再选择「工作区可写」或「完全访问」。这是有意的摩擦:群里任何人都能触发它,默认不能写文件。

配置

设置项与上游一致,群聊新增字段主要在 lib/settings.js:

设置 默认 说明
groupChatEnabled true 群聊总开关
groupPersonaNames 鲸鱼娘 群里认的人格名,逗号分隔
groupAutoSpeak true 提到人格/关键词时自动接话
groupFollowUpWindowMs 300000 被 @ 后的连续对话窗口(5 分钟)
groupContextWindowMs 120000 群历史语境窗口
groupAutoSpeakKeywords 鲸鱼娘,鱼鱼,胖鱼,在吗,哈哈,笑死,可爱,笨蛋 接话关键词
groupSpeakCooldownMs 20000 自动接话冷却
groupSpeakMaxPerHour 20 自动接话每小时上限
groupCollectStickers true 收藏群里的表情包
groupStickerChance 70 接话时附带表情包的概率
groupStickerDir <home>/qq/stickers 表情包目录
groupFullMessageMode 未启用 平台推送全量群消息时才有的分支
permissionPreset read-only 新会话权限预设
newSessionsReadOnly true 新会话强制只读锁

完整说明见 docs/HANDBOOK-USER.md 和设置页内置帮助。

适用场景与注意

适合需要通过 QQ 群与 DSH 智能体交互的场景,例如:

  • 群内日常问答与协作
  • 群聊中的任务审批与决策
  • 通过群聊分享图片、文件与语音

注意:

  • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证
  • 官方通道下,非 @ 的群消息默认不可见;需要平台权限,插件无法绕过
  • sendTyping 仅支持单聊,群聊里会记录一条非致命错误
  • 群历史在内存中,DSH 重启后从零开始
  • 表情包只支持图片,不支持群里的动态表情协议

结尾

dsh-qq-plugin-group-expand 在上游 dsh-qq-plugin 的基础上补齐了群聊能力,通过官方 QQ 机器人平台提供了更安全的默认权限和 token 优化,适合需要在 QQ 群里远程控制 DSH 的场景。

  • 目录页:https://www.skillhub.cn/plugins/jjjjjsgrmjjjjj/dsh-qq-plugin-group-expand
  • GitHub:https://github.com/jjjjjsgrmjjjjj/dsh-qq-plugin-group-expand
羽毛球分组比赛记分
小程序二维码

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

Xiaoye