Repository navigation
Releases: adj18311/qq-bridge-plus
Release list
qq-bridge-plus v1.1.0适配dsh0.2.1 · 贴吧功能+模型管理器+模块化代码
QQ Bridge 1.1.0 发布说明
这是什么
把一个 QQ 账号接到 DSH 上,让它在群里和私聊里像个人一样聊天:会潜水、会接梗、会自己决定什么时候说话。网关用 SnowLuma(OneBot v11),模型走 DSH 的 provider 配置。
能跑在哪
只在这一个组合上做过实机验证:
- Windows 11 x64
- DSH Desktop 0.2.1-rc.2
- SnowLuma 网关,OneBot v11
DSH 0.20、macOS、Linux 都不支持。0.20 在本版改动之后没有再跑过回归,macOS 和 Linux 从没上过真机。范围细节见 docs/COMPATIBILITY.md。
解压:请用 7-Zip 或 Bandizip
包里有 7 个中文文件名(人格卡、模型管理.bat、assets/deepseek娘.png)。Windows 自带的"全部解压缩"对 zip 的编码支持很差,很可能把中文名显示成乱码。7-Zip、Bandizip、WinRAR 都正常。
解压路径建议用纯英文、不带空格,比如 D:\qq-bridge。带中文或空格的路径下 start.bat 和部分命令行调用容易出问题。
全新安装
- 解压到上面说的那种路径;
- 在该目录执行
npm ci。必须先装依赖,直接npm start会在 import 阶段失败; - 从
config.example.json复制一份config.json,填 SnowLuma 地址、token、DSH 端点等。包里不带 config.json,缺这个文件启动会直接报错退出,这是有意的; node scripts/setup-dsh.mjs,把预设和 MCP 挂进 DSH;- 重启 DSH Desktop;
- 双击
start.bat。后台会有一个守护窗口,别关它。
从 1.0.0 升级
先说结论:你的记忆和会话不会丢。 对话历史存在 DSH 那边(~/.dsh 下的会话文件),不在这个发布包里。升级包覆盖不到它。
真正决定"它还记不记得你"的是两个文件:
state/sessions.json:QQ 会话到 DSH 会话的映射。丢了它,DSH 里的旧会话还在,但桥接不知道去哪找,会开新的;state/social-v2.json:它对群友的印象、进行中的话题、待说未说的话。丢了这些,等于把社交记忆清空。
所以升级的核心动作就是保住这两个文件,其余都可以覆盖。
具体步骤:
- 停桥接。在守护窗口里按 Ctrl+C,或者关掉那个窗口,别只关桥接本身;
- 备份四样东西到发布目录之外,比如
D:\qq-backup-1.0.0\:config.jsonstate\整个目录(含上面那两个文件)roles\(你改过的人格卡)audio\(语音库,如果放了东西)
- 把新包解压到一个新目录,比如
D:\qq-bridge-1.1.0。不要直接覆盖旧目录——万一出问题,旧目录还能原样跑回去; - 在新目录执行
npm ci; - 把第 2 步备份的
config.json、state\、roles\、audio\复制进新目录; - 重新跑一次
node scripts/setup-dsh.mjs。这一版改过人格预设(见下面"改了什么"),不跑这一步新规则不会生效; - 重启 DSH Desktop;
- 在新目录双击
start.bat。
验证是否升级成功:
- 在群里发一句"骂我一句",它应该照骂、不说教,这是新预设生效的标志;
- 问它一件升级前聊过的事,它应该还记得,这是
state\迁过来的标志。
升级完成后,旧目录确认没问题再删。想回滚,就把旧目录的 start.bat 重新跑起来,配置和状态都还在里面。
这一版有什么(相对 1.0.0)
贴吧:它自己会去逛
新增了贴吧页面读取。它能列吧里的帖子、读某个帖的正文和回复、翻多页,楼层里的图也能看(一次最多 10 张、单张 4MiB 以内、一次合计 25MiB 以内,超了会如实说"另有 N 张未取")。支持可选 Cookie,想要登录态就把 Cookie 放仓库外,配置里只写路径。
它不是定时任务。逛不逛取决于它那一轮想不想去,代码里没有 setInterval。但额度卡得很死:
- 每天最多 12 次自主访问,按自然日重置;抓一次吧页列表算一次,读一条帖(哪怕读了两页)也算一次;
- 01:00–08:00 不主动逛,这个时段只做你明确让它做的事;
- 一次自主读帖最多看前两页,想往后翻得先问你一句,你点头才继续,那部分不占当天次数;
- 你明确让它去("去原神吧看看")时,次数、时段都不限,但底层抓取节流照旧。
被百度安全验证拦住时它会认出来(不当成"这吧没有帖子")、如实说被拦了、顺手跑一次网页搜索并在结果里标注"来自网页搜索,不是贴吧原页",然后停手冷却 10 分钟,不一遍遍撞同一堵墙。
看完不一定说。没值得说的就安静待着,不为了刷存在感发言;好东西记下来带上帖子 id 去重,等话题合适了再带出来。别人的手机号、住址、身份证、聊天截图、群友照片,以及血腥暴力的真实照片和细节描写,这两类不往群里搬,真该让管理员知道就只在私聊里说一句。
模型管理:双击就能切
新增 模型管理.bat,双击进交互式界面,按会话选模型,可选列表从 DSH 的模型目录里读,不用再翻 config.json 手改字段。
任何在 DSH 桌面版里配置成功、能在模型目录里列出来的第三方 API 模型,都能在菜单里看到并切过去——它不维护自己的白名单。切换前会校验、备份 config、原子替换;推理强度跟着模型一起走,该模型不支持时会回落到它自己的默认值。
DSH 0.2.1 适配
长等待、安装脚本的版本门控、CLI 自动定位都在这一版里。DSH Desktop 的 GUI 换端口后,桥接会自动跟随,不用再手改配置(也可以用 dsh.autoDiscoverDesktop=false 手动固定)。
错误提示:不再把原始 JSON 发进群
上游报错会先分类,再给固定文案,原始错误只写日志:
- 529 / 过载 / "负载较高" → 「
⚠️ 模型服务这会儿有点挤,我过一会儿再试。」 - 429 限流 → 「请求过于频繁,请稍后再试」
- 401 / 403 / 鉴权失败 → 「
⚠️ 模型鉴权出问题了,需要检查配置。」 - 其他 → 「
⚠️ 处理出错了,细节记在日志里。」
同一会话同一类错误 5 分钟内只提示一次,避免刷屏。
另外会观察 DSH 的 529/503 重试事件:第三次重试失败回「等一下,有点卡」,第五次回「请联系管理员修复」。桥接只记日志和提示,不自行重放整个回合,以免重复执行工具、重复发消息。
代码结构
唤醒、回复节奏、校验、人格文本、图片解析、控制台入参这些规则拆进了 src/core/,各自带回归测试。那个八百多 KB 的 bridge.js 不用每次从头读了。
这一版改了什么
- 群聊回复更快:群聊里的静默等待缩到 3 秒,先看这条新消息再决定接不接话。
- 群友骂它的时候会回嘴了。之前安全规则里写着"人身攻击不能发群",和人格卡里"让你骂就骂"直接打架,模型选择了服从前者。现在规则改成只有他人隐私和暴力内容不能发群,骂脏话、互怼、损人交给人格卡决定。
不包含什么
- 模型额度耗尽的提醒和请求保护功能,这版冻结了。额度类错误不会单独识别,普通 429 按限流处理。
- 任何 DSH 0.20 的兼容承诺。
已知问题
- 没有
config.json时是 fail-fast 报错退出,不会引导你去复制示例文件。第一次装的人容易卡在这一步。 - 没有全局的 offline / dry-run 开关。想在不连网关的情况下试启动,只能把
snowluma.wsUrl指向一个没人监听的端口,并且关掉followDiscoveredEndpoint,否则自愈会把地址改回真实端点。 - 非正常退出(强杀进程)会留下
state/bridge.lock,里面是死掉的 PID。下次启动前删掉这个文件即可。 npm ci会报 3 个传递依赖的漏洞(1 moderate / 1 high / 1 critical),本版没有处理。- 给开发者:部分测试在缺依赖或缺外部工具时会静默跳过,退出码仍是 0。看到全绿不等于全覆盖,具体跳过项看各测试自己的输出。
校验
zip 的 sha256 写在同目录下的 .sha256.txt 里,下载后先核对再解压。
sha256 af09a45a6f588724be1194c7bbb866f3267690823285759709b7084790cc2150
v1.1.0更新预告(2)
1.1.0更新预告(3)
v1.1.0更新预告
v1.1.0更新延期
DSH 0.2.1 更新后,上游 qq-bridge 已收到事件流连接异常和 Preset 兼容性问题报告。qq-bridge-plus 当前仍处于模块化整理阶段,尚未完成新版 DSH 的完整适配测试。因此,v1.1.0 将调整开发优先级,优先解决兼容性问题,再推进已预告的模型管理器和贴吧功能。我会尽快推出兼容DSH0.21的版本,预计命名为v1.0.1.
qq-bridge-plus v1.0.0 · 卡忙自愈 + 跨会话代发
先说清楚:这不是原创项目,是基于 Derpyu520 的 qq-bridge 二次创作,MIT 许可,保留原作者署名。
前几天那条 1.0.0 预告里说的三件事,现在都做完了。
一是"会话卡忙"。 我当时的原话是"能不能彻底治好,现在有个大概思路"。治好了,而且根因比我猜的朴素:user/message、compaction/、session/end-seed、step/ 这些不属于任何回合的帧,以前会顺手建出一个永远等不到 turn/end 的 collector,会话就被判成一直忙。现在只有 turn/start 建 collector,忙的判据也改成问"还有几个回合没收尾"。
顺着这条线还挖出两个一路带下来的毛病:中途接入事件流或者断线丢帧的时候,turn/end 到了却找不到对应回合、什么也不做(issue 11 的第二个缺陷);还有手里押着一个活着的回合时,来一条更老的 turn/end 会把它关掉,那一轮的回复随后就丢了。
二是"断连之后别哑火那么久"。 我当时说"希望能缩短,但具体能做到多少我不确定"。做法是断流那一刻给在途回合拍一份快照,重连成功后按快照清掉失效标记,并把断连期间被暂存的唤醒重新排上;再加一条静默探测,沉默满 30 秒就去问一次 DSH 的会话列表,只在它明确回答"没有在跑的回合"时投一票,连续两次确认才释放,回答"还在跑"就不动手。
实测那个哑火窗口从 15 分钟降到 2 秒上下。
三是跨会话代发。 按当时说的只给管理员,而且做得比较保守:只有管理员在自己私聊里点名的那一轮才能发,只放开三个文本发送端点;授权挂在承载这封来信的那次唤醒上、按来信 seq 严格匹配,别的唤醒截不了胡;回合结束或者 30 分钟墙钟到点就失效;每笔都写 [cross-session] 审计,记授权人、来源、目标、条数和端点。表情和语音跨会话仍然会被拒。
另外那几个"排在后面"的小的也收拾了:看门狗 WARN 从每 10 秒一条改成按档位跃迁去重(实测原来 10 分钟能刷 42 行,现在一个忙周期一行);黑话清单给最近确认或编辑过的词条留几个位置(默认 5 条),刚确认的新词不会再被高频老词挤没;表情从"大约每 3至5 轮一张"改成"平均每 2至3 条发言配一张"。
怎么装
前置是 DSH、SnowLuma(OneBot v11)和 Node.js 22.13 或更高。
压缩包里带了依赖,解压后把 config.example.json 复制成 config.json,填好令牌和端口,双击 start.bat。要是你手上的包里没有 node_modules,先跑一次 npm ci,别加 --omit=dev。DSH 那一侧还要装 preset、挂 MCP,步骤在 docs/guides/DSH_SETUP.md。
从 0.3.1 升上来
config.json 不用改,0.3.1 那三项 verify 修复也在这一版里。想用静默探测就加上 socialV2.busyWatchdog.silenceProbeMs(默认 30 秒,设 0 关闭);看门狗的阈值是启动时读的,改完要重启桥接。
还是没治好的
只有 promptQueues 卡住(其它三条忙判据都为假)时没有自愈路径,只能记日志,人工重启或者切一次模式
合法长回合零帧满 15 分钟会被释放。最坏结果是同一轮重复回一次,不丢消息。不想要这个取舍,把 socialV2.busyWatchdog.enabled 设成 false
QQ 客户端重启后需要重新注入 hook。桥接能观测到上游不健康并在控制台告警,但不会去动 SnowLuma
关机或者休眠期间的消息不会补投
privacy-scan 的内置规则没带 g,同一个文件只报第一条命中,结果偏乐观,留到下一版
有意见,或者觉得哪里该改,直接在这条下面说。
1.0.0更新预告
预计在10-11月发布1.0.0版本,目前有以下打算。
一是想从根上解决"会话卡忙"。现在会话一旦被判忙,就只剩手动重启桥接这一条路。我自己就经历过,尤其是开完机就上床躺着的时候突然发现机器人不理我了,不得已只能跑下去手动重启。上游那个 issue 挂一段时间,这次想找真正的原因,而不是继续往上加兜底。能不能彻底治好,现在有个大概思路,感谢老哥在上游issue#23提出的宝贵意见。
二是断连之后别哑火那么久。DSH 断一下线,现在有十几分钟是完全不理人的。我希望能将这个时间尽可能的缩短,但是具体能做到多少我不确定。
三是跨会话代发,这个功能我一直挺想加的,虽然说可以自己登号操作,但是始终感觉挺膈应的,并且这个权限我打算只给管理员。管理员这块涉及权限,做的时候会保守一点,宁可少放开,也一定要杜绝权限泄露的情况。
另外有几个小的打算顺手收拾:看门狗日志刷屏、黑话清单里刚确认的词被高频旧词挤出去、表情发得太少太像人机。不过这些都要排在后面,最后来解决。
有意见,或者觉得该先做别的,直接在这条下面说。我会考虑是否采纳。
Full Changelog: v0.3.0...1.0.0
v0.3.1: 验证脚本修复(不再依赖 DSH 安装目录里的 dsh-persona)
修的是验证脚本,桥接自身的运行逻辑没有改动。
两个校验脚本不再因为找不到 DSH 的包而崩
npm run verify:adaptation 和 npm run verify:persona 都要拿 @deepseek-ai/dsh-persona 的 schema 去校验 preset。它们原先只去 DSH 安装目录里翻这个包。新一点的 DSH 把它连同其它内部包一起收进了 app.asar,磁盘上根本没有可加载的路径,于是两个脚本直接以「找不到模块」退出。
这不是你的 DSH 装坏了,是脚本假设得太多:它默认 DSH 的内部包一定躺在磁盘上。
现在的顺序是,先在 DSH 安装目录里找,找不到就退回仓库自己固定版本的依赖(@deepseek-ai/dsh-persona@0.2.0-rc.2,和本仓库适配的那版 DSH 对齐)。两边都取不到时,verify:adaptation 把这几项标成跳过并写清原因,不再整个崩掉。
另外两处假报错
mcp 路径指向本仓库 这条断言原先只看路径里有没有 qq-bridge 这个目录名,仓库目录叫别的名字就会红,现在改成跟当前仓库根路径比较。
verify:adaptation 原先会直接读 config.json。干净克隆里只有 config.example.json,所以一跑就崩。现在缺这个文件时跳过那条模型检查。
0.3.0 的版本身份本来就是错的
package.json 写着 0.3.0,但两个插件和三个 MCP 服务里还是 0.2.0-r3。那几条「版本必须一致」的自检在 0.3.0 上本来就是红的。这次一并对齐到 0.3.1。
自己验一遍
npm ci # 不要加 --omit=dev,校验用的依赖在 devDependencies 里
node scripts/verify-persona-config.mjs # 不需要 DSH 在跑
npm run verify:adaptation # 需要 DSH 在跑,默认连 127.0.0.1:3080从 GitHub 克隆 v0.3.1 之后实测:npm ci 通过,verify-persona-config 全绿,verify:adaptation 在 DSH 接线的那份仓库里 72 项通过、0 失败。如果你从另一份 checkout 跑,会看到两三处失败,那些检查说的是本机 DSH 的配置,不是仓库的问题。
要你动手吗
不用。配置不用改,桥接不用重启。想复现验证的话,重装一次依赖就够了。
详细说明见 UPDATE_LOG.md,逐条技术记录见 CHANGELOG.md。
v0.3.0 — 基于上游 v0.2.0-r3 的改进版:卡忙自愈看门狗 · 跨会话共享记忆 · 记忆快照回滚 · 主动机会时间窗
qq-bridge-plus v0.3.0 基于上游 Derpyu520/qq-bridge v0.2.0-r3 的改进版(二次创作,非原创;特别鸣谢原作者)。 适配 DSH 0.2.0-rc.2。 相对上游的六处改动: - 卡忙自愈看门狗(忙态卡死自动释放 + 积压唤醒重排) - 跨会话共享记忆(话题 / 人物印象跨群与私聊共享) - 记忆每日快照与回滚 - 控制台记忆快照面板 - 主动机会时间窗(activeHours) - 三处加固(快照端点管理端校验、start.bat 守护修复、快照写失败不再静默) 完整清单见 CHANGELOG.md;细节见 docs/guides/BUSY_WATCHDOG.md 等。





