前言¶
在 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 確認雷達是否掛上、全量權限是否到位。