将 QQ 私聊和群聊接入 DeepSeek Harness Desktop,支持按会话切换人格、交互式提问和可选图片理解。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:yjrqz777/dsh-qqbot-lite
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
基于 deepseek-harness (dsh) 的 QQ Bot 插件,把 dsh agent 接入 QQ 私聊与群聊。
本项目基于腾讯连接(Tencent Connect)开源的
@tencent-connect/dsh-qqbotv0.5.0 二次开发。
当前仅测试 dsh Desktop 桌面端模式;其他运行模式尚未测试。
架构
QQ 用户 -> QQ WebSocket -> dsh-qqbot -> ctx.agents -> dsh agent loop -> LLM
^ |
+-- session/event ---------+
(assistant reply -> QQ sendMarkdown)
界面截图
安装(Desktop 桌面端)
本项目目前仅在 dsh Desktop 桌面端模式下测试;命令行、
--patch等其他运行模式尚未测试。
准备环境
安装 Git、Node.js 18 或更高版本、pnpm,以及 dsh Desktop。
1. 克隆项目
git clone https://github.com/yjrqz777/dsh-qqbot-lite.git
cd dsh-qqbot-lite
2. 安装依赖
pnpm install
如果遇到 ERR_PNPM_TARBALL_URL_MISMATCH 锁文件校验错误,可按 pnpm 提示重建锁文件后重装:
pnpm clean --lockfile
pnpm install
3. 构建插件
pnpm build
构建完成后,项目根目录会生成 dist 目录。
4. 在 Desktop 中安装
- 打开 dsh Desktop,进入 插件 页面。
- 输入刚才克隆的项目根目录路径(该目录中应有
package.json)。 - 点击 安装。
例如:D:\code\dsh-qqbot-lite。
5. 设置 QQ Bot 凭据
安装后进入 设置 → QQ Bot,填写 AppID 和 AppSecret,点击保存并连接。也可以点击“获取凭据”前往 QQ 机器人官网。
Desktop 模式下无需设置 QQBOT_APPID 和 QQBOT_SECRET 环境变量;未填写凭据时,Desktop 和 dsh 本体仍可启动,只是 QQ Bot 保持未连接。
配置项
| 配置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
appId |
string | 必填 | QQ Bot AppID(或 QQBOT_APPID 环境变量) |
appSecret |
string | 必填 | QQ Bot AppSecret(或 QQBOT_SECRET 环境变量) |
provider |
string | deepseek-official |
LLM 提供商名称 |
model |
string | deepseek-chat |
模型名称 |
preset |
string | - | Agent preset id |
cwd |
string | process.cwd() |
Agent 工作目录 |
requireMention |
boolean | true |
群聊是否需要 @bot 才触发 |
groupPrompt |
string | - | 群聊额外 system prompt |
directPrompt |
string | - | 私聊额外 system prompt |
personaPrompt |
string | 土豆小猫 | QQ 会话默认人格;可在设置页编辑,单个群/私聊可用 /persona 覆盖 |
personaPresets |
object[] | 内置「苏晴」「土豆小猫」 | 设置页保存的人格预设;自定义时可以选空白的「自定义」项 |
textChunkLimit |
number | 4500 |
单条消息最大字符数 |
streaming |
boolean | true |
是否启用流式输出(群聊始终不启用) |
sessionIdleTimeout |
number | 1800000 |
会话闲置超时 (ms) |
processingTimeoutMs |
number | 1800000 |
处理超时 (ms),超时中断当前 LLM 调用 |
maxQueue |
number | 20 |
并发队列最大长度 |
historyLimit |
number | 10 |
群历史缓冲条数 |
askTimeoutMs |
number | 300000 |
待答问题超时 (ms) |
showToolResults |
boolean | false |
是否展示工具调用成功结果(错误始终展示) |
debug |
boolean | false |
调试模式 |
access(访问控制)
| 配置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
access.c2cMode |
open / allowlist / disabled |
open |
私聊访问模式 |
access.c2cAllow |
string[] | [] |
私聊白名单(user openid) |
access.groupMode |
open / allowlist / disabled |
open |
群聊访问模式 |
access.groupAllow |
string[] | [] |
群聊白名单(group openid) |
media / vision(富媒体与视觉理解)
| 配置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
media.enabled |
boolean | true |
启用 QQ 附件下载(图片/视频/文件) |
media.maxMB |
number | 200 |
下载大小上限 (MB) |
media.ttlHours |
number | 24 |
媒体存活时长 (小时),0 = 永不过期 |
vision.enabled |
boolean | false |
启用视觉理解;私聊和群聊图片会作为图像内容传入 DSH 对话,并注册 qqbot_describe_image 工具 |
vision.provider |
string | - | 视觉模型 provider |
vision.model |
string | - | 视觉模型 id |
vision.maxBytes |
number | 10MB |
图片字节上限 |
vision.maxTokens |
number | 1024 |
输出 token 上限 |
vision.timeoutMs |
number | 120000 |
视觉调用超时 (ms) |
开启 media.enabled 和 vision.enabled 后,QQ 私聊与群聊中的图片会直接作为图像内容发送给 DSH 会话,不再只提供本地文件路径。插件优先使用已下载的本地图片;本地文件不可用时,会尝试通过 QQ 附件 URL 获取图片,因此网络异常可能导致图片暂时无法显示或识别。会话使用的模型需要支持图片输入。vision.provider 和 vision.model 是 qqbot_describe_image 工具所用的视觉模型配置。
sendFile(附件发送)
| 配置 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sendFile.restrictPaths |
boolean | true |
路径白名单(仅 media + cwd + extraRoots) |
sendFile.extraRoots |
string[] | [] |
额外允许访问的根目录 |
QQ Bot 全部设置(包括 AppID、AppSecret、模型、权限、人格提示词和预设)保存在当前 profile 目录的 dsh-qqbot-settings.json。首次启动时会从现有 Cordis profile 配置读取默认值并初始化该文件;此后设置页以该文件为准。
命令菜单
/help 会显示可点击的命令;点击 /persona 会打开人格子菜单,可继续选择 list、new、快速切换预设或恢复默认。 设置页的人格配置也会列出机器人已收到过消息的群和好友,可为每个会话单独选择预设。
交互式提问(按钮)
QQ 会话支持通过可点击按钮收集单选答案,也可以回复编号或文字。模型可根据你的自然语言请求发起提问,不需要提内部工具名。例如:“午饭想吃什么?给我几个可点击的选项。”
交互提问工具接受一个问题和 2~8 个选项。用户点击按钮或发送文字后,答案会返回给模型继续处理。若 QQ 拒绝按钮消息,插件会退回文字选项,并在消息中附上接口错误原因。
| 命令 | 说明 |
|---|---|
/new(别名 /reset /clear) |
开始新会话(清空上下文) |
/compact |
压缩会话历史 |
/model |
查看或切换模型 |
/preset |
查看或切换 agent preset(新会话生效) |
/persona list |
查看人格预设及当前对话使用的人格 |
/persona new |
分两条消息新建人格:先发名称,再发提示词;自动应用到当前对话 |
/persona set <名称> |
切换当前群或私聊的人格,下一轮重新注入提示词 |
/persona reset |
当前对话恢复默认土豆小猫人格 |
/persona cancel |
取消尚未完成的人格创建 |
/stop |
中止当前生成 |
/bot-ping |
网络延迟检测 |
/bot-version |
查看版本信息 |
/bot-status |
查看当前会话状态 |
/help |
查看所有指令 |
/persona new 后按机器人提示发送人格名称和提示词。群聊需要按群聊的 @ 触发设置发送。人格切换只影响当前群或私聊;新提示词会在该对话的下一轮重新注入。
目录结构
src/
├── index.ts # Cordis 插件入口(async apply)
├── config.ts # 配置 Schema
├── setup.ts # 凭据绑定(扫码)
├── gateway/ # 网关装配(bootstrap / middleware-setup)
├── transport/ # 传输层:inbound / outbound / 流式 / 切分 / 限流 / 工具展示
├── session/ # 会话层:session-manager / idle-evictor
├── model/ # 模型路由层:model-resolver / prefs-store / settings-reader
├── features/ # 问答与审批通道(question / approval)
├── media/ # vision-tool / send-file-tool / media-cleaner
├── middleware/ # question-answer / attachment
├── commands/ # 斜杠命令
└── shared/ # utils / scope / send-helper
会话路由
sessionKey 为 qqbot:${appId}:${scope}:${peerId},由 SHA-256 确定性派生 SessionId,重启后可恢复;解析顺序为进程内复用、持久化恢复、全新创建。
本地开发
pnpm install
pnpm build
pnpm test
开源协议与第三方内容
本项目的软件代码采用 MIT 许可证,详见 LICENSE。本项目基于腾讯连接的 dsh-qqbot v0.5.0 二次开发,并保留上游 MIT 版权声明。
苏晴人格预设不属于本项目代码的 MIT 授权范围。 作者为 yjrqz777。使用、复制或转载该预设时,请保留“作者:yjrqz777”的署名并链接到其 GitHub 主页,同时遵守原作者公布的其他许可要求。
链接
同类插件
xmanrui/dsh-im★ 2061
通过二维码或机器人凭据将 IM 机器人接入 DeepSeek Harness(支持飞书、微信、钉钉、企业微信、QQ、Slack、Telegram、Discord 和 WhatsApp 共 9 种渠道)。
shaobeichen/dsh-pocket★ 1793
手机远程访问 DSH Web 界面:扫码即用局域网或公网(cloudflared 隧道)访问,实时同屏、移动端适配布局,带设置页管理。
inclusionAI/Avernet#deepseek-harness-channel-bcn★ 642
通过 WebSocket V2 将 DeepSeek Harness 接入 Avernet Bot 协作网络,支持自动注册、Agent 会话隔离、工具调用事件和多 Bot 路由工具。
Oscar-Williams/dsh-deepcanary★ 90
面向 DeepSeek Harness 的证据优先注意力监督,提供 C0–C3 策略、去重 Inbox 提醒、静默时段和脱敏结果记录。
omdsh-dev/dsh-notification★ 88
回合完成桌面通知,按结果分控 + 关键词过滤。
MichengAI/dsh-im-connect★ 61
把微信、企业微信、钉钉、飞书、Lark、QQ、Telegram 接到本机 DeepSeek Harness,每个 IM 聊天对应一条独立工作区频道。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。