dsh-weixin:微信 iLink/ClawBot 私聊接入 DSH agent

前言

DSH 的理念是把能力做成插件。社区目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,不能当作官方应用商店理解。

对智能体开发者来说,一个具体需求是:让本地 DSH agent 接到微信私聊里,接收用户消息,输出按微信气泡切分的回复,并处理多用户会话、长期记忆、定时提示、登录续签和异常重连。下面介绍 dsh-weixin 插件。它把微信 iLink/ClawBot 私聊接入 DSH agent,支持插件模式与独立模式。

这是什么

dsh-weixin 是 DSH 的微信通道插件。仓库地址为 Stu-KatoMegumi/dsh-weixin,README 中注明开发人员为 STU-XIEpackage.jsonname@deepseek-ai/dsh-weixin

它要求 node >=22,并声明依赖:

  • @deepseek-ai/schemastery ^3.18.1
  • qrcode ^1.5.4

资料列出 LICENSE 文件,但未明确许可证类型。

核心定位是:让微信私聊消息进入 DSH agent,并把模型回复、长期记忆、定时任务、白名单、文件收发和登录续签管理回微信会话中。

核心功能

两种连接方式

  • 插件模式直接使用 DSH apiProxy
  • 独立模式通过 DSH Web HTTP RPC + WebSocket 事件流连接。

两种模式都面向微信 iLink/ClawBot 私聊场景,区别主要在运行方式和日志排查方式。

消息与回复

  • 用户每条新消息可打断上一轮仍在生成的回复,最新输入优先处理。
  • 支持微信“正在输入”状态,任务结束自动关闭。
  • 用户到 DSH 会话映射、按会话分隔的对话历史、错误日志和单实例锁持久化。

流式气泡

微信回复按模型分段:

  • 单独一行的 --- 作为新气泡。
  • 一轮最多 10 条。
  • 当前气泡累计超过 streamFlushChars(默认 800 字符)时强制切分。
  • 空闲超过 streamFlushMs(默认 30000 毫秒)时强制发出。
  • WX_BOT_SEND_INTERVAL_MS 默认 200 毫秒,用于控制两次微信消息发送的最小间隔;设置 0 可关闭节流。

Prompt 与长期记忆

支持 Prompt 定制:

  • system-prompt
  • soul
  • rules

这三个是静态文件。长期记忆由 LLM 自动维护,并可通过网页编辑。

长期记忆的限制如下:

  • 单轮最多处理 5 个操作
  • 单条记忆最多 500 字符
  • 文件上限 60 KiB
  • 最多 200 条自动记忆

媒体与访问控制

支持:

  • 图片、语音、视频、文件接收
  • 文件发送
  • 私聊访问策略
  • 白名单
  • 发送目录边界
  • 50 MB 媒体上限

接收图片、语音、视频、文件时使用 AES-128-ECB 解密。

连接与续签

具备:

  • 长轮询看门狗
  • 指数退避重连
  • 连接状态记录

登录约 24 小时到期前,插件会在本地生成续签二维码图片,并提醒全部已知用户;旧 token 在扫码前继续工作。

DSH 设置页支持:

  • 状态
  • 扫码
  • 权限
  • 流式参数
  • 定时任务热更新

同时支持五段 cron 定时提示任务。

安装与启用

先安装插件模式。进入 dsh-weixin 项目目录后执行:

npm install
npm run install:dsh

如果希望指定 DSH 根目录或 profile,可以先设置可选环境变量:

$env:DSH_ROOT = 'D:\Program Files\dsh'
$env:DSH_PROFILE = 'web'
npm install
npm run install:dsh

安装脚本会调用 DSH 官方 plugin add 逻辑。这里不建议手动拼接 dsh plugin add github:owner/repo 命令,直接使用项目提供的安装脚本。

经过上面的步骤后,启动 DSH:

pnpm dsh --profile web --dump-config
pnpm dsh --profile web

登录凭据、会话映射和设置默认持久保存在:

