用 dsh-qqbot 把 DeepSeek Harness 接到 QQ 私聊和群聊

前言

DeepSeek Harness(命令是 dsh)把自己的架构概括成一句话:一切皆插件。模型、工具、会话、沙箱,甚至 Agent 循环本身,都可以替换。官方仓库目前仍处于 developer preview,兼容性破坏变更是预期内的事。开箱后常见入口是 Web UI 和 headless 一次性任务;如果你希望同一套 Agent 出现在 QQ 里——私聊能接着聊、群里被 @ 才开口——就需要一条 IM 通道,而不是改 Agent 循环。

dsh-qqbot 做的就是这件事。仓库由 tencent-connect 维护,定位是把 QQ 消息平台当成 dsh Agent 的前端协议驱动:QQ 进来的消息进入 ctx.agents,模型回复再以 Markdown 发回 QQ。社区插件目录把它归在「工具与能力」,收录日期是 2026-08-15。需要说明:这个目录是独立站点,和 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。仓库自己写的「官方插件」,指的是腾讯 QQ Bot 侧接入 dsh 的插件,不是目录站点的官方背书。

本文按插件目录页、GitHub 仓库 README、package.json 以及 DeepSeek Harness 官方仓库核对后整理:它是什么、装到哪个 profile、扫码之后怎么聊。

这是什么

dsh-qqbot 的 npm 包名是 @tencent-connect/dsh-qqbot,当前 package.json 版本为 0.4.0,主要语言是 TypeScript,许可证 MIT(Copyright 2026 Tencent Connect)。GitHub 仓库 tencent-connect/dsh-qqbot 创建于 2026-08-14;写作时(2026-08-17)GitHub API 显示 53 星,社区目录页当时展示为 26 星,星标以 GitHub 一手数据为准。

它解决的问题很具体:让已经初始化好的 dsh 环境,通过 QQ Bot 收发消息。README 里的数据流可以看成:

QQ 用户 → QQ WebSocket → dsh-im-qqbot → ctx.agents → dsh agent loop → LLM
                                 ↑                           │
                                 └── session/event ──────────┘
                                       (assistant reply → QQ sendMarkdown)

也就是说,QQ 不是另写一套机器人逻辑,而是给现有 dsh Agent 加一条 IM 前端。插件声明自己是纯 Cordis 插件,遵循 dsh 的 “Plugins, not loop changes”:依赖写成 inject = ['agents'],不直接耦合其他插件。

核心功能

私聊、群聊各走独立会话

每个 QQ 私聊用户、每个群各对应一个独立 Agent。会话键是 qqbot:${appId}:${scope}:${peerId},SessionId 由 SHA-256 确定性派生,进程重启后可以按同一套规则恢复。解析顺序是:进程内复用 → 持久化恢复 → 全新创建。闲置超时默认 30 分钟(sessionIdleTimeout,1800000 ms),超时后自动 dispose Agent,避免会话一直占着内存。

群聊默认要 @ 才回复

requireMention 默认是 true:群里没有 @ 机器人,插件不会把普通闲聊送进 Agent。私聊和群聊还可以分别加 directPromptgroupPrompt,用来补一段额外的 system prompt。源码里的配置 Schema 还提供了访问控制:私聊 / 群聊可设为 openallowlistdisabled,并支持 openid 白名单。README 配置表没有列出这一项,需要精细权限时以仓库源码为准。

回复走 Markdown,并按 QQ 长度切开

出站不是纯文本直出,而是 sendMarkdown。单条消息默认最多 4500 字符(textChunkLimit),源码注释写明 QQ 限制大约 5000 字符。切分会感知代码块和表格,避免把 Markdown 结构从中间截断。

聊天里可以管会话和模型

README 列出的斜杠命令如下:

命令 说明
/bot-reset 重置当前会话(清除上下文)
/bot-model 查看或切换模型
/bot-status 查看当前会话状态
/bot-help 查看所有指令

源码里还可以看到 /bot-new(新开会话)、/bot-clear(与 reset 同类)、/bot-ping/bot-version 等注册项;对外说明以 README 这四条为准。默认 LLM 提供商是 deepseek-official,默认模型是 deepseek-chat,也可以改 providermodel,或通过 preset 挂上 agent-presets 里的预设(工具集、prompt 等)。

安装与启用

开始前,先按 DeepSeek Harness 官方指引完成 dsh 初始化和模型配置。官方仓库当前的开发者预览启动方式是:

npx @deepseek-ai/dsh web

社区目录页给出的安装命令是:

dsh plugin add github:tencent-connect/dsh-qqbot

如需可复现安装,目录页建议固定 commit 哈希:

dsh plugin add github:tencent-connect/dsh-qqbot#<commit>

<commit> 换成仓库里实际的提交哈希。插件以当前 dsh 进程的权限运行,安装时可能执行代码;装之前应检查源代码仓库和许可证。

仓库 README 推荐的日常用法是单独建一个 qqbot profile,并安装 npm 包(当前版本 0.4.0)。README 提示:建议升级到 0.4.0 以上再扫码,支持点击链接在浏览器打开,避免部分终端二维码渲染错位。

# 安装到 profile
npx @deepseek-ai/dsh plugin --profile qqbot add @tencent-connect/dsh-qqbot

