项目简介
QQSafeChat 是一个运行在 Ubuntu 系统上的 QQ 自动回复机器人,基于 NapCat 框架接入 QQ 消息收发,通过 DeepSeek 大模型生成智能回复。支持私聊自动回复、群聊 @ 回复、多人群切换、消息上下文记忆、回声消除等功能,并提供一键安装脚本和 systemd 服务管理,部署简单,开箱即用。
功能特性
- 私聊自动回复:智能应答好友私聊消息,支持白名单过滤
- 群聊 @ 回复:在群聊中被 @ 时自动回复,支持群白名单
- 大模型驱动:接入 DeepSeek API,也可切换 OpenAI、硅基流动等兼容接口
- 消息上下文记忆:每个会话独立存储历史记录,支持连续对话
- 多人群切换:预设多种聊天人格(话痨、粘人、温柔等),支持自定义
- 回声消除:自动过滤自己发出的消息,避免死循环
- 多消息分割:支持同时发送多条消息,模拟真人发条回复
- 随机回复延迟:1-3 秒随机延迟,回复行为更自然
- 管理命令:
!ping、!status、!help等命令在线管理 - WebUI 管理:NapCat 自带 Web 管理界面,可查看状态、管理配置
- 一键安装脚本:全自动部署,无需手动操作
- systemd 服务:支持开机自启、自动重启
系统架构
QQSafeChat 的整体架构由四个核心模块组成:手机 QQ 扫码登录、NapCat 桥接层(OneBot 协议)、QQSafeChat 机器人主程序(bot_main)以及 DeepSeek LLM API。数据流为:QQ 消息 → NapCat WebSocket → bot_main → LLM API → 回复发送。
所需环境
硬件要求
| 组件 | 要求 |
|---|---|
| 操作系统 | Ubuntu 22.04 / 24.04(64 位) |
| 内存 | ≥ 4GB |
| 网络 | 能访问 GitHub 和 DeepSeek API |
| 架构 | x86_64 |
软件依赖
- 运行环境:Python 3.8+,Node.js 18+
- 系统包:zip、unzip、jq、curl、xvfb、screen、g++、libnss3、libgbm1、libasound2
- Python 包:requests、websocket-client
- 核心组件:Linux QQ 3.2.23、NapCat 最新版
安装部署
方法一:一键安装(推荐)
# 解压安装包
unzip QQSafeChat-Ubuntu.zip
cd QQSafeChat-Ubuntu
赋予执行权限并运行一键安装脚本
chmod +x install.sh
sudo bash install.sh
安装脚本会自动完成以下操作:
- 安装系统依赖包
- 安装 Linux QQ 3.2.23 兼容版本
- 下载并编译 NapCat(含 napcat-linux-launcher)
- 安装 QQSafeChat 及其 Python 依赖
- 创建 systemd 服务(napcat.service + qqsafechat.service)
方法二:手动安装
1. 安装系统依赖
sudo apt update && sudo apt install -y zip unzip jq curl xvfb screen g++ python3 python3-pip libnss3 libgbm1 libasound2
2. 安装 Linux QQ
# 下载兼容版本 (3.2.23)
wget https://dldir1.qq.com/qqfile/qq/QQNT/9a841627/linuxqq_3.2.23-44343_amd64.deb
sudo dpkg -i linuxqq_3.2.23-44343_amd64.deb
sudo apt install -f -y
3. 安装 NapCat
sudo mkdir -p /opt/napcat && cd /opt/napcat
sudo wget https://github.com/NapNeko/NapCatQQ/releases/latest/download/NapCat.Shell.zip
sudo unzip -o -d napcat NapCat.Shell.zip
sudo wget https://raw.githubusercontent.com/NapNeko/napcat-linux-launcher/refs/heads/main/launcher.cpp
sudo g++ -shared -fPIC launcher.cpp -o libnapcat_launcher.so -ldl
4. 安装 QQSafeChat
sudo mkdir -p /opt/QQSafeChat && cd /opt/QQSafeChat
sudo cp -r /path/to/QQSafeChat/* .
sudo pip3 install -r requirements.txt
sudo mkdir -p history personas
启动服务
首次登录
NapCat 启动后会产生二维码图片,使用手机 QQ 扫码登录:
# 启动 NapCat(后台运行)
cd /opt/napcat
nohup ./launcher.sh > /dev/null 2>&1 &
查看二维码
ls /opt/napcat/napcat/cache/qrcode.png
或通过 WebUI 扫码
浏览器访问 http://服务器IP:6099/webui?token=YOUR_TOKEN
启动 QQSafeChat
# 确保 NapCat 已经启动并登录成功
# 然后启动机器人
cd /opt/QQSafeChat
nohup python3 bot_main.py > /dev/null 2>&1 &
使用 systemd 服务管理
# 启动
sudo systemctl start napcat
sudo systemctl start qqsafechat
开机自启
sudo systemctl enable napcat
sudo systemctl enable qqsafechat
查看状态
sudo systemctl status napcat
sudo systemctl status qqsafechat
查看日志
journalctl -u napcat -f
journalctl -u qqsafechat -f
配置说明
修改方法
所有配置通过编辑 JSON 文件完成,修改后重启服务生效。
DeepSeek API 配置
编辑 /opt/QQSafeChat/settings/openai.json:
{
"provider": "deepseek",
"api_key": "your_deepseek_api_key_here",
"base_url": "https://api.deepseek.com",
"model": "deepseek-v4-flash",
"temperature": 0.6
}
参数说明:
| 参数 | 说明 | 默认值 |
|---|---|---|
provider | LLM 供应商(deepseek/openai/siliconflow/mock) | deepseek |
api_key | API 密钥 | 必填 |
base_url | API 地址 | api.deepseek.com |
model | 模型名称 | deepseek-v4-flash |
temperature | 回复随机性(0-1) | 0.6 |
机器人配置
编辑 /opt/QQSafeChat/config.json:
{
"napcat_ws_url": "ws://127.0.0.1:3001",
"napcat_http_url": "http://127.0.0.1:3000",
"napcat_access_token": "",
"auto_reply": true,
"private_whitelist": [],
"group_whitelist": [],
"group_only_at_me": true,
"blacklist": [],
"reply_delay_min": 1.0,
"reply_delay_max": 3.0,
"split_delimiter": "<<<NEXT>>>",
"split_min_pause": 0.5,
"split_max_pause": 3.0,
"history_max_messages": 400,
"persona_file": "",
"command_prefix": "!"
}
核心参数详解:
| 参数 | 说明 | 默认值 |
|---|---|---|
napcat_ws_url | NapCat WebSocket 地址 | ws://127.0.0.1:3001 |
napcat_http_url | NapCat HTTP API 地址 | http://127.0.0.1:3000 |
auto_reply | 自动回复总开关 | true |
private_whitelist | 私聊白名单(QQ 号列表),空表表示回复所有人 | [] |
group_whitelist | 群白名单(群号列表),空表表示回复所有群 | [] |
group_only_at_me | 群里只回复 @ 机器人的消息 | true |
blacklist | 黑名单(QQ 号或群号列表) | [] |
reply_delay_min | 回复最小延迟(秒) | 1.0 |
reply_delay_max | 回复最大延迟(秒) | 3.0 |
persona_file | 人格文件(personas/ 目录下的文件名) | "" |
NapCat 配置
NapCat 的配置文件位于 /opt/napcat/napcat/config/:
webui.json:WebUI 端口和 token 配置onebot11_1550421257.json:OneBot11 适配器配置(WebSocket/HTTP 端口)napcat_1550421257.json:NapCat 核心配置
管理命令
在 QQ 中发送以下命令管理机器人:
| 命令 | 功能 |
|---|---|
!ping | 测试机器人是否在线(返回 pong ✅) |
!status | 查看运行状态(LLM 供应商、当前人格等) |
!help | 显示帮助信息 |
多人群系统
预设人格
personas/ 目录下包含多种预设人格文件:
| 人格文件 | 特点 |
|---|---|
| 真实朋友-基础 | 普通朋友式聊天 |
| 真实朋友-开心小狗 | 活泼热情风格 |
| 真实朋友-懒懒感 | 慵懒随意风格 |
| 真实朋友-话痨 | 话多爱聊风格 |
| 真实朋友-更粘人 | 粘人风格 |
| 真实朋友-话痨+高粘人 | 话痨加粘人组合 |
| 真实朋友-没有🚨 | 省略 |
| 真实男友-基础 | 男友风格 |
| 真实男友-可爱 | 可爱男友风格 |
| 真实男友-更粘人 | 粘人男友风格 |
| 默认人格 | 普通助手风格 |
启用人格
在 config.json 中设置 persona_file 字段:
{
"persona_file": "真实朋友-话痨.txt"
}
重启服务后生效。留空则不启用人格。
项目文件说明
QQSafeChat-Ubuntu/
├── install.sh # 一键安装脚本
├── README.md # 详细部署文档
└── QQSafeChat/ # 项目代码
├── core/ # 核心模块
│ ├── llm_client.py # LLM 客户端(支持 DeepSeek/OpenAI/SiliconFlow)
│ ├── napcat_bridge.py # NapCat OneBot 11 桥接层
│ ├── models.py # 数据模型定义
│ └── __init__.py
├── personas/ # 人格文件目录(多种预设)
├── settings/ # 配置文件目录
│ └── openai.json # LLM 配置
├── storage/ # 数据存储模块
│ ├── history_store.py # 对话历史管理
│ ├── persona_store.py # 人格文件管理
│ └── settings_store.py # 配置管理
├── bot_main.py # 主程序入口
├── config.json # 机器人配置
├── requirements.txt # Python 依赖
└── run.sh # 运行脚本
关键技术解析
消息处理流程
接收消息 → 消息过滤 → 回声消除 → 保存历史 → LLM 生成 → 发送回复
- NapCat 桥接层通过 WebSocket 接收 QQ 消息事件,解析消息段中的纯文本
- 消息过滤判断是否该回复(白名单、黑名单、@ 检测)
- 回声消除检查消息是否为自己刚刚发出的,防止死循环
- 历史记录按会话维度存储对话记录,格式化后作为 LLM 的上下文
- LLM 生成组装 system prompt + 人格设定 + 历史记录,调用 DeepSeek API
- 发送回复支持多条消息分割、随机延迟,模拟真人回复
回声消除机制
机器人发送消息后,NapCat 会通过 WebSocket 回传同样的消息。如果不加处理,机器人会以为自己收到了新消息,再次回复,形成无限循环。
个人网站
欢迎访问我的个人网站:mythlj2.lovestoblog.com/,了解更多项目与分享。