前言¶
在 DeepSeek Harness(DSH)里接 QQ 官方机器人时,agent 通常只在有人 @ 本机器人时才会被唤醒。群里其他成员、尤其是其他机器人发出的消息,在默认推送策略下既不会进会话,也很难事后核对「到底是平台没推,还是被中间件挡掉了」。若你希望 agent 能感知群内其他机器人的发言、按需介入或做转录回看,需要在 SDK 入站层额外做一层观测与唤醒策略。
下面介绍社区插件 dsh-otherbot-radar(维护者 ChencLi819,分类:工作流)。它在不发起额外网络请求、不接触开放平台凭据的前提下,钩住 QQ 机器人 SDK 的入站处理,把平台实际推到进程里的消息记下来,并按配置决定是否唤醒 agent。
这是什么¶
dsh-otherbot-radar 是 DSH 插件,当前版本 0.1.0(MIT 许可证)。定位可以概括为:QQ 群内「别家机器人雷达」—— SDK 入站全量记录(含被门控挡掉的消息)、别的机器人说话即可唤醒 agent、转录与诊断工具、以及基于文件的收件口桥。
依赖关系:需已安装并启用 DSH 的 QQ 机器人相关能力;可选 peer @tencent-connect/dsh-qqbot(>= 0.5.0);Node.js >= 22.13.0;宿主为 @tencent-connect/qqbot-nodejs 的 handleInboundMessage / send / sendMedia。
- 目录页:https://www.skillhub.cn/plugins/ChencLi819/dsh-otherbot-radar
- 源码与文档:https://github.com/ChencLi819/dsh-otherbot-radar
背景:为什么默认「听不见」¶
QQ 官方机器人平台按事件类型推送。未开启「接收全量消息」时,常见只有 GROUP_AT_MESSAGE_CREATE(有人 @ 本机器人)。开启全量后才会收到 GROUP_MESSAGE_CREATE(群内每条消息),且其他机器人消息(author.bot = true)会随全量推送过来。
全量开关不在 q.qq.com 网页后台,而需群主在手机 QQ 添加或管理机器人时勾选「设置接收全量消息能力」(详见 README 引用的官方文档与 FAQ)。开启后还要注意:@ 消息也会以 GROUP_MESSAGE_CREATE 送达,是否 @ 本机器人需看 mentions[].is_you;同一条消息可能重复推送,雷达会如实记多行以便核对。
核心功能¶
入站雷达¶
包装 SDK 的 handleInboundMessage,平台推来的每一条入站消息写入状态目录下的 radar.jsonl,包括被门控挡掉的消息,并附带「消息下场」 trace。排障时可以区分:平台没推,还是策略挡了。
唤醒策略¶
- 别的机器人说话可唤醒 agent(无需 @);同一机器人在 10 分钟窗口内默认最多唤醒 10 次,减轻两个机器人互相刷屏。
- 人类消息是否唤醒由
wakeOnHuman控制:all(默认,群内消息都唤醒)或mention(仅被 @ 时唤醒)。
转录与工具¶
别的机器人的发言单独写入 transcript.jsonl。插件注册两个工具,输出均为 { text: string }:
| 工具 | 用途 |
|---|---|
otherbot_recent |
查看别的机器人最近说了什么(平台推送 + 收件口);可选 bot、group、limit(默认 20,最多 100) |
otherbot_diag |
雷达是否生效、平台实际推送了什么;可选 lines(默认 12,最多 40) |
收件口(桥)¶
平台不推送时,任何能写文件的进程把消息写入 inbox/*.jsonl(一行一条 JSON),轮询间隔默认 3000 ms,即可唤醒 agent。agent 回复追加到 outbox.jsonl,由外部进程读走。
其他¶
- 自回声识别:按已发出消息的 id + 正文丢弃 QQ 推回来的本机器人消息,避免自问自答。
- 提示词注入:可选向 agent 说明群里有别的机器人及如何查询(
promptEnabled/promptText)。
安装与启用¶
通过 DSH CLI 安装(命令来自仓库 README):
dsh plugin --profile desktop add dsh-otherbot-radar
# 或从 GitHub 安装
dsh plugin --profile desktop add github:ChencLi819/dsh-otherbot-radar
安装后重启 DSH 或等待热重载,新会话中应出现 otherbot_recent 与 otherbot_diag。
若使用仓库内 link: 开发安装,README 说明需运行 node tools/install.mjs,并用 node tools/smoke.mjs 做离线自检。以 link: 安装时若 radar.jsonl 始终不出现,可先运行 node tools/probe-tap.mjs 检查 SDK 模块解析与钩子(Node 按 realpath 解析可能导致插件与工作区 SDK 不是同一实例,插件内 lib/tap.js 有兜底逻辑)。
配置¶
在 profile 的 cordis.patch.yml 中覆盖 otherbot-radar 的 config(仅写需要改的字段)。默认值见仓库 index.js 的 DEFAULTS,示例:
- id: otherbot-radar
config:
wakeOnOtherBot: true
wakeOnHuman: all # all / mention
otherBotBurstLimit: 10
otherBotBurstWindowMinutes: 10
bridge:
enabled: true
dir: ~/.dsh/otherbot-radar/inbox
pollMs: 3000
promptEnabled: true
常用项:enabled(总开关)、stateDir(默认 ~/.dsh/otherbot-radar)、selfName(写入 outbox 时代表自己的名字,建议填机器人名)。正式环境不要设置 sdkLoader(仅测试用)。
典型用法¶
用工具回看别的机器人发言¶
在 agent 会话中调用 otherbot_recent,可按机器人名片段、群、limit 过滤。数据来源包括 QQ 全量推送与收件口。
排障¶
调用 otherbot_diag,或直接查看:
| 文件 | 内容 |
|---|---|
~/.dsh/otherbot-radar/radar.jsonl |
全量入站与 trace |
~/.dsh/otherbot-radar/transcript.jsonl |
仅别家机器人 |
~/.dsh/otherbot-radar/outbox.jsonl |
agent 回复 |
~/.dsh/otherbot-radar/boot.log |
加载记录(含版本与配置) |
README 中的对照表:入站 0 条多为未开全量或群内无消息;只有 GROUP_AT_MESSAGE_CREATE 需群主开全量;全量在推但 otherBot 为 0 时平台可能过滤机器人消息,只能走收件口。
通过收件口递话¶
字段宽松,例如:
{"bot":"小助手","text":"要比就比点具体的,别比嗓门","group":"<group_openid>"}
Windows PowerShell 一行写入示例(路径来自 README):
'{"bot":"小助手","text":"'"$text"'"}' | Add-Content -Encoding utf8 "$env:USERPROFILE\.dsh\otherbot-radar\inbox\inbox.jsonl"
已处理行不会重复唤醒;重启不会重读旧行。
适用场景与注意¶
适合谁:在 DSH 里运营 QQ 群 agent、需要监听或响应其他机器人发言、或要在平台推送不完整时用文件桥接外部消息的场景。
权限与安全:插件以当前 DSH 进程权限运行,只在进程内处理已送达 SDK 的事件,不自行联网拿凭据。安装前建议阅读源码与 MIT 许可证,确认行为符合你的群规与合规要求。
已知限制(摘自 README):
- 对面机器人能否听见本 agent 的回复,取决于对方是否开全量或是否被 @;本插件解决的是「本侧听见」,双向需两侧都配置。
- 平台不推送的内容无法凭空生成,只能靠收件口。
- 桥消息无
msg_id,agent 回复属主动消息,受 QQ 主动消息频控(如群 1000 条/天)。 - 钩子打在 SDK 原型上,
@tencent-connect/qqbot-nodejs大版本升级后应用node tools/smoke.mjs再确认。 - 「接收全量消息」须群主授予,插件无法代开。
DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-otherbot-radar 把 QQ 入站从「仅 @ 才醒」扩展为可观测的全量雷达、可配置的别家机器人唤醒、可回看的转录,并在推送不足时用 inbox / outbox 做文件桥。若你已在 DSH 上跑 QQ 机器人,可按上文 CLI 命令安装,用 otherbot_diag 确认雷达是否挂上、全量权限是否到位。