dsh-suinian(碎念):让 DSH Agent 主动给用户发 QQ 消息

前言

在 DSH(DeepSeek Harness / Cordis)里,Agent 通常只在用户发消息或工具被调用时才回应。若希望 Agent 在固定节奏或长时间未互动时「主动找用户聊」,需要定时唤醒、生成内容,并走 QQ 官方 Bot 的主动消息通道。dsh-suinian(碎念)就是面向这一需求的 Cordis 插件:随机心跳、空闲问候,以及会话内可调用的 qq_send 工具。它基于 QQ 开放平台 Bot API,不依赖 NapCat、SnowLuma 等第三方协议。

社区插件目录见 SkillHub 条目;源码与说明在 GitHub:meow09nine/dsh-suinian。维护者 GitHub 用户名为 meow09nine,package 作者署名为上若拾梦(Finnley_evokia)。当前 package 版本为 0.2.2,MIT License。另有一个同名 OpenClaw 包 suinian-heartbeat,宿主与配置均不通用,装错环境不会生效。

这是什么

dsh-suinian 是 DSH 0.2.x 下的联网类插件(社区分类:联网工具)。依赖:一个已在 QQ 开放平台注册的官方 Bot,以及已接入该 Bot 的 DSH profile(例如通过 @tencent-connect/dsh-qqbot)。必填配置为 Bot 的 appId、appSecret,以及接收主动消息用户的 c2c openId(用户先私聊 Bot 一条消息后,Bot 侧 author.id / 会话 targetId 即为此值)。

核心功能

以下能力均来自项目 README,已核实。

  1. 工具 qq_send(text):Agent 在任意会话中可主动发一条 QQ 私聊消息。
  2. 随机心跳:在可配置日窗口(默认 8:00–24:00)内分窗口随机到点,唤醒 Agent 生成内容并发送。
  3. 事件触发:用户超过 idleHours(默认 3 小时)未说话时主动问候,带冷却与每日上限。
  4. 审计日志:默认写入插件目录 logs/suinian.log,记录 plan、唤醒、发送等;状态文件为 suinian-state.json。

主动消息走官方接口 POST https://api.sgroup.qq.com/v2/users/{openId}/messages。额度为 1000 条/天/用户、20 条/分钟(README 说明)。群聊侧官方 Bot 通常只能 @ 触发,与本插件「主动私聊」场景不同。

安装与启用

README 未给出 dsh plugin add github:owner/repo 一类命令;安装按仓库说明顺序进行。

  1. 将发布包解压到任意目录。
  2. 填配置(二选一):
    - 交互式:node setup.mjs
    - 手动:编辑目录内 cordis.patch.yml,替换 YOUR_APPID / YOUR_APPSECRET / YOUR_C2C_OPENID
  3. 自检(建议先 dry-run,再真发一条):
node selfcheck.mjs --dry-run   # 只校验配置 + 拿 token,不发消息
node selfcheck.mjs             # 真发一条测试消息
  1. 装入 DSH:
    - 推荐:用 DSH 插件管理器对本目录执行 install_bundle。
    - 手动:目录放到目标 profile 的 node_modules/dsh-suinian/,将 patch 中 - insert: 段合并进 profile 的 cordis.patch.yml,重启 DSH。

合并 patch 时注意:新增行须用 - insert: 包裹;若写成 - id: 会尝试覆盖已有行,新行不存在时插件不会加载。

运行环境:Node.js >= 20(见 package.json engines)。

配置要点

cordis.patch.yml 的 config 中三项必填:appId、appSecret、openId。

常用可选项(默认值以 README 为准)包括:startHour / endHour(8 / 24)、windowMinutes(120)、每窗口次数 minPerWindow / maxPerWindow(3 / 4)、全局最小间隔 minGapMinutes(21)、每次唤醒连发条数 linesPerPoint([2, 4])、每日上限 maxPerDay(40)、空闲问候相关 idleHours、idleCooldownMs、maxIdlePerDay,以及 dryRun(true 时只记日志、不真发)。

建议启用顺序:先 dryRun: true 跑一两天看日志节奏,再关闭 dryRun;首日关注 plan / woke / sent / voided 等记录。

典型用法与工作方式

Agent 被定时器或空闲逻辑唤醒后,经 sessionController.prompt 生成内容,再调用 qq_send 完成发送。流程可概括为:

定时器到点 → 唤醒 agent 会话 → agent 生成内容 → qq_send
          → POST .../v2/users/{openId}/messages

自定义唤醒文案可使用 promptText / idlePromptText,支持 {lines} 占位(与 linesPerPoint 配合)。

适用场景与注意

适合:已在 DSH 中接入 QQ 官方 Bot、希望 Agent 私聊侧有「碎念式」主动触达(心跳 + 久未回复问候 + 随时工具发一条)的开发者。

注意:

  • 插件以当前 DSH 进程权限运行;安装前请阅读源码与 MIT 许可证,自行评估凭证与 openId 存放方式。
  • 过期时间窗不补发,避免重启后集中轰炸;有无人在线都有窗口次数与每日上限约束。
  • 日志/状态默认在插件内 logs/,可用 logFile / stateFile 改路径。
  • SkillHub 与 DeepSeek / 幻方无官方从属关系,目录为社区生态站点;DSH 本身遵循「一切皆插件」的扩展方式。

结尾

dsh-suinian 把「主动 QQ 私聊」拆成可配置的随机心跳、空闲问候和 qq_send 工具,并自带 setup、selfcheck 与 dry-run 路径,便于在真发前核对节奏与凭证。

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

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

小夜