DeepSeek Harness(DSH)採用插件化架構。開發者經常需要通過企業微信與智能體交互。現有的解決方案通常需要配置公網 URL、消息加解密或可信 IP 白名單。dsh-plugin-wecom-bot 專注於解決這些問題,通過建立長連接實現簡單的消息路由。
核心功能¶
該插件通過企業微信「智能機器人」長連接收發消息,把發給機器人的文本當作任務下發給 DSH agent 執行,並把結果回傳到企業微信。
主要能力包括:
- WebSocket 長連接模式:基於官方協議建立連接,支持流式回覆。
- 零公網依賴:長連接由插件主動連出,不需要配置公網 URL、消息加解密或可信 IP 白名單。
- 會話模式:支持
per-user(每個成員一個會話)和per-message(每條消息新建 agent)兩種模式。 - 工作區與會話管理:支持在聊天中切換工作目錄、管理多個命名會話。
- 審批轉發:將沙箱升級等權限操作請求轉發到企業微信,通過回覆指令完成審批。
- 協議兼容:通過
ws庫處理 ALPN 握手問題,解決 Node.js 默認 WebSocket 客戶端與企業微信網關的兼容性。
安裝與啓用¶
在插件源碼目錄執行以下命令。
- 安裝依賴(插件依賴
ws庫):
pnpm install
- 裝進 web profile:
dsh plugin --profile web add .
安裝完成後,重啓 dsh web 生效。
配置¶
在啓動 dsh web 前,設置環境變量即可啓用。需要填寫企業微信後臺獲取的 BotID 和 Secret。
export WECOM_BOT_ID="wwxxxxxxxxxxxxxx"
export WECOM_BOT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
dsh web
使用方法¶
啓動與驗證¶
啓動後,日誌應顯示連接成功:
wecom-bot: connecting
wecom-bot: subscribed
wecom-bot: connected
在企業微信中私聊機器人發送指令,例如:
幫我總結一下這個目錄下 README.md 的主要內容
工作區切換¶
在 per-user 模式下,可以切換 agent 的工作目錄。每個企業微信成員獨立記住自己的目錄。
- 查看工作區:
#ws或查看工作區 - 切換工作區:
#ws <名稱或路徑> - 查看當前目錄:
#cwd
示例:
#ws productv4-web
會話管理¶
在 per-user 模式下,支持創建和管理多個命名會話。
- 列出會話:
#sessions或會話列表 - 新建會話:
#new <名稱> - 切換會話:
#use <名稱> - 刪除會話:
#rm <名稱>
權限審批¶
當 agent 需要執行需要權限提升的操作(如沙箱升級)時,會發起審批。審批請求會轉發到企業微信,直接在聊天中回覆即可。
示例:
🔐 需要審批 #1
回覆「同意 #1」批准,或「拒絕 #1」拒絕
支持的回覆指令包括:
* 批准:同意、批准、允許、是、ok、y,可帶編號 #1。
* 拒絕:拒絕、不同意、否、no、n,可帶編號 #1。
配置項說明¶
| 配置鍵 | 默認值 | 說明 |
|---|---|---|
botId |
環境變量 WECOM_BOT_ID |
智能機器人 BotID |
botSecret |
環境變量 WECOM_BOT_SECRET |
智能機器人 Secret |
sessionMode |
per-user |
per-user 每個成員一個 agent 會話;per-message 每條消息新建 agent |
cwd |
進程 cwd | agent 的工作目錄 |
maxReplyChars |
6000 |
最終回覆最大字符數,超出截斷 |
forwardAllApprovalsToWecom |
true |
是否將任何會話的審批請求都轉發到企業微信處理 |
approvalTimeoutMs |
0 |
審批超時(毫秒),0=不超時 |
已知限制¶
- 長連接限制:同一機器人同時只允許一個長連接。另一處連上時,本連接會收到
disconnected_event並被斷開。 - 消息頻率:受企業微信限制,約 30 條/分鐘。
- 文件支持:語音消息按轉寫文本處理;圖片/文件消息暫不處理(會被忽略)。
- ALPN 握手:企業微信長連接網關要求 TLS ClientHello 攜帶 ALPN
http/1.1。本插件使用ws庫解決了此問題,若使用其他客戶端需注意此限制。 - 回覆截斷:最終回覆超過
maxReplyChars會被截斷。