前言¶
在 DeepSeek Harness(DSH)裏跑 agent,常見做法是桌面或 Web 會話裏打字交互。若希望對方在 QQ 裏發一句、agent 在同一套會話裏回一句,就需要一條穩定的「渠道」:入站事件、路由到會話、出站發消息。社區裏已有基於 OneBot 的 QQ 機器人方案,但和 DSH 的 agent.followup()、工具調用模型並不天然對齊。
下面介紹維護者 danshuyue 發佈的客戶端插件 dsh-onebot-channel:基於 OneBot 11 協議,入站以 WebSocket 事件推送爲主、HTTP 輪詢兜底,出站通過 qq_send 等工具回話。npm 包名 dsh-onebot-channel,當前資料中版本爲 0.15.2,許可證 MIT,運行環境要求 Node >= 22.19。
這是什麼¶
一句話:把 QQ 私聊與羣聊變成 DSH 會話裏的回合——對方在 QQ 發消息,插件按路由表喚醒綁定的會話;agent 看到帶時間戳與身份標註的正文,再通過 OneBot 的 send_private_msg / send_group_msg 回到 QQ。
數據流(摘自項目 README):
QQ 客戶端
↓ OneBot 11 協議端(SnowLuma / LLOneBot 等)
↓ 本插件:WS 事件推送爲主,HTTP 輪詢兜底
路由表:這個 QQ 號 / 羣綁的是哪個會話
↓ agent.followup() 喚醒會話
會話跑一個回合
↓ agent 調 qq_send 工具
OneBot send_private_msg / send_group_msg
↓ 按換行或 segments 切條,帶隨機延時
回到 QQ
插件不讀取 QQ 密碼,只與已配置的 OneBot 協議端通信。未綁定到會話的 QQ 號或羣會被忽略,避免誤投到其他會話。
核心功能¶
入站與路由¶
- 私聊 / 羣聊投遞:每個 QQ 號或羣在設置裏綁定一個 DSH 會話;未綁定的一律忽略。
- WebSocket 實時推送:延遲接近零;斷線後自動退回輪詢補漏。
- 身份標註:逐條區分「用戶本人」與「羣友(不是用戶本人)」,減少 agent 張冠李戴。
- 羣聊上下文:被 @ 時可附帶上次投遞之後的未讀羣消息。
- 私聊合併窗口(
mergeWindowMs,默認 2500 ms):連續多條私聊先記賬再合併爲一個回合,避免連開多個回合;僅私聊生效,羣聊仍以 @ 爲觸發。
出站與對話節奏¶
裝好後 agent 可用 10 個工具(名稱與用途以 README 爲準):
| 工具 | 幹什麼 |
|---|---|
qq_send |
發消息、表情;支持 segments 分條、reply_to 引用、at 羣 @ |
qq_emoji_search |
搜 QQ 官方表情目錄 |
qq_msg_history |
查羣 / 好友歷史(返回內容含圖,README 標註 0.12.0 起) |
qq_collect_face |
收藏收到的表情包 |
qq_face_preview |
查看收到的表情包(結果帶圖) |
qq_qzone_post |
發 QQ 空間說說(須 confirm: true) |
qq_wait |
等待對方說完,返回期間新消息(默認 8s,上限 60s) |
qq_pass |
本回合不在 QQ 開口(正文裏已有真話仍會發出) |
qq_close |
雙方收尾時結束會話並記下續聊要點 |
qq_remember |
記住稱呼或事實,下次入站注入 |
沉默權:qq_wait / qq_pass / qq_close 用於模擬真人節奏;qq_pass 不會吞掉已寫入會話的真話正文(0.9.3 修正)。qq_close 在對方仍有未答提問時會被橋接拒絕。
引用與 @(0.13.0 / 0.14.0):默認自動引用觸發回覆的那條;分條發送時 @ 與引用只掛在第一條。出站裝飾段(引用、@、表情)失敗時會逐級剝離重試,避免整段回覆消失。
關係記憶:稱呼與事實落在 ~/.dsh/qq-bridge-memory.json;可通過 memoryEnabled: false 關閉注入。
主動搭話(默認關,proactiveEnabled):按靜默時段、空閒時長、日配額等條件向已綁私聊投內部來信,是否開口仍由模型決定(可用 qq_pass)。狀態在 ~/.dsh/qq-bridge-proactive.json。
媒體與其它¶
- 正文
[表情:呲牙]或qq_send的emoji/custom_emoji(商城大表情需先收藏)。 - QQ 圖片下載後進 DSH 附件庫,以 image 塊進入會話;入站、羣 @ 上下文及
qq_msg_history等路徑在 README 中均有說明。
更細的對話邏輯見倉庫內 docs/QQ對話說明.md。
安裝與啓用¶
前置條件:先運行一個 OneBot 11 協議端(如 SnowLuma、LLOneBot),並在插件配置裏填寫協議端 HTTP 地址與 token。
官方安裝命令:
dsh plugin --profile desktop add dsh-onebot-channel
裝完後在 DSH 設置 → QQ 橋接 填寫協議端地址和 token,將 QQ 號 / 羣綁定到對應會話。
配置持久化在 ~/.dsh/qq-bridge.config.json,不在插件目錄內,重裝插件不會丟失該文件。
典型用法¶
發消息與表情¶
// 發消息 + 經典小表情
{ "text": "搞定了", "emoji": "OK" }
// 發收藏夾裏的商城大表情
{ "text": "看這個", "custom_emoji": "貓" }
// 一句話拆成三條,逐條發出
{ "segments": ["我跟你說", "那個事搞定了", "不過還差一點"] }
查表情與歷史¶
{ "query": "比心" } // qq_emoji_search
{ "group_id": "1046436553", "count": 20 } // qq_msg_history,默認 20 條,上限 100
發說說(須確認)¶
{ "content": "今天天氣不錯", "visibility": 1, "confirm": true }
說說可見性:1 所有人 · 4 僅好友 · 16 僅自己 · 64 指定好友 · 128 分組。
入站正文中的消息錨點形如 (2026-10-31 20:15)[#-2123597213](QQ羣 …)…,需要明確引用其它消息時在 qq_send 上傳 reply_to 爲 [#數字] 中的數字。
適用場景與注意¶
適合誰:已在 DSH desktop profile 上跑 agent,並願意自建 OneBot 11 協議端、把 QQ 當作其中一個對話渠道的開發者和個人用戶。
權限與安全:插件以當前 dsh 進程權限 運行,可讀寫 ~/.dsh/ 下橋接相關配置與記憶文件,並通過協議端代發 QQ 消息。安裝前應閱讀 GitHub 倉庫 源碼與 MIT 許可證,確認協議端與白名單策略(如 allowlist.js)符合你的信任邊界。
生態說明:DSH 社區插件目錄託管於獨立站點 SkillHub 插件頁,與 DeepSeek / 幻方無官方從屬關係;選用插件屬於社區生態行爲,需自行評估維護狀態(GitHub 上資料顯示 1 star、分類爲客戶端)。
結尾¶
dsh-onebot-channel 把 OneBot 11 的 WS 入站與 DSH 會話回合對齊,並用 qq_send 等工具覆蓋發消息、表情、歷史、節奏控制與可選主動搭話。若你要在 QQ 裏和同一個 Harness agent 對話,可先起協議端,再按上述命令安裝並在 QQ 橋接裏完成綁定。