把 QQ 群聊私聊接入助手,支持记忆与权限管理
30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Coffeiz/dsh-qqchat该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 14 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 44 处,展示前 43 条)
- 写入本地文件lib/index.js:19
mkdirSync(config.dataDir, { recursive: true, mode: 0o700 }); - 写入本地文件lib/storage/db.js:74
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }); - 写入本地文件lib/storage/db.js:78
chmodSync(path, 0o600); - 读取本地文件lib/storage/memory.js:590
return readFileSync(new URL(`../../prompts/${filename}`, import.meta.url), 'utf8').trim(); - 读取本地文件lib/media/store.js:29
await access(existingById.localPath); - 读取本地文件lib/media/store.js:40
await access(reusable.localPath); - 写入本地文件lib/media/store.js:53
await mkdir(this.root, { recursive: true, mode: 0o700 }); - 写入本地文件lib/media/store.js:55
await writeFile(path, downloaded.data, { mode: 0o600 }); - 删除本地文件lib/media/store.js:80
await rm(path, { force: true }); - 写入本地文件lib/media/store.js:87
await mkdir(this.root, { recursive: true, mode: 0o700 }); - 发起网络请求lib/media/store.js:99
const response = await fetch(url, { redirect: 'manual', signal: AbortSignal.timeout(20_000) }); - 发起网络请求lib/gateway/api.js:20
const response = await fetch(TOKEN_URL, { - 发起网络请求lib/gateway/api.js:35
const response = await fetch(`${base}/gateway`, { - 发起网络请求lib/gateway/api.js:65
const response = await fetch(`${base}${path}`, { - 发起网络请求lib/gateway/api.js:74
return this.request(account, method, path, body, false); - 发起网络请求lib/gateway/api.js:94
return await this.request(account, 'POST', path, makeBody(useMarkdown)); - 发起网络请求lib/gateway/api.js:98
return this.request(account, 'POST', path, makeBody(false)); - 发起网络请求lib/gateway/auth.js:17
const response = await fetch(CREATE_URL, { - 发起网络请求lib/gateway/auth.js:40
const response = await fetch(POLL_URL, { - 读取本地文件lib/session/runtime.js:153
const bytes = await readFile(attachment.localPath); - 读取本地文件lib/media/media-tools.js:23
return await readFile(attachment.localPath, { encoding: 'utf8', signal: exec.signal }); - 读取本地文件lib/media/media-tools.js:49
info.fileSize = Number((await stat(attachment.localPath)).size); - 发起网络请求src/gateway/api.ts:62
const response = await fetch(TOKEN_URL, { - 发起网络请求src/gateway/api.ts:77
const response = await fetch(`${base}/gateway`, { - 发起网络请求src/gateway/api.ts:115
const response = await fetch(`${base}${path}`, { - 发起网络请求src/gateway/api.ts:150
return await this.request(account, 'POST', path, makeBody(useMarkdown)) - 发起网络请求src/gateway/api.ts:153
return this.request(account, 'POST', path, makeBody(false)) - 发起网络请求src/gateway/auth.ts:43
const response = await fetch(CREATE_URL, { - 发起网络请求src/gateway/auth.ts:63
const response = await fetch(POLL_URL, { - 写入本地文件src/index.ts:27
mkdirSync(config.dataDir, { recursive: true, mode: 0o700 }) - 读取本地文件src/media/media-tools.ts:28
return await readFile(attachment.localPath, { encoding: 'utf8', signal: exec.signal }) - 读取本地文件src/media/media-tools.ts:52
try { info.fileSize = Number((await stat(attachment.localPath)).size) } catch {} - 读取本地文件src/media/store.ts:30
await access(existingById.localPath) - 读取本地文件src/media/store.ts:40
await access(reusable.localPath) - 写入本地文件src/media/store.ts:51
await mkdir(this.root, { recursive: true, mode: 0o700 }) - 写入本地文件src/media/store.ts:53
await writeFile(path, downloaded.data, { mode: 0o600 }) - 删除本地文件src/media/store.ts:78
await rm(path, { force: true }) - 写入本地文件src/media/store.ts:84
await mkdir(this.root, { recursive: true, mode: 0o700 }) - 发起网络请求src/media/store.ts:95
const response = await fetch(url, { redirect: 'manual', signal: AbortSignal.timeout(20_000) }) - 读取本地文件src/session/runtime.ts:140
const bytes = await readFile(attachment.localPath) - 写入本地文件src/storage/db.ts:100
mkdirSync(dirname(path), { recursive: true, mode: 0o700 }) - 写入本地文件src/storage/db.ts:103
try { chmodSync(path, 0o600) } catch {} - 读取本地文件src/storage/memory.ts:601
return readFileSync(new URL(`../../prompts/${filename}`, import.meta.url), 'utf8').trim()
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-attachment@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-commands@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-modules@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
不只是将QQ接入DeepSeek Harness,除了私聊/群聊,还支持会话管理,私聊/群聊/群友记忆,媒体处理和权限管理。
README
由 DeepSeek 最新模型翻译生成dsh-qqchat
让 QQ 群聊与私聊接入 DeepSeek Harness
English ·开发文档 ·架构说明
dsh-qqchat 是 DeepSeek Harness(DSH)的 QQ Bot 插件,支持 QQ 群聊、私聊、会话隔离、记忆系统和 DSH 原生命令。
当前版本基于 DSH 0.2.1-rc.2 验证,安装插件即可使用,无需修改或重新构建 DSH。
本项目是一个 Vibe Coding 项目,代码质量和工程完整性可能需要改进。如果你发现问题或有更好的实现建议,欢迎提交 Issue 或 Pull Request。
主要功能
| 功能 | 说明 | 备注 |
| QQ 群聊与私聊 | 接收 QQ Bot 的群聊和私聊消息 | 每个群、每个私聊对象对应独立 DSH 会话 |
| 扫码连接 | 在 设置 → QQ Chat 中扫码绑定 QQ Bot | 支持取消连接后重新绑定 |
| 手动连接 | 在设置页填写 AppID 和 AppSecret 连接 QQ Bot | 适合无手机、服务器或扫码失败场景;密钥只提交到 Host |
| 断线重连 | QQ Gateway 断线后自动恢复连接 | 无需重复扫码 |
| 群聊回复模式 | 自动回应、@回复、静默记录 | 可在设置页随时切换 |
展开完整文档(README 剩余 1 节)
dsh-qqchat 让 QQ 群聊与私聊接入 DeepSeek Harness English ·开发文档 ·架构说明 dsh-qqchat 是 DeepSeek Harness(DSH)的 QQ Bot 插件,支持 QQ 群聊、私聊、会话隔离、记忆系统和 DSH 原生命令。 当前版本基于 DSH 0.2.1-rc.2 验证,安装插件即可使用,无需修改或重新构建 DSH。 本项目是一个 Vibe Coding 项目,代码质量和工程完整性可能需要改进。如果你发现问题或有更好的实现建议,欢迎提交 Issue 或 Pull Request。 主要功能 | 功能 | 说明 | 备注 | | QQ 群聊与私聊 | 接收 QQ Bot 的群聊和私聊消息 | 每个群、每个私聊对象对应独立 DSH 会话 | | 扫码连接 | 在 设置 → QQ Chat 中扫码绑定 QQ Bot | 支持取消连接后重新绑定 | | 手动连接 | 在设置页填写 AppID 和 AppSecret 连接 QQ Bot | 适合无手机、服务器或扫码失败场景;密钥只提交到 Host | | 断线重连 | QQ Gateway 断线后自动恢复连接 | 无需重复扫码 | | 群聊回复模式 | 自动回应、@回复、静默记录 | 可在设置页随时切换 | | 消息格式 | Markdown、纯文本兼容 | 群聊与私聊可分别设置;群聊默认纯文本兼容 | | 私聊流式回复 | Markdown 格式自动使用 QQ 官方流式接口 | 纯文本兼容格式使用普通发送;部分客户端可能不可见 | | 消息引用与 @ | 支持引用消息和 QQ @消息 | @用户优先显示用户名 | | 会话隔离 | QQ 群聊和私聊分别使用独立会话 | 不同群、不同用户的上下文互相隔离 | | 记忆系统 | 保存群聊、群成员和私聊用户的独立记忆;同一 Bot 下的用户记忆支持跨群复用 | 群关系和群级事件不会跨群共享;设置中可关闭 | | 记忆整理 | 自动将近期记录整理为长期记忆 | 后台执行,不阻塞正常回复 | | 媒体与文件权限 | 分别控制群成员媒体接收、媒体读取和普通工具使用 | Owner 与私聊默认不受限制 | | 权限管理 | 单独控制群成员是否可以使用普通 Agent 工具、读取媒体和接收文件 | 可指定 Owner,按稳定用户 ID 判断 | | DSH / QQChat 命令 | QQ 中直接执行 /compact、/goal、/plan、/qqmodel、/qqstatus 等命令 | 命令不经过模型;发送 /qqhelp 查看完整列表 | | DSH 原生界面 | 使用 DSH 默认会话、聊天区和输入框 | 支持从 DSH 主动向 QQ 发送消息 | | Session Preset | 每个 QQ Session 可使用 DSH 原生 preset | 新 Session 使用插件默认 preset;Session 自己选择后独立保存 | | 日志查看 | 在设置页查看 QQ Chat 运行日志 | 方便排查连接和消息问题 | 如何使用 扫码连接在 DSH Web 的 设置 → QQ Chat 中生成二维码,使用手机 QQ 扫描即可完成官方 Bot 授权。连接状态、重新生成二维码和取消绑定都可以在同一页面完成。 设置与权限在设置页面配置群聊接收方式、消息格式、记忆系统、媒体与文件权限、工具权限以及 Owner。 群聊与私聊 QQ 群聊和私聊都会接入 DSH Agent,并在 DSH Web 中以独立 Session 展示。群聊支持自动回应、@回复和静默记录,也支持引用消息、用户名显示和 @用户转换。 记忆系统插件会分别维护群聊、群成员和私聊用户的记忆。同一 Bot 下,基于稳定用户 ID 的用户记忆可以跨群复用;群内关系和群级事件只保留在对应群。成员记忆支持资料、群内称呼、历史昵称、行为模式和长期信息;近期消息会在空闲或达到阈值后自动整理。记忆会作为 Session 上下文按需刷新,设置中可以关闭,关闭后不会删除已有数据。 安装 新建一个 QQ Chat profile npx @deepseek-ai/dsh plugin --profile qqchat add @deepseek-ai/dsh-web-app dsh-qqchat npx @deepseek-ai/dsh --profile qqchat 安装到已有的 Web profile npx @deepseek-ai/dsh plugin --profile web add dsh-qqchat npx @deepseek-ai/dsh --profile web 当前开发分支也可以直接从 GitHub 安装: npx @deepseek-ai/dsh plugin --profile qqchat add @deepseek-ai/dsh-web-app dsh-qqchat npx @deepseek-ai/dsh --profile qqchat 第一次连接 QQ 1. 启动 DSH Web。 2. 打开 设置 → QQ Chat。 3. 点击 扫码连接。 4. 使用手机 QQ 扫描二维码,并选择要授权的官方 Bot或手动填写 AppID 和 AppSecret 接入。 5. 授权完成后,QQ Gateway 会自动连接。 如果无法扫码,也可以选择 手动配置,填写 QQ 开放平台的 AppID 和 AppSecret,并按需选择沙箱环境。插件会先验证凭据,验证成功后再保存并启动 Gateway。 连接成功后,QQ Chat 的设置和对话会出现在 DSH 中。 群聊接收方式 在 设置 → QQ Chat → 消息接收 中可以选择: | 模式 | 行为 | | 自动回应 | 每条群消息都会交给 Agent,Agent 可以自动回复 | | @回复 | 所有消息都会记录,但只有 @Bot 的消息会触发回复 | | 静默记录 | 只保存消息和记忆,不主动回复 | 群聊默认使用纯文本兼容格式,适合不同 QQ 客户端。私聊和群聊可以分别选择 Markdown 或纯文本兼容。私聊选择 Markdown 时默认使用 QQ 官方流式传输;选择纯文本兼容时使用普通发送,不再提供单独的流式开关。 命令 QQ 中以 / 开头的消息会交给命令系统处理,不会作为普通消息发送给模型。DSH 原生命令保持原名;QQChat 自有命令使用 qq 前缀。群聊中可以发送 @Bot /qqhelp。 | 命令 | 用途 | | /qqhelp、/qqcommands | 查看 QQChat 和 DSH 命令 | | /qqnew、/qqreset、/qqclear | 保留旧 Session,下一条消息开始新的 QQ Session | | /compact | 手动压缩较早的会话历史 | | /qqmodel [provider/]model | 查看或切换当前群聊/私聊的模型 | | /qqpreset [preset] | 查看或切换当前空白 Session 的 Agent Preset;对话开始后需新建 Session | | /qqstop | 中止当前生成 | | /qqstatus | 查看当前 Session、模型和生成状态 | | /qqping | 测试 QQChat 连通性 | | /qqversion | 查看 QQChat 版本 | | /goal | 查看、创建、编辑、暂停、恢复或清除 Goal | | /plan | 进入或退出 Plan 模式 | | /feedback | 提交反馈 | | /permission | 查看或切换工具权限预设 | /feedback 反馈去向 /feedback 使用 DSH 原生反馈机制,不会自动创建 GitHub Issue,也不会直接发送给 QQChat 作者。默认情况下,反馈只写入当前 DSH Session 的本地日志,不会离开本机。 只有在 DSH 显式配置会话遥测时才会上传到配置的 OTLP 服务: | DSH 遥测模式 | 反馈去向 | | DISABLED(默认) | 仅保存在本地 Session | | FEEDBACK_ONLY | 执行 /feedback 时,将当前 Session 日志后缀发送到配置的 OTLP 服务 | | FULL | Session 事件按配置实时发送到 OTLP 服务;/feedback 另外记录反馈事件 | 反馈可能包含当前 Session 的对话、工具参数、工具结果和工作区路径。提交前请确认 DSH 遥测配置符合你的隐私要求。 /export 是 DSH Web 的浏览器下载命令,QQ 中会提示暂不支持。模型切换按群聊/私聊分别生效,并保留已有对话上下文。 记忆内容 QQ Chat 会分别保存: - 群聊记忆:群里的重要事件、约定、话题和关系 - 群成员记忆:成员的资料、群内称呼、历史昵称、行为特点和长期信息 - 私聊记忆:与某个 QQ 用户的长期对话信息 同一 Bot 下,用户记忆按照稳定用户 ID 跨群连续;群内关系、群级事件和群聊记录不会跨群混入。不同 Bot 的用户记忆相互隔离。 记忆会在聊天空闲或积累到一定数量后异步整理,不会阻塞正常回复。可以从 QQ Session 顶部的 QQ 记忆 入口查看群和成员记忆。记忆内容会按需进入 Agent 上下文,启用后可能降低上下文缓存命中率并增加输入 token;可在 设置 → QQ Chat → 记忆系统 中关闭。 记忆快照会在新 Session、记忆上下文过期或 Session 压缩后刷新,连续对话不会重复写入完整记忆。群级记忆和当前群员记忆分别管理,群持续活跃不会替潜水成员刷新成员记忆。 权限管理 在设置中,媒体与文件权限和普通工具权限分别控制: - 接收群成员媒体/文件:控制是否下载、存储并在会话中显示群成员发送的图片、文件、音频和视频。 - 允许群成员读取媒体/文件:控制群成员触发的 Agent 是否可以调用 QQChat 媒体工具读取当前消息附件。 - 群成员可用工具:控制群成员是否可以使用当前 preset 的普通 Agent 工具。 关闭媒体接收不会影响普通文字消息;关闭普通工具或媒体读取也不会影响群友正常聊天和获得回复。 Owner 按 QQ 的稳定用户 ID 判断,不根据昵称判断身份。 消息显示 QQ 对话使用 DSH 的默认聊天界面显示: - 显示发送人用户名 - 区分自己发送和他人发送的消息 - 支持消息引用显示 - 支持 QQ @消息转换为用户名 - 支持从 DSH 会话输入框主动发送 QQ 消息 Session Preset QQ Session 使用 DSH 原生的 Agent Preset 机制。插件配置中的 preset 只作为新建 QQ Session 的默认值;在 DSH Web 中为某个空白 Session 选择 preset 后,选择结果会随该 Session 保存,重启或恢复后仍优先使用该 Session 最近一次选择。也可以在该 Session 的第一条 QQ 消息中发送 /qqpreset <preset> 完成选择。对话开始后 DSH 不允许更换 preset,此时请先使用 /qqnew。插件不复制 DSH 的 preset、工具或 AgentLoop。 注意事项 - 需要 QQ 官方 Bot,不支持个人 QQ 账号登录。 - 0.2.2 仍在持续完善,建议先在测试 Bot 和测试群中使用。 - 富媒体、完整 QQ 表情和部分复杂消息格式可能需要使用兼容模式。 - 卸载插件不会自动删除已经保存的聊天和记忆数据。 本地开发 npm install npm run check 更多开发约定和内部说明见: - 开发说明 - 记忆规则 - 安全边界 - 架构说明 License 本项目使用 MIT License。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Coffeiz/dsh-qqchat
把 QQ 群聊私聊接入助手,支持记忆与权限管理
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,170已汉化DeepSeek 客户端
71
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,041已汉化DSH
70.7
这是你的仓库?认领条目