用于 DeepSeek Harness 的独立 QQ 群聊插件:人设、价值评分、记忆、日记、7 种角色…
36/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add SenuMirai/dsh-qq-group该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 5 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-qq-group(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.12.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 11:53:27
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 221 处,展示前 36 条)
- 读取本地文件lib/index.js:48
if (!existsSync(path)) return emptyStore(); - 读取本地文件lib/index.js:49
const parsed = JSON.parse(readFileSync(path, "utf8")); - 写入本地文件lib/index.js:62
writeFileSync(path, `${JSON.stringify(store, null, 2)}\n`, "utf8"); - 写入本地文件lib/index.js:294
mkdirSync(stickersDir(root), { recursive: true }); - 写入本地文件lib/index.js:295
for (const repo of repos) mkdirSync(repoDir(root, repo.id), { recursive: true }); - 读取本地文件lib/index.js:299
return createHash("sha1").update(readFileSync(path)).digest("hex").slice(0, 16); - 写入本地文件lib/index.js:307
mkdirSync(join(dest, ".."), { recursive: true }); - 写入本地文件lib/index.js:308
renameSync(src, dest); - 写入本地文件lib/index.js:312
mkdirSync(join(dest, ".."), { recursive: true }); - 删除本地文件lib/index.js:314
unlinkSync(src); - 读取本地文件lib/index.js:330
return JSON.parse(readFileSync(path, "utf8").replace(/^ FEFF/, "")); - 读取本地文件lib/index.js:337
if (!existsSync(path)) return; - 读取本地文件lib/index.js:351
files = readdirSync(dir).filter((file) => IMAGE_EXT$1.has(extname(file).toLowerCase())); - 删除本地文件lib/index.js:635
unlinkSync(entry.path); - 删除本地文件lib/index.js:710
unlinkSync(path); - 发起网络请求lib/index.js:800
const res = await fetch(url, { signal: AbortSignal.timeout(15e3) }); - 删除本地文件lib/index.js:1002
if (existsSync(path)) unlinkSync(path); - 删除本地文件lib/index.js:1607
rmSync(dir, { - 执行外部命令来自配置/变量lib/index.js:1641
const child = spawn(python, args, { - 发起网络请求lib/index.js:2588
response = await fetch(url, { - 发起网络请求lib/index.js:4173
const response = await fetch(url, { - 执行外部命令来自配置/变量lib/index.js:6266
const spawned = spawn(python, [script], { - 执行外部命令来自配置/变量lib/index.js:6459
child = spawn(ffmpeg, [ - 发起网络请求lib/index.js:6567
const health = await fetch(`${base}/health`, { signal: AbortSignal.timeout(2500) }); - 发起网络请求lib/index.js:6584
const response = await fetch(url, { - 删除本地文件lib/index.js:6714
unlinkSync(join(this.cache.dir, file)); - 发起网络请求lib/index.js:7821
const res = await fetch(url, { signal: AbortSignal.timeout(15e3) }); - 执行外部命令来自配置/变量lib/index.js:10816
const child = spawn(launcher, [], { - 执行外部命令固定命令lib/index.js:10878
spawn("cmd.exe", ["/c", tts.serviceScript], { - 执行外部命令固定命令lib/index.js:11625
spawn("explorer.exe", [dir], { - 发起网络请求lib/client.js:225
(await fetch(BASE + '/config', { cache: 'no-store' })).json(), - 发起网络请求lib/client.js:226
fetch(BASE + '/version', { cache: 'no-store' }).then(function (r) { return r.json(); }).catch(function () { return null; }), - 发起网络请求lib/client.js:250
const data = await (await fetch(BASE + '/session-names', { cache: 'no-store' })).json(); - 发起网络请求lib/client.js:261
setStatus(await (await fetch(BASE + '/status', { cache: 'no-store' })).json()); - 发起网络请求lib/client.js:274
const data = await (await fetch(BASE + '/model-info?provider=' + encodeURIComponent(sel.provider) + '&model=' + encodeURIComponent(sel.model), { cache - 发起网络请求lib/client.js:284
const data = await (await fetch(BASE + '/stickers', { cache: 'no-store' })).json();
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-llm给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DeepSeek Harness 的独立 QQ 群聊插件:人格、价值评分、记忆、语音、表情包和视觉。
README
由 DeepSeek 最新模型翻译生成dsh-qq-group
当前版本:v1.27.0(QQ空间配图/@/远程读取、红包、主动 @主人、七角色语音)
独立的 DeepSeek Harness QQ 群聊插件:有人设、有记忆、会判断该不该接话,支持主动/被动搭话、语音、唱歌、表情包、日记、QQ空间说说和视觉看图。
A standalone QQ group-chat plugin for DeepSeek Harness: persona, memory, value-based reply decisions, proactive/passive chat, voice, singing, stickers, diary, QQ Zone posts and optional vision.
本项目从 dsh-whale-girl 的 QQ 模块拆分而来,数据、模型、人设与桌宠完全独立。
展开完整文档(README 剩余 1 节)
dsh-qq-group
当前版本:v1.27.0(QQ空间配图/@/远程读取、红包、主动 @主人、七角色语音)
独立的 DeepSeek Harness QQ 群聊插件:有人设、有记忆、会判断该不该接话,支持主动/被动搭话、语音、唱歌、表情包、日记、QQ空间说说和视觉看图。
A standalone QQ group-chat plugin for DeepSeek Harness: persona, memory, value-based reply decisions, proactive/passive chat, voice, singing, stickers, diary, QQ Zone posts and optional vision.
本项目从 dsh-whale-girl 的 QQ 模块拆分而来,数据、模型、人设与桌宠完全独立。
This project was split out of the QQ module in dsh-whale-girl; its data, model, persona and lifecycle are fully independent from the desktop pet.
功能与特点
| 能力 | 说明 |
| OneBot 11 / NapCat | 通过 WebSocket 连接 NapCatQQ,支持自动重连、启动检查、自动拉起 |
| 人设与模型 | 多张人设卡;可按群绑定,一张卡可绑多个群,未绑定跟随全局;模型 provider/model、推理档位、备用模型可按群单独选 |
| 主动搭话 | 独立页:搭话模式按当前群/私聊单独生效(私聊禁用并注明),冷场阈值、概率/峰谷命中线、近远时机、冷却、每日上限、安静时段、试运行、主动语音概率 |
| 红包识别 | 识别红包卡片并用模型发一句感谢;当前 NapCat 没有领取接口,只能识别/感谢,不能保证抢到 |
| 主动 @主人 | 接话或主动开口时按概率 @ 主人,向她吐槽、分享群里趣事、抱怨群友或告状;仅群聊生效,私聊禁用;概率、冷却、每日上限可调 |
| 价值评分 v3 | 不是每条都回:@/叫名字/引用直接回;普通闲聊按关键词、成员、上下文、熟识度、好感度、夜间等算 0~100 分 |
| 冷场逻辑 | 任何人类消息都会重置接话去抖和主动开口倒计时;群里一直有人说话时她不插话 |
| 直接对话队列 | 她正在生成时收到的 @/引用会排队,不会丢;主动开口会给 @ 让位 |
| 群友画像 | 每群每人独立熟识度/好感度;主人数值全局统一且可编辑,不被互动或衰减改动 |
| 群聊开关 | 设置页顶部逐群开关;关闭后完全不接该群消息、不主动开口、不写互动 |
| 日记 | 每条回复记录上下文、评分理由、内心吐槽;thought 放在 JSON 第一项;支持筛选、导出、删除单条/按人删除;列表可滚动加载全部,不再只看最近几十条 |
| 表情包 | 自动收藏、AI 打标签、按语境/关键词选图;自拍图已并入常用库,用“尾巴/自拍”标签即可被明确请求选中 |
| 语音 / 唱歌 | 只保留 Edge TTS 与 GPT-SoVITS;GPT-SoVITS 已接 v2ProPlus 七角色(三月七、银狼、藿藿、白露、虎克、青雀、克拉拉)与 7 种情绪参考音;支持试听、按群概率;RVC 已移除 |
| 七情绪 | 开心 / 生气 / 吃惊 / 中立 / 难过 / 厌恶 / 恐惧;按回复文字自动选参考音,也可手动指定 style |
| QQ空间 | 手动/草稿/自动;配图 0~9(固定/区间/模型决定,可选表情包仓库);文本 @ 名单/模型/概率;本地记录按日期筛选、排序、滚动;群聊可读自己最近说说;远程读取他人空间/评论默认关闭并标风险 |
| 视觉看图 | 可看当前/引用图片,也支持转发聊天记录里的图片;嵌套转发最多展开两层;本地路径与文件头识别 |
| 回复引用 | 目标消息被后续消息隔开时自动带 QQ 引用,可开关;文件/合并转发/语音不引用,失败自动改发纯文字 |
| 省 token | 自适应上下文(自包含短句少读、指代/追问读全量)、contextTurns、记忆注入条数、情绪/敌意判断开关 |
| 永久记忆 | 双层:全局主人记忆 + 各会话独立记忆;全局私密不进群;自动记录名单;容量满只封存;手动增删/提升/多选 AI 合并 |
| 夜间免打扰 | 支持跨午夜;夜间不再主动开口,普通接话按命中扣分(0~100,默认 20) |
| 心情 | 每群独立心情;会随互动升降、随时间回落,被辱骂/恶意攻击会下降 |
| 用量统计 | 按群、按用途、按模型统计 token;图片调用与估算调用单独标记;月历、余额估算、单价校准 |
| 稳定性 | 事件/定时器/异步回复全部兜异常;模型只回 reasoning 时自动提取/重试/备用模型 |
功能详解
下面按功能拆开写,方便第一次部署的人判断哪些需要、哪些可以关。
1. 连接与自动恢复
- 通过 OneBot 11 WebSocket 连接 NapCatQQ,默认 ws://127.0.0.1:3001。
- 支持 access token;token 只保存在本机,不写进仓库。
- DSH 重启后自动重连;连接断开按退避重连,状态页能看到当前链路。
- 可选自动拉起 NapCat:填启动脚本绝对路径,连接失败时尝试启动。
- 支持 HTTP 上报地址,方便 NapCat 反向上报。
- 连接状态、群列表、已添加会话、最近错误都在「运行状态」页。
- 离线时运行状态页直接显示 NapCat 登录二维码,每 5 秒自动重载;过期可点「刷新二维码」或「启动 NapCat」。
- QQ 在线时自动拉取群名、好友昵称/备注;设置页会话列表不再只能看号码。
2. 人设卡与模型
- 多张人设卡,每张可绑定多个群;未绑定的群使用全局人设。
- 人设卡可单独启用/停用,支持导入导出,方便备份和换机。
- 模型按群选择 provider/model;备用模型可单独设置。
- 推理档位支持 low / high / max(具体可用档位由模型能力决定)。
- 上下文窗口可按 provider/model 覆盖。
- 设置页有「测试两个模型」:主模型和备用模型分别测,显示真实延迟、回复和实际可用项,不会把备用成功误报成主模型成功。
- 模型切换自动保存,避免切完没点保存导致回滚。
3. 接话判定(价值评分)
不是每条消息都回。每条候选消息会算 0~100 分:
- 基础分;
- 被 @ / 叫名字 / 引用她:直接对话;
- 关键词加分(DeepSeek、鲸鱼、大肥鱼等,可配置);
- 指定成员接话概率;
- 刚跟她聊过的人接着说、接着她刚才的话、连续对话;
- 熟识度、好感度;
- 被冷落次数、夜间免打扰扣分;
- 单条消息/过短消息扣分。
分数达到阈值后才进入概率命中,再受冷却、10 分钟回复上限、直回上限约束。
4. 主动搭话
- 按群独立设置,可主动/被动/自定义。
- 冷场判定、首次延迟、退避增长、最大间隔、每日上限。
- 概率命中线模式支持峰时/谷时、远近时间因子、没中加成。
- 试运行模式只记账不发送,方便先观察。
- 主动语音概率独立配置。
- 私聊也可以主动搭话(此前误限制已修复)。
- 主人消息优先:主人刚发、还没回复时,别人的 @ 不会把主人待回复消息清掉。
5. 主动 @主人
- 仅群聊;私聊不会 @。
- 在接话或主动开口时,按概率 @ 主人。
- 支持每日保底次数(0~50):当天次数未达到保底时不看概率,达到后恢复正常概率。
- 仍受每日上限、最小间隔约束。
- 语音消息也会带 @ 段,不会出现“日志说 @ 了、实际没 @”。
- 会利用 @ 发送吐槽、分享群里的趣事、抱怨群友或告状,具体内容由人设和上下文决定。
- 群没启用时不会主动开口,也不会触发 @。
6. 直接对话队列与黑名单
- 她正在生成时收到的 @/引用会排队,不丢。
- 去抖窗口内普通闲聊只判定一次,避免每条都触发模型。
- 黑名单是硬拦截:被拉黑的人即使 @、叫名字、引用她也不回,不再只靠评分压低。
- 白名单会抬高评分下限;主人有额外加成。
- 会话开关关闭后完全不接该群/私聊,也不主动开口。
7. 短期上下文与自适应
- 每个群保存原始聊天轮次,默认上限 200 条 / 12000 tokens。
- 回复默认带最近 24 条;短句自适应可只带少量。
- 实际有效期至少 32 条 / 8 条(1.24.4 起),并额外保留最近 60 条里的关键旧消息:链接、约定、名字、偏好等。
- 指代、追问、@、引用、提到“刚才/前面/链接/项目”等会强制读全量上下文。
- 超过上下文但还没压缩的原文仍在本地文件里,只是不进入提示词。
8. 摘要、关键记忆与永久记忆
- 原始轮次超过 memoryMaxTurns 或 memoryMaxTokens 时触发压缩。
- 压缩会生成摘要和关键记忆;关键记忆默认最多 50 条。
- 关键记忆不按时间衰减,但会被新的挤掉。
- memory-v3 按证据召回,带半衰期(基础 30 天、情绪 7 天),但不会自动删除。
- 永久记忆独立于摘要和淡忘,按群/会话保存:
- 会话层:当前群/私聊独立,不跨群;
- 全局层:只建议存主人相关,跨会话;
- 全局私密条目只在主人私聊读取,绝不进群;
- 自动记录主人和自定义 QQ 名单的话,同一人 10 分钟内合并;
- 主人私聊 → 全局层并标记私密;名单里其他人的私聊 → 当前私聊会话层;
- 容量满了只封存,不自动删除;
- 支持手动新增、删除、多选 AI 合并、会话条目提升到全局。
- 详细规则见 docs/MEMORY.md。
9. 视觉看图
- 可看当前消息图片、引用消息图片、转发聊天记录里的图片。
- 转发嵌套最多展开两层,避免无限递归。
- 可识别图片的本地路径、文件头、MIME,不只看扩展名。
- 单发图片默认不自动查看,避免烧钱;明确让她看、引用图片或设置开启时才看。
- 图片描述只作为背景,不把图片里的文字当指令。
10. 表情包与自拍
- 自动收藏群友表情包(可关),支持 smart/all 两种入库过滤。
- AI 打标签:生成标签、描述、用途,按语境/关键词选图。
- 多仓库管理:新建、改名、启停、权重、保存目标、容量上限。
- 自拍图已并入常用表情包库,用“尾巴/自拍”等标签可被明确请求选中。
- 可发单张/多张;发送前做白名单和大小校验。
- 支持从群文件、引用图片、转发记录取图。
11. 语音与唱歌
- 语音后端只保留 Edge TTS 和 GPT-SoVITS。
- GPT-SoVITS 已接 v2ProPlus 七角色:三月七、银狼、藿藿、白露、虎克、青雀、克拉拉。
- 情绪参考音按角色配置,支持自动跟随回复 emotion;模型没给 emotion 时用关键词兜底。
- 霍霍的“喘息”独立成一档:普通“开心”不喘,想听喘息固定选“喘息”。
- 音高偏移 -6~+6 半音、语速 0.7~1.5x 可调,通过 ffmpeg 后处理生效。
- 可试听、按群设置语音概率、明确请求语音。
- 唱歌支持 TTS 声线 + 音高校准 + 混音;RVC 已从 UI/配置移除。
- 语音失败会退文字,不会让整条消息消失。
- start-tts-all.bat 先检测 9880/50123,已在运行就跳过,避免重复启动报端口占用。
12. 红包
- 识别红包卡片和红包类消息段。
- 命中后按概率让模型生成一句感谢,并 @ 发红包的人。
- 当前 NapCat 没有领取红包的 action,所以只能识别和感谢,不能真的抢;这一点不会假装做到。
- 可在接话页开关、调感谢概率。
- 详细说明见 docs/RED-PACKET.md。
13. QQ空间
- 手动/草稿/自动三种发布模式。
- 可见范围:仅自己/好友/所有人/部分可见。
- 配图 0~9 张,支持固定张数、区间随机、模型决定;图片来源可选表情包仓库。
- 文本 @:NapCat 没有真正的空间 @ 参数,只能正文写“@昵称”,不保证通知。
- 本地说说记录:按日期筛选、最新/最早排序、滚动加载。
- 群聊可读自己最近发过的本地说说,回答“你空间发了什么”。
- 远程读取(默认关闭,需接受风险):通过 Qzone cookie 读取自己/指定 QQ 的说说和评论;评论目前只读,写入留到后续。
- 详细说明见 docs/QZONE.md。
14. 日记与画像
- 每条回复记录群友原话、上下文、评分理由、内心吐槽。
- thought 在 JSON 第一项;日记支持筛选、导出、删除单条/按人删除、滚动加载全部。
- 用户画像按群保存:熟识度、好感度、称呼、互动次数。
- 主人画像全局统一,不因日常互动或衰减改变。
- 情绪档位影响提示词语气:陌生/认识/熟悉/很熟,反感/略疏远/普通/好感/亲近。
15. 心情、夜间与用量
- 每个群独立心情,随互动升降,随时间回落;被辱骂或恶意攻击会下降。
- 夜间免打扰支持跨午夜;夜间不主动开口,普通接话扣分。
- 用量统计按群、用途、模型统计 token;图片和估算调用单独标记。
- 月历、余额估算、单价校准。
- 所有计数和限额都能在设置页调整。
16. 稳定性与边界
- 事件、定时器、异步回复、发送全部有异常兜底。
- 生成卡死超过 4 分钟自动解锁,避免某个群永久 busy。
- 发送账号级节流:串行,最小间隔 1.2 秒;被 NapCat 限流后全局冷却 30 秒。
- 模型只回 reasoning 或空回复时,自动提取、重试、切备用模型。
- 解析器兼容 thought:/messages: 伪格式,thought 只进日记,不会发到群里。
- 不保证跨平台 UI 完全一致;以 Windows + NapCat 实测路径为主。
- 不自动抢红包、不自动回复评论、不监控别人空间;这些要么平台没接口,要么风险太高。
部署要求
- DeepSeek Harness 桌面版,或可加载插件的主机
- Node.js 22.12+、pnpm 9+
- NapCatQQ + QQ NT(推荐 Windows;Linux 可用 NapCat Docker,需自行确认 QQ 登录)
- 一个 QQ 小号作为机器人,已加入目标群
- 可选:视觉模型(识图)、edge-tts(语音,联网)、ffmpeg(部分音频转换)
部署步骤
先配好「主人 QQ」再开始用。
从 v1.28 起,没填主人 QQ 时任何人都不会是主人;「群主自动当主人」这条兜底默认关闭,需要的话在设置页手动打开。这样做是为了避免公开部署时,别人把自己的机器人拉进某个群,群里原本的管理员就被当成了主人。
1. 安装并登录 NapCat
1. 安装 QQ NT 与 NapCatQQ;
2. 用机器人 QQ 登录;
3. 在 NapCat 中启用 OneBot 11,添加 WebSocket 服务器:
- 地址:ws://127.0.0.1:3001(默认)
- access token:自己生成一个强随机串
4. 确认 NapCat 控制台显示 OneBot WebSocket 已启动。
2. 安装本插件
git clone https://github.com/SenuMirai/dsh-qq-group.git
cd dsh-qq-group
pnpm install
pnpm run build
把目录 link 进 DSH profile(或使用 dsh plugin --profile desktop add <绝对路径>):
// <DSH_HOME>/profiles/desktop/package.json
{
"dependencies": {
"dsh-qq-group": "link:/absolute/path/to/dsh-qq-group"
},
"dsh": {
"profile": {
"bundles": [
// ... 其它插件 "dsh-qq-group" ] } } }
重启 DSH。设置页出现「QQ 群聊」即加载成功。
3. 配置连接
DSH 设置 →「QQ 群聊」→「连接」:
| 项 | 示例 | 说明 |
| WebSocket 地址 | ws://127.0.0.1:3001 | NapCat 的 OneBot WS |
| Access Token | <YOUR_TOKEN> | 与 NapCat 一致,不要提交到仓库 |
| 机器人自称 | 小鲸鱼 | 群里被叫到的名字,可逗号分隔多个 |
| 主人 QQ | <YOUR_QQ> | 用于好感初始值与主人识别,可留空 |
| 自动连接 | 开 | DSH 启动后自动连 |
| 自动拉起 NapCat | 按需 | 需要填写启动脚本绝对路径 |
4. 启动
设置页点「启动」,或在群里 @ 机器人测试。首次建议先点「体检」与「模型检查」。
配置参数推荐
以下是起步值,按群氛围调整:
| 参数 | 推荐 | 说明 |
| 搭话模式 | 主动 | 被动只回 @/叫名字;主动才会插话和冷场开口 |
| 评分阈值 | 55~65 | 越高越挑;太低会频繁接话 |
| 接话概率 | 0.15~0.35 | 分数达标后的二次掷骰 |
| 冷却 | 20~45 秒 | 两句之间的最小间隔;直接对话会跳过 |
| 普通 10 分钟上限 | 6~10 | 防刷屏;按群活跃度调 |
| 直接回复上限 | 20~40 | @/引用/接着聊单独计数 |
| 去抖 | 6 秒 | 等一波人说完;任何新消息都会重置 |
| 夜间免打扰 | 23:00–08:00,扣 20 | 想更安静就调大,0 = 不扣 |
| 看图策略 | 自定义:@ + 问看法 | 最省 token;需要“所有图”再选 all |
| 语音概率 | 0.1~0.3 | 太高会刷屏,且增加 TTS 延迟 |
| 表情包概率 | 0.15~0.3 | 配合自动收藏使用 |
| 备用模型 | 选一个同 provider 的可用模型 | 主模型空回复/限流时兜底 |
模型建议:
- 日常文字:deepseek-v4.1-flash 或你额度充足的模型;
- 需要识图:选支持 text + image 的模型(如 deepseek-v4.1-flash、step-5-preview、MiniMax 多模态型号);
- 推理档位:群聊建议 low;太高会增加延迟和 token;
- 换模型后历史用量按 provider/model 分开统计,余额是全局钱包。
设置页结构
- 人设 / 模型:人设、搭话模式、模型、推理档位、备用模型、用量与积分;
- 连接:OneBot、token、自称、主人、自动拉起、Cookie 清理提示;
- 聊天频率(按群):阈值、关键词/成员概率、冷却、上限、连发、语音/唱歌/表情包概率、看图策略;
- 白名单 / 黑名单:一行一个 QQ;白名单抬评分下限,黑名单压上限;
- 夜间:时段与命中扣分;
- 语音:Edge / GPT-SoVITS、音色、情绪、语速、试听、网关检查;
- QQ空间:启用、模式、可见范围、频率、草稿生成与发布;
- 表情包:自动收藏、数量/MB 上限、看图策略;
- 日记:筛选、导出、删除、滚动加载全部。
所有页签的「保存全部」固定在顶部,不需要滚到底部。
数据与隐私
| 路径 | 内容 |
| $DSH_HOME/dsh-qq-group/qq.json | 连接、群策略、语音/唱歌 |
| $DSH_HOME/dsh-qq-group/settings.json | 人设、模型、名单、夜间、看图 |
| $DSH_HOME/dsh-qq-group/qq-memory.json | 每群短期记忆(上限 200 条/群) |
| $DSH_HOME/dsh-qq-group/permanent-memory.json | 永久记忆(不摘要、不淡忘,按会话分开) |
| $DSH_HOME/dsh-qq-group/profiles.json | 每群每人画像 |
| $DSH_HOME/dsh-qq-group/diary.json | 日记(上限 1000 条) |
| $DSH_HOME/dsh-qq-group/qzone.json | QQ空间发布记录(tid、正文、时间、可见范围) |
| $DSH_HOME/dsh-qq-group/stickers/ | 本地表情包 |
仓库不包含任何聊天记忆、日记、QQ 号、token、Cookie 或用户路径;这些只存在于本机运行时。.gitignore 已排除数据文件。
接话逻辑(简版)
1. @ / 叫名字 / 引用她 → 100% 直接回;
2. 其它消息在 6 秒去抖后算 0~100 分:
- 基础 30;关键词/指定成员概率;刚跟她聊过 +30;带“你” +15;
- 熟识度、好感度、@ 别人、被冷落、夜间扣分、单条消息;
- 白名单抬下限、黑名单压上限;
3. 分数 ≥ 阈值 → 按 分数/100 掷骰 → LLM 闸门(读最近上下文判断是不是在跟她说);
4. 她说完后同一人接着说:高概率候选,但仍过闸门;
5. 任何人类消息都重置冷场计时与主动开口倒计时。
视觉看图
「表情包」→「看图策略」:
- 关闭 / 自定义(多选)/ 所有图片;
- 自定义可同时勾选:@/叫名字/引用、强相关上下文、文字里问她看法;
- 只有真正回复且命中条件才下载并计费;纯图片、无文字、没 @ 她的消息不触发。
主动 @主人
接话或主动搭话时,偶尔会专门 @ 主人,而不是只对群里说话。
- 开关在「主动搭话」页签最前面;勾选后展开详细设置。
- 仅群聊生效:私聊会话里选项禁用,并标注原因。
- 可调参数:命中概率、最小间隔(分钟)、每日上限(0 = 不限次数)。
- 冷场主动开口、普通接话时都可能触发,不会每条回复都 @。
- 这次会强制用文字发,避免语音抢占 @;正文不写 @,由系统自动带。
- 提示词会要求她讲具体的事:吐槽、分享刚发生的趣事、抱怨群友、告状、撒娇。
红包识别与感谢
识别 json/xml 红包卡片或 redbag 消息段,标记为 [红包]。开启后用模型生成一句 20 字以内的感谢,并 @ 发红包的人。
当前不能真正领取红包:NapCat 的 OneBot action 列表没有领取接口,插件不会用 DOM 自动化伪装,也不会声称“抢到了”。
详见 docs/RED-PACKET.md。
QQ空间增强
- 配图:0~9 张;固定张数、区间随机、或模型决定;来源可选表情包仓库。
- 文本 @:NapCat 没有真正的空间 @ 参数,只能正文写「@昵称」,不保证通知;支持名单随机/模型决定/概率。
- 本地说说记录:按日期筛选、最新/最早排序、滚动加载全部。
- 群聊读自己的空间:消息提到空间/说说/动态时,注入最近 5 条本地记录。
- 远程读取:通过 Qzone cookie 读取自己/指定 QQ 的说说和评论,默认关闭,需接受风险;只建议手动低频。
- 回复评论:目前只读,写入评论留到下一阶段。
完整参数与风险说明见 docs/QZONE.md。
语音模型安装
GPT-SoVITS 模型不随仓库分发,需要本地放置:
GPT_SoVITS/GPT_weights_v2ProPlus/<角色>-e10.ckpt GPT_SoVITS/SoVITS_weights_v2ProPlus/<角色>_e10_s<步数>.pth GPT-SoVITS/ref/voices.json GPT-SoVITS/ref/*.wav
完整步骤见 docs/VOICE-MODELS.md。
常用命令与文档
- 语音模型安装
- 红包识别与限制
- QQ空间增强与风险
- 记忆架构与永久记忆
- 常用命令与接口
- 触发词与指令
- 更新日志
参考项目与致谢
本项目的设计参考了这些开源项目的优点:
- dsh-pet:桌宠/插件工程结构;QQ 模块随后拆分成本项目;
- zaofan-make/dsh-qqbot:价值评分、人设、群友画像、上下文压缩等思路;
- Jiangsubei/dsh-napcat-bridge:主动搭话、夜间免打扰、别名、记忆等交互设计;
- NapNeko/NapCatQQ:QQ NT 的 OneBot 实现;
- OneBot 11:协议标准;
- rany2/edge-tts:免费、无需显卡的语音合成;
- sdfsfsk/matsuko_cover 与 dsh-cover-pipeline:唱歌/翻唱链路的灵感来源;
- DeepSeek Harness:插件宿主、模型、附件与设置系统。
以上项目各自遵循其原许可证;本项目只借鉴设计思路,不复制其受限素材。
已知边界
- NapCat/QQ 的登录与风控由 QQ 侧决定,插件不绕过;
- 语音/唱歌依赖 edge-tts 网络与本地音频工具;
- 视觉识别受所选模型能力限制,不支持图片的模型会退回文字;
- 群聊内容会发给所选模型服务商,请自行评估隐私;
- 请遵守 QQ 与群规,不要用于骚扰、刷屏或未授权自动化。
v1.21.0 QQ空间与七角色语音
- 新增「QQ空间」页签:手动 / 草稿 / 自动三种模式。
- 可见范围默认「仅自己可见」,可选好友/所有人。
- 每日上限、最小间隔、自动概率;用今天日记生成草稿。
- 发布前清洗链接、QQ号/群号;本地记录支持删除。
- GPT-SoVITS 新增藿藿、白露、虎克、青雀、克拉拉,共 7 个 v2ProPlus 角色。
- 语音只保留 Edge TTS 与 GPT-SoVITS;RVC、CosyVoice2、Kokoro、IndexTTS 已移除。
- 日记支持滚动加载全部;所有页签「保存全部」置顶。
v1.20.0 GPT-SoVITS v2ProPlus 与七情绪
- GPT-SoVITS 升级到 v2ProPlus,使用三月七角色权重。
- 网关支持 7 种情绪参考音,插件按回复文字自动选 style。
- 补齐 onnxruntime CPU 依赖;实测短句约 7.2 秒。
v1.19.7 自拍并入表情包与转发图片
- 自拍库不再单独维护:自拍/尾巴图并入常用表情包库,按文件名和标签关键词选中。
- 转发聊天记录支持图片:图片会进入视觉输入;嵌套转发最多展开两层。
- 新增逐群开关:关闭后完全不接该群消息、不主动开口。
- 夜间免打扰不再主动开口;心情会下降/回落。
- 主人熟识度/好感度全局统一、可编辑。
v1.18.4 日记格式与近期更新
- v1.18.4:thought 移到 JSON 第一项,减少模型截断导致日记缺失内心吐槽。
- v1.18.3:自动引用只对文字/图片生效,文件/合并转发/语音不再触发“该消息类型暂不支持查看”;引用发送失败自动改发纯文字。
- v1.18.2:新增群聊入口置顶到插件设置顶部,独立于所有页签。
- v1.18.1:本地 TTS 增加 2.5 秒健康检查,网关未启动时回退 Edge,不再卡住或静默失败。
- v1.18.0:目标消息被后续消息隔开时自动带 QQ 引用,可开关。
- v1.17.0:省 token 开关与自适应上下文;单价保存修复;情绪/敌意判断可关。
- v1.16.0:主动搭话独立页;用量按群、按用途统计。
- v1.15.x:人设独立分栏与按群绑定;恢复经典鲸鱼娘/贴吧人设;看图支持本地路径与文件头识别。
v1.14.0 GPT-SoVITS 本地后端
- 新增 GPT-SoVITS 后端,适配网关默认 50123,后端 API 9880。
- 网关把 POST /tts 转成 GPT-SoVITS GET /tts,返回 WAV。
- v1 基础模型 CPU 短句约 2.4 秒;角色模型尚未训练。
- 参考音频目前是本地合成女声,后续可替换为鲸鱼娘角色模型。
v1.11.0 Kokoro 核显 TTS
- 新增 Kokoro-82M 本地 TTS 后端,ONNX Runtime DirectML,适配 780M 核显。
- 独立 Kokoro HTTP 网关(默认 50122);短句实测约 6 秒。
- 语音后端列表新增 Kokoro;切换时自动填 50122。
- Kokoro 支持中文内置音色(如 zf_005);自由情感描述仍以 CosyVoice2 更合适。
- IndexTTS-2.5 选项保留,服务仍未部署。
v1.10.0 本地 TTS 后端列表
- 语音页新增后端选择:Edge TTS / CosyVoice2 / IndexTTS-2.5。
- 新增本地 TTS HTTP 网关协议:POST /tts,JSON {text, style},返回 WAV。
- CosyVoice2 网关已实测;CPU 上 8.7 秒语音约 60 秒生成。
- 本地后端支持风格/情感描述;失败明确报错,Edge 仍是默认快速回退。
- IndexTTS-2.5 选项已预留,模型服务尚未部署。
v1.9.3 明确语音/唱歌触发修复
- 修复“你唱首歌来听听”误提取歌名“歌来听听”导致唱歌失败、退回文字;无明确歌名时使用默认曲目。
- 修复“唱首小星星”这类没有“歌”字的点歌请求不被识别。
- 修复“说语音给我听听”这类语音请求不被识别。
- 明确要求语音/唱歌默认 100% 触发,可在语音页调低。
- 修正语音发送分支准入,普通语音概率为 0 时明确要求仍可发。
v1.9.2 RVC 试听临时目录
- RVC worker 输出改到模型目录下的 temp,避开 Windows/沙箱子进程不可写的用户缓存目录。
- worker 把 TEMP/TMP/TMPDIR 指向自己的可写目录,修复 ONNX 运行时报无可用临时目录。
- 试听失败会显示具体错误。
v1.9.1 试听与明确语音/唱歌
- 试听按钮会应用当前 RVC 设置(包括未保存的模型/设备/音调);失败时播放原音并提示。
- 明确要求发语音/说句话/听听声音时,按「被要求发语音概率」触发(默认 95%,100% 必发)。
- 明确要求唱歌/点歌/来一首时,按「被要求唱歌概率」触发(默认 90%,100% 必唱)。
- 修复模型自己选唱歌时 singChance 未生效的问题。
v1.9.0 RVC 模型库与 780M
- 语音页自动扫描模型目录,列出 .pth/.onnx + index;不再手填长路径。
- 加入模型列表、打开目录、刷新和去重;可添加多个模型随时切换。
- 运行设备切换:自动 / DirectML(780M)/ CPU;ONNX 自动走 DirectML worker。
- 音调、推理超时、最长音频改为滑杆。
- 新增 ONNX worker + onnxruntime-directml,780M 实测可转换中文语音。
v1.8.0 RVC 外部 worker 接口
- 可选 RVC:edge-tts 干音 → 外部 Python worker → 变声 WAV → QQ 语音。
- 语音和唱歌共用 RvcConverter;失败自动回退原音。
- 配置 Python、worker 脚本、模型/index、设备 auto/cpu/dml、变调、超时。
- 780M 核显优先用 DirectML worker;不追求实时。
- 未配置脚本/模型时不启用,不影响现有 edge-tts。
v1.7.1 引用图片与启动默认值
- 引用之前的图片时,用 get_msg 读取被引用消息里的图片,再交给视觉模型。
- 引用图片 + “这个是你吗/看看/评价”按直接对话处理。
- autoStart 默认改为 false:重启 DSH 不自动启动 QQ 连接,需在运行状态点“启动”。
v1.7.0 按群心情 v1
- 每个群独立心情 0~100 + 七根情绪,基线默认 70。
- 直接对话后短模型判断一次,实际变化除以 3;12 小时半衰期。
- 可信度不足/变化不显著/每日额度满时不注入。
- 注入只作背景,不写成命令;不因被冒犯降心情。
- 接话页可看心情、情绪、最近理由并重置。
v1.6.0 主动搭话 v2
- 概率命中线:峰/谷基础线 × 时机因子 + 没中加成。
- 刚聊过更难开口,冷太久更容易开口;安静时段不掷。
- 试运行默认开,只记账不发送;每轮只挑一个群。
- 保留旧版固定退避模式,可切换。
- 接话页新增参数面板和未中次数/试运行状态。
v1.5.0 记忆 v3
- 新增 memory-v3 数据层:鲜活度、重要度、情绪、事实键、来源。
- 普通事件会淡忘,长期事实不衰减;同一 factKey 只保留最新。
- 按证据稀有度召回,最多 6 条 / 800 字 / 长期事实 2 条(可调)。
- 旧 qq-memory.json 保留并迁移;新增 memory-v3.json。
- 每 12 轮(可调)自动提炼 1~2 条记忆,压缩时也写入。
- 记忆页支持 v3 条目新增/编辑/删除、召回统计。
v1.4.0 鲸鱼娘自拍照与隐式看图
- 在「表情包」页内新增 鲸鱼娘自拍照 库,独立于普通表情包;支持上传/删除/打开文件夹。
- “看看尾巴 / 看看你 / 爆个照”等在无附图时按自拍请求处理,按 per-group 自拍概率发送。
- 自拍概率 0~100%,100% = 有素材时必发。
- 自拍库为空时只按正常文字聊天含糊带过,不明说“我没有照片/图”。
- 有附图时“看看你/看看尾巴”优先识图,不会误发自己的自拍。
- 自拍触发词可在表情包页追加,按群生效。
v1.3.0 发表情包与唱歌概率
- 发图概率从「接话」移到「表情包」页靠前位置:
- 自动发图概率(模型想发时);
- 被要求发图概率(群友明确说“发个表情包/来张图/斗图”时);100% = 必发;
- 仍按仓库权重和上下文含义选图,inbox 的 0 权重不会绕过。
- 唱歌概率从「接话」移到「语音」页。
- 明确要图时按直接对话处理,不会被语音/唱歌分支抢走。
v1.2.2 日记修复
- 每条实际生成的回复都会写日记;模型没给 thought 时用占位内心记录,不再整条丢失。
- 兼容半损坏 JSON:从文本里抢救 thought 字段。
- 提示词强化“必须输出完整 JSON 且带 thought”。
- 日记页在打开时每 5 秒自动刷新。
v1.2.0 设置页排版
- 「用户画像」与「评分权重」改为分组卡片 + 自适应两列网格;
- 数字输入框固定 82px,右侧带单位,不再整行拉满;
- 按“关系语气 / 熟识度增长 / 好感度增长 / 敌意与衰减 / 初始好感 / 名单”分段;
- 说明卡片放在分组顶部,长文本与输入项不再挤在一起。
v0.2.2 用户画像
- 「名单」Tab 改名「用户画像」,熟识度/好感度相关设置全部集中到这里。
- 可调项目:首次/后续发言、被点名、她回复、接话、引用、敌意扣分、长期不互动衰减、主人/白名单初始好感。
- 每项都有独立每日上限,填 0 = 不限;支持小数。
- 增加关系语气说明卡片:明确各熟识度/好感度区间的语气差异。
- 关系评分加成上限也移到「用户画像」。
v0.2.1 新增
- 关系语气生效:熟识度/好感度现在会生成明确的语气指令(陌生→很熟、反感→亲近),不只是数字。
- 评分全参数可调:基础分(默认降到 15)、关键词/成员倍率、连续对话加成、@/引用/被冷落/单条/短消息扣分、关系加成上限、短消息字数。
- 明确看图请求:带图消息里说“看看/看一下/这张图/照片/这猫可爱吗”,即使没 @、没叫名字,也按直接对话读图。
- 语音概率:独立掷骰,不再依赖模型主动选 voice。
v0.2 新增
- 表情包多仓库:inbox / common / 自建仓库;每个仓库有发送权重(0 = 只手动用)、启用状态、默认入库设置;旧素材自动迁移到 common。
- 新图暂存与整理:新图默认进 inbox(权重 0),不会自动发出;可在 UI 里移动、删除、编辑含义,再放入常用仓库。
- 入库过滤:smart 模式跳过截图/大照片;支持全部保存;全局 SHA1 去重。
- 语音概率修复:回复语音概率改为独立掷骰,不再依赖模型主动选 voice;支持语音字数上限,TTS 失败自动回退文字。
- 上下文长度:在模型选择处按 provider/model 覆盖上下文窗口;按预算自动裁剪最近消息。
- 记忆 v2:可配置原始记忆条数/token 预算/摘要长度/压缩频率;压缩时自动抽取关键记忆(事实/偏好/关系/梗),原文可归档。
- 文件阅读:支持 txt/md/json/csv/代码、PDF 文本层、DOCX、XLSX;可配置触发条件、单文件 MB、最大字符数和每日上限。
- 合并转发:通过 OneBot get_forward_msg 展开转发记录;限制节点/字符数,嵌套只显示占位。
许可
- 插件代码:MIT,© 2026 SenuMirai。见 LICENSE。
- GPT-SoVITS 角色权重:CC-BY-NC 4.0,训练者标注为红血球AE3803、白菜工厂1145号员工;禁止商用、禁止二次配布;二创需标注训练者。
- 角色形象与语音:权利归米哈游;本项目仅用于非商业的个人使用。
- 仓库不包含模型权重;模型需自行下载并放在本地。
- RVC、CosyVoice2、Kokoro、IndexTTS 已从插件移除,不在本仓库依赖内。
Features
| Feature | Details |
| OneBot 11 / NapCat | WebSocket connection to NapCatQQ; reconnect, startup checks, optional auto-launch |
| 人格与模型 | 多张人格卡;按群绑定(一张卡可服务多个群),未绑定则跟随全局;服务商/模型、推理强度与回退可按群单独设置 |
| 主动聊天 | 独立标签页:聊天模式、空闲阈值、高峰/低谷命中线、时机因子、冷却、每日上限、免打扰时段、试运行模式、主动语音概率 |
| 主动 @主人 | 主动聊天时偶尔 @ 主人,用来抱怨、分享群内八卦或汇报成员情况;仅群聊生效,私聊禁用;概率、冷却与每日上限可配置 |
| 价值评分 v3 | 不是每条都回:@/叫名字/引用必回;普通聊天按关键词、成员、上下文、熟悉度、好感度与夜间惩罚打 0–100 分 |
| 冷启动逻辑 | 任何人类消息都会重置回复防抖与主动倒计时;群里有动静时她保持安静 |
| 私聊队列 | 生成过程中收到的 @/引用消息进入队列,绝不丢弃;主动消息让位于直接消息 |
| 成员档案 | 按群、按用户记录熟悉度 0–100 与好感度 -100–+100,由发言、提及、回复、连续性与敌意更新 |
| 日记 | 每次回复都记录上下文、评分理由与内心想法;thought 是第一个 JSON 字段;支持筛选、导出、删除单条/按人删除 |
| 表情包 | 自动收集群图片,AI 重命名/打标签,按上下文发送;数量与磁盘上限 |
| 语音 / 唱歌 | 仅支持 Edge TTS 与 GPT-SoVITS;GPT-SoVITS 内置 7 个 v2ProPlus 角色(三月七、银狼、藿藿、白露、虎克、青雀、克拉拉),带 7 个情感参考;支持试听与按群概率;已移除 RVC |
| QQ 空间 | 新标签页:手动 / 草稿 / 自动三种模式;可见范围默认私密;每日上限、最小间隔、自动概率;从当天日记生成草稿;发布前剥离链接与 QQ 号/群号;本地历史可删除 |
| 视觉 | 可选把真实 QQ 图片传给视觉模型:@ / 强上下文 / 观点类提问;支持本地路径与魔数检测 |
| 引用回复 | 目标消息与最新消息之间隔了别的消息时自动引用;可开关;文件/转发/语音跳过,引用失败则改发纯文本 |
| 省 token | 自适应上下文(自足消息少给几轮,有指代时给全量上下文)、contextTurns、记忆注入条数、心情/敌意开关 |
| 夜间免打扰 | 支持跨午夜时段;评分惩罚可配(0–100,默认 20) |
| 用量统计 | 按群、用途与模型统计 token 用量;图片/估算调用单独标记;日历、余额估算、费率校准 |
| 稳定性 | 事件/定时器/异步回复都有保护;从推理内容中提取 JSON、重试、可选回退模型 |
环境要求
- DeepSeek Harness 桌面版,或能加载插件的主机
- Node.js 22.12+、pnpm 9+
- NapCatQQ + QQ NT(推荐 Windows;Linux 上可用 NapCat Docker,QQ 登录需自行确认)
- 一个备用 QQ 账号,供机器人使用,且已加入目标群
- 可选:视觉模型、edge-tts(需要联网)、ffmpeg,用于部分音频转换
部署
1. 安装并登录 NapCat
1. 安装 QQ NT 和 NapCatQQ。
2. 用机器人账号登录。
3. 启用 OneBot 11,添加 WebSocket server:
- URL:ws://127.0.0.1:3001(默认)
- Access token:生成一个强随机字符串。
4. 确认 NapCat 显示 OneBot WebSocket 正在运行。
2. 安装本插件
git clone https://github.com/SenuMirai/dsh-qq-group.git
cd dsh-qq-group
pnpm install
pnpm run build
把目录链接进你的 DSH 配置档(或运行 dsh plugin --profile desktop add <absolute-path>):
// <DSH_HOME>/profiles/desktop/package.json
{
"dependencies": {
"dsh-qq-group": "link:/absolute/path/to/dsh-qq-group"
},
"dsh": {
"profile": {
"bundles": [
// ... other plugins
"dsh-qq-group"
]
}
}
}
重启 DSH。 出现「QQ Group」设置页,说明插件已加载。
3. 配置连接
DSH 设置 →「QQ Group」→「Connection」:
| 字段 | 示例 | 说明 |
| WebSocket URL | ws://127.0.0.1:3001 | NapCat OneBot WS |
| Access token | <YOUR_TOKEN> | 必须与 NapCat 一致;切勿提交到仓库 |
| Bot display name | LittleWhale | 她应答的名字;可用逗号分隔多个别名 |
| Owner QQ | <YOUR_QQ> | 用于识别主人和初始好感度;可为空 |
| Auto-connect | 开 | DSH 启动时自动连接 |
| Auto-launch NapCat | 可选 | 需要绝对路径的启动器 |
4. 启动
在设置里点「Start」,或在群里 @ 机器人。首次使用请运行「Health check」和「Model check」。
推荐设置
以下是起点,按你的群情况调整:
| 设置 | 推荐值 | 说明 |
| Chat mode | proactive | 被动模式只回应 @/名字;主动模式还会插话、发起冷场聊天 |
| Score threshold | 55–65 | 越高越挑剔;太低会很吵 |
| Reply chance | 0.15–0.35 | 分数通过后的第二次掷骰 |
| Cooldown | 20–45 s | 最小间隔;直接对话不受此限制 |
| Normal 10-min cap | 6–10 | 防刷屏;按群活跃度调整 |
| Direct 10-min cap | 20–40 | @/引用/接话单独计数 |
| Debounce | 6 s | 等群消息稳定;任何新消息都会重置 |
| Night DND | 23:00–08:00,penalty 20 | 夜里更安静就调高;0 表示关闭惩罚 |
| Vision policy | custom: @ + opinion questions | 最省钱又有用的默认值;确有需要再选 all |
| Voice chance | 0.1–0.3 | 太高会增加延迟和刷屏 |
| Sticker chance | 0.15–0.3 | 配合自动收集使用 |
| Fallback model | 同一服务商下可用的模型 | 兜底空回复/限流 |
模型建议:
- 文本:deepseek-v4.1-flash 或其他配额充足的模型。
- 视觉:选支持 text + image 输入的模型(如 deepseek-v4.1-flash、step-5-preview、多模态 MiniMax 模型)。
- 推理:聊天场景通常用 low 最合适;调高投入会增加延迟和 token 消耗。
- 用量历史按服务商/模型分别记录;余额是全局钱包的估算值。
设置布局
- 人设 / 模型:人设、模式、模型、推理投入、回退、用量/额度。
- 连接:OneBot URL、token、机器人名称、所有者、自动启动。
- 聊天频率(按群):阈值、关键词/成员概率、冷却、上限、爆发、语音/唱歌/表情概率、视觉策略。
- 允许 / 屏蔽列表:每行一个 QQ 号;允许列表抬高分数下限,屏蔽列表压低分数上限。
- 夜间:时间窗口和惩罚。
- 语音:语音、语速、音调、音量、预设、试听。
- 表情:自动收集、数量/MB 上限、视觉策略。
- 日记:筛选、导出、删除。
数据与隐私
| 路径 | 内容 |
| $DSH_HOME/dsh-qq-group/qq.json | 连接、群策略、语音/唱歌 |
| $DSH_HOME/dsh-qq-group/settings.json | 人设、模型、列表、夜间、视觉 |
| $DSH_HOME/dsh-qq-group/qq-memory.json | 按群记忆(每群 200 轮) |
| $DSH_HOME/dsh-qq-group/profiles.json | 按群成员档案 |
| $DSH_HOME/dsh-qq-group/diary.json | 日记(1000 条) |
| $DSH_HOME/dsh-qq-group/stickers/ | 本地表情 |
仓库里不含任何聊天记忆、日记、QQ 号、token、cookie 或用户路径;这些只存在于本地运行时。.gitignore 已排除数据文件。
回复逻辑(简版)
1. @ / 叫名字 / 引用 → 总是直接回复。
2. 其他消息经过 6 秒防抖后打 0–100 分:
- 基础 30 分;关键词/成员概率;同一个人接着说 +30;提到「你」+15;
- 熟悉度、好感度、@ 别人、被无视、夜间惩罚、单条消息惩罚;
- 允许列表下限、屏蔽列表上限。
3. 分数 ≥ 阈值 → 掷 score/100 → LLM 闸门(由近期上下文判断是否在跟她说话)。
4. 她回复后同一个人接着说:高概率候选,仍要过闸门。
5. 任何人类消息都会重置冷启动计时和主动发言倒计时。
视觉
表情页 →「视觉策略」:
- 关闭 / 自定义(多选)/ 所有图片。
- 自定义模式可以组合:@/name/quote、strong context、opinion question。
- 只有她真正回复且条件匹配时,才会下载图片并计费;没有 @ 的纯图片消息不会触发。
致谢
设计思路参考了:
- dsh-pet:插件/桌面宠物工程;QQ 模块后来拆分成这个项目。
- zaofan-make/dsh-qqbot:价值打分、人设、成员档案、上下文压缩。
- Jiangsubei/dsh-napcat-bridge:主动聊天、夜间免打扰、别名、记忆设计。
- NapNeko/NapCatQQ:QQ NT 的 OneBot 实现。
- OneBot 11:协议标准。
- rany2/edge-tts:免费、无需 GPU 的语音合成。
- sdfsfsk/matsuko_cover 和 dsh-cover-pipeline:唱歌/翻唱流水线的灵感来源。
- DeepSeek Harness:插件宿主、模型、附件、设置。
各项目保留自己的许可证;本项目只借鉴设计思路,不复制受限资源。
已知限制
- QQ 登录与风控由 QQ/NapCat 决定;本插件不绕过这些限制。
- 语音/唱歌需要 edge-tts 网络访问和本地音频工具。
- 视觉能力取决于所选模型;纯文本模型会回退到文本。
- 群消息会发送给所选模型服务商;请自行评估隐私影响。
- 遵守 QQ 规则和群规则;不要用于骚扰、垃圾信息或未经授权的自动化。
v1.14.0 GPT-SoVITS 后端
- 新增 GPT-SoVITS 后端;适配网关监听 50123,API 监听 9880。
- 网关把 POST /tts 转成 GPT-SoVITS 的 GET /tts,并返回 WAV。
- v1 基础模型跑在 CPU 上:短句约 2.4s;角色模型尚未训练。
- 参考音频是本地生成的女性声音;之后可换成训练好的角色模型。
v1.21.0 QQ 空间与七角色语音
- 新增 QQ 空间标签页:手动 / 草稿 / 自动三种模式。
- 可见性默认私密;可选好友或公开。
- 支持每日上限、最小间隔和自动概率;草稿取自当天的日记。
- 发布前剥离链接和 QQ 号/群号;本地历史记录支持删除。
- GPT-SoVITS 新增 Huohuo、Bailu、Hook、Qingque 和 Clara,共 7 个 v2ProPlus 角色。
- 语音只保留 Edge TTS 和 GPT-SoVITS;移除 RVC、CosyVoice2、Kokoro 和 IndexTTS。
- 日记滚动时加载全部条目;Save All 固定在每个标签页顶部。
v1.11.0 Kokoro GPU TTS
- 新增 Kokoro-82M 本地 TTS,用 ONNX Runtime DirectML 跑在 780M 核显上。
- 独立的 Kokoro HTTP 网关(默认 50122);短句约 6s。
- 语音后端列表新增 Kokoro;选中后自动填入 50122。
- Kokoro 支持中文内置音色(如 zf_005);自由描述情感时 CosyVoice2 仍更好。
- IndexTTS-2.5 选项继续保留;其服务仍未部署。
v1.10.0 本地 TTS 后端列表
- 语音标签页现在可在 Edge TTS / CosyVoice2 / IndexTTS-2.5 之间切换。
- 新增本地 TTS HTTP 网关协议:POST /tts,JSON {text, style},返回 WAV。
- CosyVoice2 网关已验证;8.7s 的语音在 CPU 上约需 60s。
- 本地后端接受风格/情感文本;失败会明确报错,Edge 仍是快速的默认选项。
- IndexTTS-2.5 选项保留;其模型服务尚未部署。
v1.9.3 语音/唱歌的明确修复
- 修复「给我唱首歌」提取出错误标题「歌来听听」并回退到文本的问题;没有标题时现在使用默认歌曲。
- 修复了「sing Little Star」不带「song」一词时无法识别的问题。
- 修复了「say it in a voice message」无法识别的问题。
- 明确指定语音/唱歌时,现在默认 100%,并且仍可配置。
- Fixed the voice-send gate so an explicit request still sends even when the normal voice chance is 0.
v1.9.2 RVC preview temp directory
- RVC worker output now goes to a temp directory under the model directory, avoiding unwritable user-cache paths in Windows/sandboxed child processes.
- Workers point TEMP/TMP/TMPDIR at their own writable directory, fixing ONNX no-usable-temp errors.
- Preview failures now report the concrete error.
v1.9.1 Preview and explicit voice/singing
- The preview button now applies the current RVC settings, including unsaved model/device/pitch; on failure it plays the original voice and reports why.
- Explicit "send a voice message / say something / let me hear your voice" uses the configurable requested-voice chance (default 95%, 100% = always).
- Explicit "sing / request a song / sing a song" uses the configurable requested-singing chance (default 90%, 100% = always).
- Fixed singChance not being applied when the model chose to sing by itself.
v1.9.0 RVC model library and 780M
- Voice tab scans the model directory and lists .pth/.onnx + index; no long paths.
- Model dropdown, open folder, refresh and dedupe; multiple models switchable.
- Device switch: auto / DirectML (780M) / CPU; ONNX automatically uses the DirectML worker.
- Pitch, timeout and max duration are sliders.
- Added ONNX worker + onnxruntime-directml; verified Chinese conversion on the 780M.
v1.8.0 RVC external worker
- Optional RVC: edge-tts dry audio → external Python worker → converted WAV → QQ voice.
- Speech and singing share RvcConverter; failures fall back to the original audio.
- Configure Python, worker script, model/index, device auto/cpu/dml, pitch and timeout.
- 780M iGPU can use DirectML; real-time is not required.
- Disabled when no script/model is configured; existing edge-tts is unaffected.
v1.7.1 quoted images and auto-start
- Quoted previous images are fetched via get_msg and passed to vision.
- Quoted image + “is this you / look / evaluate” goes through direct reply.
- autoStart now defaults to false: restarting DSH does not start QQ; use the Start button.
v1.7.0 per-group mood v1
- Each group has its own mood 0–100 plus seven dimensions; baseline 70.
- A short model judgement after direct replies; actual change divided by 3; 12h half-life.
- Low confidence / insignificant / daily cap means no injection.
- Injection is background only, never a command; insults do not lower mood.
- Chat tab shows mood, dimensions, latest reason and reset.
v1.6.0 proactive v2
- Probability hit line: peak/off-peak base × timing factor + miss bonus.
- Recent chat makes it harder; long silence makes it easier; quiet hours skip.
- Trial mode defaults on (log only); one group per tick.
- Legacy fixed-backoff mode remains selectable.
- Chat tab adds controls and shows misses/trial state.
v1.5.0 memory v3
- New memory-v3 layer: freshness, importance, emotion, fact keys, source.
- Events decay; stable facts do not. The latest item wins per fact key.
- Evidence-based recall, max 6 items / 800 chars / 2 facts (configurable).
- Legacy qq-memory.json is kept and migrated into memory-v3.json.
- Every 12 turns (configurable) extracts 1–2 memories; compression also writes.
- Memory page supports add/edit/delete and recall stats.
v1.4.0 selfie library and implicit visual intents
- Added a whale-girl selfie library inside Stickers, separate from the normal sticker repo; upload/delete/open-folder supported.
- "Show your tail / show yourself / send a selfie" without an attached image is treated as a selfie request and uses a per-group selfie chance.
- Selfie chance 0–100%; 100% always sends when an asset exists.
- With an empty library it replies as normal text and never says "I have no photo".
- When an image is attached, "look at you/tail" prefers image understanding and does not send a selfie.
- Extra selfie trigger words are configurable per group in the Stickers tab.
v1.3.0 sticker request and singing probability
- Image probability moved to the top of the Stickers tab:
- normal send probability when the model wants to send;
- requested-send probability when someone explicitly asks for a sticker/image; 100% = always send;
- still picks by repository weight and context; inbox weight 0 is still excluded.
- Singing probability moved from Chat to Voice.
- Explicit image-send requests are treated as direct, so voice/singing branches cannot consume them first.
v1.2.2 diary fix
- Every generated reply is now written to the diary; when the model omits thought, a placeholder inner note is stored instead of dropping the entry.
- Tolerant extraction of thought from partially broken JSON.
- Prompt now explicitly requires a complete JSON object with thought.
- The diary tab auto-refreshes every 5 seconds while open.
v1.2.0 settings layout
- User Profiles and Score Weights now use section cards with an adaptive two-column grid.
- Numeric fields are fixed at 82px with units, instead of stretching across the row.
- Sections: tone guide / familiarity growth / affinity growth / hostility and decay / initial affinity / lists.
- Explanation cards sit above each group; long text no longer crowds the inputs.
v0.2.2 User profiles
- Renamed the "Lists" tab to "User Profiles"; all familiarity/affinity settings live there.
- Editable: first/subsequent messages, mentions, replies, continuations, quotes, hostility loss, inactivity decay, initial owner/whitelist affinity.
- Each item has its own daily cap; 0 = unlimited; decimals supported.
- Added a relationship-tone explanation card for each familiarity/affinity band.
- Relationship score caps moved to User Profiles.
v0.2.1 additions
- Relationship tone now takes effect: familiarity/affinity produce explicit tone directives (stranger → very familiar, dislike → close), not just numbers.
- All score parameters editable: base (default lowered to 15), keyword/member multipliers, continuation bonuses, @/quote/ignored/single/short-message penalties, relationship caps and short-message threshold.
- Explicit image requests: with an image, “look at this / this photo / is this cat cute” is treated as a direct request even without @ or name.
- Voice probability: independent roll, no longer dependent on the model choosing voice.
v0.2 additions
- Multiple sticker repositories: inbox / common / custom repos, each with a send weight (0 = manual only), enabled flag and default-save setting; legacy assets migrate to common.
- Inbox workflow: newly saved images go to inbox (weight 0) and are never auto-sent; move/delete/edit descriptions in the UI, then move approved ones to a common repo.
- Save filtering: smart mode skips screenshots/large photos; keep-all mode available; global SHA1 dedupe.
- Voice probability fix: reply voice is now an independent roll, no longer dependent on the model choosing voice; max character limit and text fallback on TTS failure.
- Context length: per provider/model override; recent messages are trimmed to the budget.
- Memory v2: configurable raw turn/token/summary limits and compression interval; compression extracts key memories (facts/preferences/relationships/jokes); original turns can be archived.
- File reading: text/markdown/JSON/CSV/code, PDF text layer, DOCX, XLSX; configurable triggers, max MB, max characters and daily limit.
- Forwarded chat records: expand with OneBot get_forward_msg; node/character caps; nested forwards show a placeholder.
License
MIT, © 2026 SenuMirai. See LICENSE.
- Plugin code: MIT.
- GPT-SoVITS character weights: CC-BY-NC 4.0; non-commercial, no redistribution.
- Character likeness and voice rights belong to miHoYo.
- Model weights are not included in this repository.
dsh-qq-group预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
SenuMirai/dsh-qq-group
用于 DeepSeek Harness 的独立 QQ 群聊插件:人设、价值评分、记忆、日记、7 种角色…
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7