前言¶
給智能體接一個聊天入口,常見的做法是自建一個 HTTP 服務,再讓 agent 輪詢或收 webhook。對於微信這種入口封閉、需要常駐登錄的環境,自建服務還只是前半段:賬號登錄、消息收發、會話隔離、限流去重,都要另外想辦法。下面介紹一個把「微信入口」和「DSH agent」接起來的插件 dsh-wechat-pad。
它由 QIC-9821 維護,在社區目錄裏歸在「客戶端」一類。插件本身不含任何微信協議實現,而是對接一臺你自己跑的 iPad 協議端(目前適配 WeChatPadPro 的接口):協議端負責登錄和收發,插件負責「誰在說、要不要答、交給哪個會話、怎麼回」。
它是什麼¶
一句話定位:把個人微信接進 DeepSeek Harness(DSH)的 Host 插件,私聊隨手回,羣裏被 @ 才說話。
它做三件事:
- 從協議端的 webhook 收消息,按規則判斷要不要轉給 agent。
- 按「一個羣一個獨立會話」建上下文,私聊和羣聊不互相串。
- 把 agent 的回答發回微信,超長切段、超時兜底、限速防刷屏。
它不做協議實現,不提供協議端、賬號或繞過風控的手段。項目狀態標爲 experimental,License 爲 MIT,npm 包版本 0.2.1,要求 Node.js >= 22。
核心能力¶
私聊:對方發來就回,可以在配置裏關掉。
羣聊:只有 @ 到它時才答,回答時帶 @對方 前綴;不在白名單的羣默認一律不說話。
會話隔離:羣裏聊的、私聊聊的各自有上下文,換羣等於換會話,不會把 A 羣的內容帶到 B 羣。
控制面板:/wechat-pad 頁面可以掃碼登錄、看連接狀態、開關羣白名單、看統計(收到多少、回了多少、爲什麼跳過)。
webhook 自動配置:把回調地址填好後,插件啓動時自己寫回協議端,也可以手動關掉(autoConfigureWebhook: false)。
工作原理¶
微信 ←→ 協議端(WeChatPadPro,跑在你自己的機器/雲上)
│ webhook(消息)
▼
dsh-wechat-pad(Host 插件,跑在 DSH 裏)
│ session/create · session/prompt · session/event
▼
DSH agent ←→ 你的模型、你的工具、你的記憶
│ 回答
▼
協議端 SendText → 微信
插件在 DSH 進程內運行,直接調宿主的會話服務,不走 HTTP 中轉,因此不需要 launch token。面板和 webhook 都掛在 DSH 自己的 webServer 上,不額外開端口。
前置條件¶
裝之前先把這幾樣備齊:
- 一臺能跑協議端的機器:Linux(推薦,Docker 也行)或 Windows,能 7×24 在線。協議端掉線等於收不到微信消息。
- 一個你願意承擔後果的微信號,建議用小號。
- 一個固定出口 IP,以及一個能讓協議端回調到 DSH 的地址。如果協議端和 DSH 不在同一臺機器,需要一個公網地址或隧道(cloudflared / frp / tailscale 均可),且 webhook 路徑能直通 DSH。
- DSH 0.2.x(桌面包或
dshCLI 均可)。
安裝與啓用¶
在 DSH 的 profile 裏裝,三選一:
# npm(推薦)
dsh plugin add dsh-wechat-pad
# 直接從 GitHub tag 裝
dsh plugin add github:QIC-9821/dsh-wechat-pad#v0.1.0
# 從本地目錄裝(開發時)
dsh plugin add /path/to/dsh-wechat-pad
上述命令來自項目 README。裝完在「設置 → 插件」裏啓用 dsh-wechat-pad,或直接寫進 profile 的 bundles。桌面版啓用後刷新頁面即出現面板;改配置後需要重啓 DSH 才生效。啓用後打開:
http://127.0.0.1:<DSH 端口>/wechat-pad
配置¶
配置寫在插件配置裏(cordis.patch.yml 的 config,或設置頁表單)。必填只有兩項:padUrl 和 token。
| 鍵 | 默認 | 說明 |
|---|---|---|
padUrl |
— | 協議端地址,如 http://127.0.0.1:8080 |
padToken |
— | 協議端 AuthKey(明文,不推薦長期用) |
padTokenRef |
DSH_WECHAT_PAD_TOKEN |
從憑據庫/環境變量取 token 的鍵名(推薦) |
hookPath |
/wechat-pad/hook |
接收協議端回調的路徑 |
webhookSecret |
自動生成 | 回調密鑰;不填則啓動時生成並存進狀態文件 |
autoConfigureWebhook |
true |
啓動時把回調地址寫回協議端 |
selfWxid |
自動探測 | 機器人自己的 wxid |
botNames |
[] |
別名,用於識別 @小助手 這類寫法 |
answerDirectMessages |
true |
私聊是否回 |
defaultTrigger |
mention |
羣默認觸發方式:mention(被 @)或 all |
groups |
[] |
羣白名單,見下 |
allowUnknownGroups |
false |
不在白名單的羣是否也回(不建議開) |
timeoutSec |
120 |
等 agent 回答的上限 |
timeoutReply |
我想得有點久,等下再答你 |
超時兜底話術 |
maxReplyChars |
4000 |
單條回答最多多少字 |
chunkChars |
1500 |
超過就分段發 |
chunkDelayMs |
1500 |
分段之間的間隔 |
ratePerMinPerGroup |
5 |
每羣每分鐘最多回幾條 |
ratePerMinGlobal |
10 |
全局每分鐘上限 |
queueLimit |
5 |
每羣排隊上限,超了丟棄並記賬 |
dedupeTtlSec |
3600 |
同一條消息多久內不重複處理 |
stateDir |
~/.dsh/wechat-pad |
狀態文件目錄(會話綁定、去重、白名單) |
workspaceDir |
~/.dsh/wechat-pad/workspace |
會話的工作目錄 |
systemHint |
空 | 拼在每條 prompt 前的固定提示 |
羣白名單的寫法:
groups:
- id: 12345678@chatroom # 羣 id(以 @chatroom 結尾)
name: 技術交流羣 # 選填,只用於顯示
enabled: true
trigger: mention # mention | all
ratePerMin: 3
羣 id 從協議端的 webhook 原始載荷裏看:面板的「統計」裏有最近消息,或打開 logRawPayloads 後看 stateDir/raw/。
token 建議用 padTokenRef 從環境變量或憑據庫取,不要把明文 token 寫進配置文件提交到 git。
典型用法¶
裝好之後按下面幾步跑通:
- 打開
http://127.0.0.1:<端口>/wechat-pad,點「掃碼登錄」,用手機微信掃。 - 等面板顯示「在線」。
- 把機器人拉進羣,在羣裏 @ 它纔會說話;私聊直接說。
- 想讓機器人只對某些羣說話,就填
groups白名單。
除了配置文件,DSH 的「設置 → 微信」裏還有一頁運行時開關,改完保存,下一條消息就按新規則走,不用重啓 DSH。這頁裏實用的幾項:
| 設置 | 默認 | 作用 |
|---|---|---|
| 啓用自動回覆 | 開 | 關掉後照收消息,但不轉給模型 |
| 羣裏怎麼說話 | 只回 @ 我的 | 「只回 @」/「每句都回」/「羣裏不理」 |
| 私聊自動回覆 | 開 | 關掉只記錄不回覆 |
| 自動加入新羣 | 關 | 開以後白名單外的羣也會回 |
| 連發合併窗口 | 800 ms | 同一個人連發幾條合併成一次提問,省上下文 |
| 單條回覆上限 | 4000 字 | 超過截斷 |
| 超長回覆分段長度 | 1500 字 | 超過上限的回覆切開分多條發 |
| 等待模型超時 | 120 秒 | 超時回一句兜底話 |
| 每分鐘上限(單會話/全局) | 5 / 10 | 防刷屏 |
| 說話風格提示 | 兩三句話 | 加在每次提問前,限定語氣和長度 |
運行時設置存到 <stateDir>/settings.json,覆蓋配置文件裏的同名項。面板上還有「立即掃描一次」「重開會話」兩個按鈕。
適用場景與注意¶
適合已經在 DSH 裏跑自己的 agent、想在微信羣裏用它應答、且願意自己維護協議端的人。協議端需要 7×24 在線,適合放在雲主機或常開的機器上。
幾點需要提前知道的:
- 封號風險:非官方協議登錄個人微信違反微信軟件許可及服務協議,資料裏明確寫了可能被封號,輕則 1 天,重則永久。首次登錄常掉線,按協議端文檔重掃、穩設備處理。請只在你自己的號、且願意承擔後果時使用。
- 權限:插件以宿主 owner 身份建會話,agent 能用的工具就是你在 DSH 裏給它的工具。如果這個號會對陌生人說話,不要給它開通危險工具。
- 隱私:消息會經過你的協議端 → 你的 DSH → 你的模型服務商。不要把不該給模型看的東西發進來。
- 密鑰:用
padTokenRef從環境變量/憑據庫取 token。 - 兼容性:目前實測只適配 WeChatPadPro(
/api/login/*、/api/v1/message/*、/v1/webhook/*)。換別的後端需要實現同樣的幾個端點,或改lib/pad-client.js裏的路徑表。
安裝前建議先檢查源碼與許可證(MIT)。項目自帶 11 個測試覆蓋解析、策略、去重、限速、分段、超時和 e2e,e2e 用 test/mock-pad.mjs 這個假協議端跑通「webhook → 會話 → 回覆」,不依賴真微信,可以先 npm test 看行爲是否符合預期。
結尾¶
dsh-wechat-pad 的價值在於把「微信入口」和「DSH agent」之間的膠水層固化下來:會話隔離、@ 觸發、限速去重、分段回覆都做好了,需要自己搭的只剩協議端和一臺常開的機器。它仍是 experimental,協議端也不是官方接口,用之前想清楚封號風險。
目錄頁:https://www.skillhub.cn/plugins/QIC-9821/dsh-wechat-pad
GitHub:https://github.com/QIC-9821/dsh-wechat-pad
npm:https://www.npmjs.com/package/dsh-wechat-pad