前言¶
在 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 插件页。