前言¶
DeepSeek Harness (DSH) 採用插件化架構,旨在通過插件擴展功能。dsh-dingtalk-channel 是一個插件,它將釘釘 IM 機器人 channel 接入 DSH。該插件通過釘釘官方的 Stream 模式(WebSocket 長連接)建立連接,不需要公網回調地址或服務器配置 webhook。每條單聊或羣聊消息都可以作爲入口驅動一個完整的 agent,回覆內容也會流式返回到對話中。
核心功能¶
下面介紹該插件的主要能力。
一會話一 agent¶
插件爲每個會話創建一個獨立的 agent。會話 ID 通過會話鍵確定性派生(格式爲 ding-<chatId>),保證跨重啓的穩定性。通過配置 sessionScope: chat-sender,可以在共享羣裏讓每個成員擁有獨立的 agent。
即時反饋與靜默過程¶
釘釘原生不支持打字指示或思考過程卡片。插件通過先發送“🤔 已收到”的回執來提供即時反饋。在 agent 調用 bash、read 等工具的過程中,中間步驟不會發送聊天消息,只發送最終的 markdown 格式答案,思考過程僅在回執或思考表情中暗示。
訪問策略與權限¶
插件提供細粒度的訪問控制。
- 單聊/羣聊限制:通過
senderAllowlist限制單聊發送者,通過groupAllowlist限制羣會話。 - 羣聊 mention:通過
requireMention配置,僅在羣消息被 @ 時響應。 - 審批機制:支持審批流程,agent 需要批准時會在對話中發送審批消息,回覆“允許一次”或“拒絕”進行結算。
- 權限範圍:chat agent 擁有與宿主進程相同的權限,可以執行 bash、讀寫文件、git、網絡操作及使用 skills。
長連接與命令¶
- 長連接自愈:SDK 內置自動重連機制,斷線後自動嘗試恢復。
- 命令支持:支持
/ping、/help、/status、/stop、/new等命令。 - 可觀測性:拒絕、失敗或斷線等事件會通過 stderr 輸出通知。
安裝與啓用¶
釘釘側準備¶
- 登錄 釘釘開發者後臺。
- 創建一個企業內部應用,記下 ClientID 與 ClientSecret。
- 在應用能力中添加機器人,完善信息,將消息接收模式設置爲 Stream 模式,然後發佈應用。
- 將機器人拉入目標羣或讓成員私聊它。
安裝插件¶
在終端執行以下命令安裝插件:
dsh plugin --profile web add github:ttmouse/dsh-dingtalk-channel
配置憑證¶
在 ~/.dsh/profiles/web/cordis.patch.yml 中添加配置。如果需要走環境變量,可以使用 !!js process.env.… 語法。
- id: dingtalk-channel
name: 'dsh-dingtalk-channel'
config:
clientId: 'ding...'
clientSecret: '...'
botName: '我的助手'
requireMention: true
# sessionScope: chat-sender
# preset: standard
# cwd: /path/to/workspace
啓動 DSH:
dsh web
啓動日誌中若顯示憑證校驗通過,說明連接成功。在釘釘中私聊機器人發送 /ping,應收到 pong。
典型用法¶
基礎對話¶
配置好 clientId、clientSecret 和 botName 後,通過聊天即可與 agent 交互。工具可以通過 preset 掛載到會話 agent 上。
共享羣多用戶¶
在共享羣中,若想讓每個人擁有獨立的 agent,需在配置中設置 sessionScope: chat-sender。這樣插件會根據發送者生成獨立的會話鍵,實現一人一號。
審批操作¶
當 agent 需要執行敏感操作(如審批)時,它會在聊天中發起審批請求。你可以直接回復“允許一次”或“拒絕”來控制流程。
注意事項¶
- 權限風險:chat agent 擁有與宿主進程同等的權限,包括執行 bash 命令、讀寫文件等。請僅在可信的環境或羣組中使用。
- 功能限制:釘釘原生不支持思考過程可視化,工具調用過程不會直接顯示在聊天中;目前暫不支持圖片和文件的轉發;不支持掃碼註冊,需在後臺手動創建應用。
- 工作區切換:目前不支持
/cd、/model use、/ws等工作區切換與模型熱切換功能。 - 默認配置:默認禁用了
ask_user_question和exit_plan_mode工具,審批改爲對話內回覆結算。
許可證¶
該插件遵循 MIT 許可證。