←新闻详情

腾讯云开发者社区更新于 10月27日 16:14

用暖屿和 DeepSeek 搭建会记事、会主动找人的 QQ 陪聊机器人

把 DeepSeek 接到 QQ 上:搭一个会记事、会主动找你的 AI 陪聊机器人

AI 导读

作者介绍用开源项目暖屿(Warm Isle)在自有服务器上搭建 QQ 陪聊机器人,DeepSeek 负责生成回复,NapCat 负责登录 QQ,人设、长期记忆和主动消息由暖屿实现。文中给出 Docker 部署、扫码登录、人设配置和记忆抽取的完整步骤,并列出内存占用、SQLite 备份、群聊默认不处理等实际踩坑点。项目采用 AGPL-3.0 许可,NapCat 与 SnowLuma 协议端禁止商业使用。

推荐理由

AI 评分 55

原文给出从部署到人设、记忆、主动消息的完整步骤和真实踩坑记录,可迁移到自建 Agent 项目。

主题

标签

正文

用开源项目 暖屿(Warm Isle) 从零搭一个跑在自己服务器上的 QQ 陪聊机器人: DeepSeek 负责说话,NapCat 负责登录 QQ,中间那层"人设 + 长期记忆 + 主动关心"是暖屿做的。

项目地址:

为什么不用"直接调 API + 转发消息"

如果你只是想让 QQ 里有个东西能回话,网上现成的转发脚本一大把:收消息 → 拼 prompt → 调 DeepSeek → 发回去,一百行代码搞定。

但真用起来会很快遇到三个问题:

它记不住你。每次对话都是白纸,昨天说过的过敏、前天提过的考试,全靠你自己重复。

它不是"一个人"。说话没有固定语气,一会儿像客服一会儿像 GPT,深夜还在问你"早安"。

它不会主动找你。你不说话它就永远沉默——而这恰恰是"陪聊"和"问答"最大的区别。

暖屿这套东西,本质上是把这三件事补上:人设、记忆、主动性。DeepSeek 只是它的"嘴"。

整体架构

暖屿:你自己写的业务层,负责人设、记忆抽取、主动消息、表情包、语音;

DeepSeek:只负责"根据上下文生成一句话"。

协议端和业务层是解耦的——今天用 NapCat,明天想换 SnowLuma 也行,业务代码不用动。

Ubuntu 22.04/24.04,2C4G 起。2G 内存跑不动(QQ + JVM + 图片预筛)

一个 QQ 小号

强烈建议用小号,别拿主号。机房 IP 有风控概率,先养几天

DeepSeek API Key

域名(可选)

有域名才能自动上 HTTPS;没有就先 IP + 强密码,别长期裸奔

一点 Linux 基础

会 ssh、会改文件、会看 docker logs

安全组只开 22 / 80 / 443。后台的 8080、协议端的 3001、预筛的 8081 一律不要对公网开放——它们都只绑 127.0.0.1,走 Caddy 反代出去。

第一步:装 Docker、拉代码

第二步:构建 jar

暖屿的后端是 Spring Boot,前端产物打包在 jar 里,所以要先构建一次:

服务器内存小、构建时容易 OOM,也可以在自己电脑上构建好,再 scp target/qqbot.jar 传到服务器的 /opt/qqbot-src/target/。

变量名必须是 QQBOT_WHITELIST 这种全大写、点换成下划线的形式,qqbot.whitelist 在容器里不会生效;

QQBOT_WHITELIST 留空 = 任何人私聊都会回,千万别这么上线;

BOT_NAME 可以改,默认叫「小满」。

第四步:起容器

正常应该是四个容器 running:qqbot、napcat、imageguard、caddy(还有内部的 wsproxy、searxng)。

图片预筛 imageguard 需要三个 ONNX 模型(clip_vision.onnx / clip_text.onnx / nsfw.onnx)。没有模型它会起不来,而没有它所有图片都会被判为敏感、一律不回。模型怎么来见 deploy/linux/README.md:从现成环境拷贝,或者用 guard/export_onnx.py 自己导出。

浏览器打开 http://你的服务器IP/,用 .env 里的 ADMIN_PASSWORD 登录后台。

进「机器人账号」→ 点「扫码登录」→ 后台会显示协议端容器里 QQ 的登录二维码 → 手机 QQ 扫码 → 账号状态变成「在线」。

这一步是整个流程里最容易出问题的地方,记住两个现象:

显示「在线」但发消息不回:说明协议端连着、但 QQ 掉登录了。点「刷新二维码」重新扫;

扫码后过几小时又变离线:多半是 QQ 把设备踢了。项目里的看门狗会每 5 分钟检查一次、掉线发邮件(需要配 SMTP_*),并在「连得上但没登录」时只发二维码、不反复重启容器——因为反复重启会把二维码冲掉。

第六步:给它一个人设

后台 →「人设」→ 新建。可以手写,也可以「从知识库生成」:

上传一段小说/聊天记录 → 解析类型选「生成人设」→ 它会提炼出说话风格;

也可以选「台词风格」,只学语气不学内容。

人设不是越详细越好。实测最影响"像不像人"的是这几条:

第七步:配记忆和主动消息

记忆:每天中午自动抽取一次(时间可在后台改),把对话提炼成「事实卡」和「摘要」,下次聊天自动带上。按「机器人账号 × 聊天对象」隔离,不会串台。

主动消息:默认 23:30–08:00 静默、每天最多 3 条、两条间隔不少于 2 小时。触发优先级是:跟进到期 > 早安 > 晚安 > 沉默超过 6 小时。

主人 QQ:在账号页填上你自己的号,只有这个号能让机器人改昵称/换头像。

第八步:验证

用白名单里的号给机器人发一句:

正常会收到 1–3 条短句,而不是一大段。如果没反应,按顺序查:

可选:换成 SnowLuma 当协议端

暖屿现在支持两种协议端,后台新建账号时可以直接选:

NapCat:成熟、社区大、二维码落盘,后台直接显示;

SnowLuma:较新,自带 WebUI/远程桌面,单实例能多开账号,但吃内存(单账号常驻 300MB–1.2GB)。

切换方式:账号卡片 →「切换接入」→ 选另一个 → 会重建协议端容器,聊天记录和记忆不动,切换后重新扫码即可。

同一条 OneBot v11 协议,业务层完全不用改。

几个真实的坑

内存要给够。3.6G 的机器上,图片预筛一个人就吃 1.2G,JVM 768M,协议端 300M 起。开第二个号之前先看「关于」页的内存。

后台没有 HTTPS 之前,密码是明文传输的。要么等备案上域名(Caddy 会自动签证书),要么至少换成 32 位随机串。

SQLite 要备份。聊天记录和记忆全在 data/qqbot/ 下的几个 .db 里,机器一挂就全没了。加一条 cron 每天打包到别的机器。

群聊默认不处理。当前只处理私聊——想让它进群,得自己改 MessageDispatcher 的路由和 @ 判定。

关于合规

暖屿是 AGPL-3.0 开源项目,可以自用、可以改、可以部署;对外提供服务时注意 AGPL 的传染性。

协议端不是开源许可:NapCat 与 SnowLuma 都明确禁止商业使用,商用需要单独授权。

最后

这套东西我跑了几个月,最深的体会是:模型能力早就不是瓶颈了,难的是"像个人"。

同一句「晚安」,DeepSeek 能写出二十种说法,但真正让人觉得"它记得我"的,是它知道你今天面试、知道你昨天没睡好、知道这个点你该睡了——这些都不在模型里,在记忆和时机里。

项目还在长,欢迎来提 issue 或者直接 fork:

来源

腾讯云开发者社区