前言¶
在 DeepSeek Harness(DSH)裏做智能體,常見做法是單獨開機器人賬號或自建應用:對方看到的是「數字員工」,問題往往還要先轉發給 agent。若你希望同事在釘釘私聊裏問的是「你本人」,而答覆又來自你綁定的 DSH 工作區(只讀查資料),就需要一條以個人 OAuth 身份讀私聊、再以本人賬號發回的鏈路。下面介紹社區插件 dsh-dingtalk-self(維護者 MinEagle,GitHub 倉庫 MinEagle/dsh-dingtalk-self),它在 SkillHub 目錄中歸類爲「工作流」。
這是什麼¶
dsh-dingtalk-self 是 DSH 插件「釘釘代答」:監聽你指定的釘釘私聊聯繫人,把新消息投遞到各自綁定的 DSH 工作區,由 agent 在工作區內查資料生成回覆,最後通過 dws CLI 以你本人身份發出(--ai-tag=false,可選末尾標識行)。不需要機器人賬號,也不把問題轉發給 agent 再人工粘貼。
與普通釘釘機器人 / 自建應用插件的對比如下(資料原文表格):
| 機器人 / 自建應用插件 | 本插件 | |
|---|---|---|
| 發送身份 | 機器人 | 你本人 |
| 讀取範圍 | 機器人被拉進的羣 | 你的私聊 |
| AI 角標 | 有 | 關閉 |
| 回覆內容來源 | 插件自帶 prompt | 你綁定的 DSH 工作區 |
| 權限 | 插件的權限 | 工作區只讀(僅可查看) |
數據流概覽:
對方私聊你
↓ dws chat message list --open-dingtalk-id (以你身份讀)
過濾 / 去重 / 合併
↓ 投遞到綁定的 DSH 工作區(僅可查看)
生成回覆
↓ 出站護欄(禁代碼 / 禁路徑 / 禁內網地址)
dws chat message send --ai-tag=false --idempotency-key
↓
對方看到「你」發的普通消息
插件以當前 DSH 進程權限運行;安裝前請自行查看倉庫源碼與 MIT 許可證(package.json 中 license: MIT)。README 寫明需 macOS,並完成 dws auth login;package.json 聲明 DSH 兼容 >=0.2.1-rc.1 <0.3.0-0,Node ^22.19.0 || >=24.0.0。
核心功能¶
工作區綁定與聯繫人分組¶
設置頁「監聽分組」支持一個工作區掛多位聯繫人:每組一張卡,含工作區下拉與從釘釘通訊錄搜索選中的成員(姓名 / openDingTalkId 只讀)。每位聯繫人獨立會話,上下文不串。生成時默認 agent.readOnly: true,子進程注入 DSH_PERMISSION_MODE=read-only,只在工作區查資料、不改文件。
三檔運行模式與護欄¶
mode:draft只出草稿;confirm待人工確認;auto允許真實發送(還需聯繫人級autoReply與總開關enabled)。- 輪詢間隔、每小時回覆上限、兩條最小間隔、回覆字數上限、靜默時段等可在設置頁配置。
- 出站護欄(
guard.*)可禁代碼、路徑、內網地址等;默認回覆格式爲 Markdown,釘釘客戶端渲染加粗、列表、小標題。 - 可選
replyMarker(默認「(本條由助手代答)」)附在每條發出消息末尾;留空則不加。
模擬回答與待確認隊列¶
「模擬回答」粘貼對方可能發來的消息,走真實生成通道但不發送,便於預覽 1–3 分鐘量級的查資料型回答。「待確認草稿」可逐條發送或丟棄;「最近草稿 / 最近審計」用於回看爲何回覆或未回覆。
配圖與附件(可選)¶
模型可輸出結構化 [[render:table|...]] / bar / flow / steps 塊,由宿主側 Python + Pillow 渲染爲 PNG 再發(需 render.enabled)。附件通過 [[attach:相對路徑]] 引用工作區內允許類型的文件(默認關閉)。表格與代碼圍欄在釘釘 Markdown 中渲染不佳,提示詞側已約束模型避免輸出。
安裝與啓用¶
前置條件¶
- 已安裝
dws(dws --version有輸出)。 - 在本機終端完成個人 OAuth(勿在 Agent 沙箱執行,否則會因無法寫
~/.dws而EPERM):
dws auth login # 掃碼授權
dws auth status # 應返回 "authenticated": true
- 有一個可綁定的 DSH 工作區(側欄中的工作區,例如
my-workspace)。
安裝插件¶
官方 README 示例爲將本地克隆或下載的插件目錄加入 profile(路徑按你的實際目錄修改;日常桌面版 profile 名爲 desktop):
dsh plugin --profile desktop add ~/projects/dsh-dingtalk-self
然後重啓 DSH App 並刷新頁面,打開 設置 → 釘釘代答(側欄 order=45)。
裝好後建議檢查(README 原文):
python3 -c "import json;d=json.load(open('$HOME/.dsh/profiles/desktop/package.json'));print('deps:', 'dsh-dingtalk-self' in d['dependencies'], 'bundles:', 'dsh-dingtalk-self' in d['dsh']['profile']['bundles'])"
cat ~/.dsh/data/dsh-dingtalk-self/boot.log # 應有一行 version=0.2.0 ... schema=yes
若 dsh 不在 PATH,可使用 macOS 應用內全路徑:/Applications/DeepSeek\ Harness.app/Contents/Resources/runtime/cli/bin/dsh。
卸載示例:
dsh plugin --profile web remove dsh-dingtalk-self
配置當前多落在 ~/.dsh/data/dsh-dingtalk-self/config.json(設置頁「配置來源」會標明);宿主若提供可寫 settings.update,插件會優先走 DSH 原生 settings。
典型用法¶
最小啓用步驟¶
README 建議順序:
enabled=true(總開關,默認關)。- 在「監聽分組」增加聯繫人並選擇綁定的
workspaceId。 mode=draft,先只看草稿,確認內容與口吻後再改爲confirm或auto,並按需打開聯繫人級「允許真實發送」。
設置頁 HTTP 契約¶
客戶端通過插件註冊的同源端點與宿主通信(節選):
GET /dsh-dingtalk-self/api/state
POST /dsh-dingtalk-self/api/config { patch }
POST /dsh-dingtalk-self/api/cycle {} // 立即檢查一次
POST /dsh-dingtalk-self/api/test-reply { message } // 模擬回答,不發送
POST /dsh-dingtalk-self/api/contacts/search { query }
「運行狀態」區提供 dws 登錄態、急停、立即檢查一次、上次檢查結果與一鍵自檢(Node、狀態目錄、dws、個人身份登錄、工作區、聯繫人綁定六項)。
回覆格式示例¶
Markdown 模式下,agent 輸出經 lib/core/format.js 歸一化後由釘釘渲染。README 中同一接口問題的示例結構爲:先一句結論,再用 ### 小標題與 - 列表分塊(正文不含表格與代碼圍欄,以免釘釘渲染異常)。
適用場景與注意¶
適合:你已用 DSH 維護項目/知識工作區,同事常釘釘私聊問技術或流程問題,希望代答內容來自工作區只讀檢索,且對外顯示爲你本人消息而非機器人。
務必注意:
- 插件依賴 dws 個人身份讀私聊、發消息;權限邊界是你賬號能看到的私聊與 CLI 能力,不是企業管理員代管的機器人 scope。
- 默認
enabled=false、mode=draft;生產環境建議先草稿 / 確認,並設置limits.maxRepliesPerHour、quietHours與出站護欄。 agent.timeoutSeconds默認 240 秒;查資料型回答 README 說明通常需 1–2 分鐘,不宜調過小。- 重裝或改插件代碼後需重啓 DSH App 纔會重新裝配客戶端半邊(Host 側改代碼不會熱重載)。
- DeepSeek Harness 生態理念是「一切皆插件」;SkillHub 目錄頁 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。
結尾¶
dsh-dingtalk-self 把「釘釘私聊 → DSH 工作區只讀 agent → 本人賬號回覆」收成一條可配置的 DSH 工作流插件:分組綁定聯繫人、草稿/確認/自動三檔、模擬回答與審計,並可選 Markdown 排版與宿主側表格/流程圖渲染。進一步瞭解與 issue 請見 GitHub 倉庫 與 SkillHub 插件頁。