# 启动
npx @deepseek-ai/dsh --profile qqbot

首次启动时,如果凭据还没配,插件会进入扫码引导:终端输出二维码 → 手机 QQ 扫码绑定 → 凭据写入该 profile。之后再启动不必重复扫码。

本地改源码、或不走扫码、直接用环境变量时,README 给的是路径安装:

cd /path/to/dsh-qqbot
pnpm install && pnpm build

npx @deepseek-ai/dsh plugin --profile qqbot add /path/to/dsh-qqbot

export QQBOT_APPID="你的AppID" QQBOT_SECRET="你的AppSecret"
npx @deepseek-ai/dsh --profile qqbot

开发调试还可以用 --patch

export QQBOT_APPID="你的AppID" QQBOT_SECRET="你的AppSecret"
npx @deepseek-ai/dsh web --patch /path/to/dsh-qqbot/cordis.dev.yml

appIdappSecret 是必填项,也可以只走环境变量 QQBOT_APPIDQQBOT_SECRET。不要把密钥写进公开仓库。

从 GitHub 源码安装时,dsh 官方文档还提醒过:git 依赖拉取的是源码而不是构建产物,pnpm ≥10 可能要求在 profile 的 pnpm-workspace.yaml 里为该包打开 allowBuilds 后再执行一次 add。若第一次 add 失败,按终端提示处理,不要跳过授权检查。

典型用法

绑定完成后,直接在 QQ 里给机器人发消息即可。下面几步都可以按仓库说明复现。

1. 私聊里跑通一轮对话

启动 qqbot profile 并完成扫码后,向机器人发一句普通问题。消息会经 WebSocket 进入插件,再调用 agent.followup()。回复以 Markdown 发回;超过 textChunkLimit 会被切开。默认模型是 deepseek-chat

2. 群里只在被 @ 时说话

把机器人拉进群后,默认不会对每条群消息作答。需要 @ 机器人,或把 requireMention 改成 false(群很吵时不建议关)。群聊还可以单独写 groupPrompt,例如限制语气、禁止代发敏感操作。

3. 用斜杠命令管理当前会话

在对应私聊或群里发送:

/bot-help
/bot-status
/bot-model
/bot-reset

/bot-help 列出指令;/bot-status 看当前会话;/bot-model 查看或切换模型;聊偏了用 /bot-reset 清上下文。这些命令作用在当前 peer 的会话上,不会把其他用户或群的记忆清掉。

4. 按 README 改常用配置

README 配置表里和日常使用最相关的几项:

配置 默认值 说明
appId 必填 QQ Bot AppID,或环境变量 QQBOT_APPID
appSecret 必填 QQ Bot AppSecret,或环境变量 QQBOT_SECRET
provider deepseek-official LLM 提供商名称
model deepseek-chat 模型名称
preset - Agent preset id
cwd process.cwd() Agent 工作目录
requireMention true 群聊是否需要 @bot 才触发
textChunkLimit 4500 单条消息最大字符数
sessionIdleTimeout 1800000 会话闲置超时(毫秒)
debug false 调试模式

cwd 决定 Agent 在磁盘上的工作目录。dsh 的工具默认跟当前进程权限走,把机器人接到 QQ 之后,等于把这套权限暴露给能发消息的人,白名单和 requireMention 值得先想清楚。

适用场景与注意事项

适合已经在用 dsh、希望把同一套 Agent 接到 QQ 的人:个人助手放在私聊、小团队在群里 @ 机器人查代码或跑任务、自己写 preset 后再从 QQ 触发。不适合把它理解成「装完就能代替官方 QQ 客服后台」——它是 IM 通道插件,模型、工具、沙箱仍然来自你当前的 dsh profile。

使用前注意这几件事:

  1. 权限与源码。 插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前阅读 tencent-connect/dsh-qqbot 源码和 MIT 许可证;生产环境用目录页那种 github:owner/repo#commit 固定提交。
  2. 凭据。 AppID / AppSecret 或扫码写入的凭据等同于机器人身份,不要提交到 git,也不要在多人共享的机器上用未加访问控制的开放模式。
  3. 预览版兼容性。 DeepSeek Harness 官方 README 写明当前是 developer preview,会有破坏性变更。插件的 peer 依赖指向 @deepseek-ai/cordis >=4.0.1 以及 @deepseek-ai/dsh-agent / dsh-llm / dsh-session>=0.1.0-rc.6。dsh 升级后若加载失败,先对一下这几项版本。
  4. 群聊打扰。 默认 @ 门控是为了少插话。关掉 requireMention 前,先确认群规模和访问控制。
  5. 目录与仓库不是同一件事。 安装命令以目录页原文为准;具体扫码流程、配置项和命令以 GitHub README 为准。两者冲突时,配置与用法以仓库一手文档更接近实现。

小结

dsh-qqbot 把 QQ 变成 dsh Agent 的一条前端:私聊和群聊隔离会话,重启可按同一 sessionKey 恢复,群默认要 @ 才响应,回复按 Markdown 切分发送。目录页安装命令是 dsh plugin add github:tencent-connect/dsh-qqbot;实际跑起来,仓库更完整的路径是装进 qqbot profile,启动后扫码绑定。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-qqbot/

GitHub:https://github.com/tencent-connect/dsh-qqbot

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

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

小夜