$DSH_HOME/channels/dsh-weixin

更新或卸载插件不会删除该目录。

卸载插件:

npm run uninstall:dsh

卸载会从指定 DSH profile 移除 bundle,并清理安装脚本创建的稳定缓存;不删除会话数据。

典型用法

微信命令

在微信私聊中可使用这些命令:

  • /help/?:查看命令
  • /new:创建并切换到新 DSH 会话
  • /stop:取消当前任务
  • /status:查看连接和会话状态
  • /renew:立即获取续签二维码图片
  • /send <相对路径>:发送 outboxDir 内的文件
  • /users:查看用户
  • /allow add|remove <ID>:管理白名单
  • /cron:查看定时任务

流式输出

模型回复按气泡契约切分:

  • 单独一行的 --- 作为新气泡。
  • 一轮最多 10 条。
  • 当前气泡累计超过 streamFlushChars(默认 800 字符)时强制切分。
  • 模型空闲超过 streamFlushMs(默认 30000 毫秒)时强制发出当前气泡。

WX_BOT_SEND_INTERVAL_MS 默认 200 毫秒,用于降低连续发送频率;设置为 0 可关闭节流。

微信续签

收到续签二维码后,按下面步骤操作:

1、在电脑或另一台设备上展示二维码图片。

2、打开手机微信,进入“扫一扫”。

3、用摄像头扫描该图片,并完成授权。

注意:微信聊天内长按识别不能完成该续签流程。

定时任务

在 DSH 设置页填写 JSON 数组。示例:

[
  {
    "id": "morning-summary",
    "cron": "0 9 * * 1-5",
    "userId": "微信用户ID",
    "prompt": "总结今天的待办事项",
    "enabled": true
  }
]

cron 按运行 DSH 的本地时区解析,五个字段依次是:

分 时 日 月 星期

示例 0 9 * * 1-5 表示周一至周五 09:00 触发。

独立模式

如果需要在 DSH 外部单独运行微信连接,可使用独立模式:

npm start

独立模式默认连接:

http://127.0.0.1:3080

独立模式启动微信连接前会调用只读 DSH API 检查服务。如果 DSH 未启动、地址错误或端口上不是 DSH,程序会提示先运行:

pnpm dsh web

并以退出码 1 结束,不会启动扫码和微信轮询。检测超时默认 3000 毫秒,可用 DSH_STARTUP_CHECK_TIMEOUT_MS 调整。

独立模式下,模型策略固定为:

deepseek-official/deepseek-v4-flash

策略如下:

  • 普通消息使用 off
  • 复杂消息使用 max
  • 复杂消息为消息长度超过 40 个字符,或包含操作类关键词

旧的持久化模型设置会在运行时归一化。若 DSH 未确认目标模型组合,本轮会停止,不会沿用会话中的旧模型。

适用场景与注意

适合以下场景:

  • 把 DSH agent 接到微信私聊中使用
  • 需要微信消息的流式气泡输出
  • 需要多用户会话、白名单和访问策略
  • 需要图片、语音、视频、文件接收与文件发送
  • 需要长期记忆、定时提示和登录续签
  • 需要排查完整日志时改用独立模式

注意事项:

  • 插件模式不输出日志;需要完整日志排查时请改用独立模式 npm start
  • 插件模式以当前 dsh 进程权限运行,会访问本机 DSH 配置、频道数据与微信通道数据;安装前应检查源码、依赖与许可证。
  • 资料列出 LICENSE 文件,但未明确许可证类型。
  • 私聊访问策略、白名单、发送目录边界和 50 MB 媒体上限会限制收发行为。
  • 登录凭据、会话映射和设置默认持久保存在 $DSH_HOME/channels/dsh-weixin,更新或卸载插件不会删除它。
  • 模型策略固定为 deepseek-official/deepseek-v4-flash;若 DSH 未确认目标模型组合,本轮会停止,不会沿用会话中的旧模型。

参考

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