把大模型
接入QQ的
安卓Bot
除「调用大模型 API」和「QQ 收发消息」需要联网外,其余全部在手机本地运行, Linux 环境、QQ、NapCat 都装在 App 私有目录里,不依赖电脑,也不需要 root。
技术原理
从 proot 用户态根文件系统,到注入式 NapCat 与 OneBot 回环服务,再到唯一一次对外的模型 API 调用 —— 这一节拆开 B-bot 的每一层。
1.1整体架构
手机 App(前台服务)
|
|-- proot(用户态 chroot)
| |
| +-- Ubuntu 22.04 arm64 根文件系统
| |-- Xvfb 虚拟显示(无界面运行 QQ)
| |-- QQ NT (Linux arm64)
| +-- NapCat(注入 QQ 进程内,起 OneBot 服务)
|
|-- OneBot v11 WebSocket ws://127.0.0.1:3001(仅监听回环)
|
+-- 消息编排 -> LLM 客户端 -> 厂商 API(唯一的外部调用)
所有组件都在 App 私有数据目录内,独立于系统;监听端口只绑 127.0.0.1,外部无法访问。
1.2为什么能在非 root 手机上跑 Linux
安卓没有 root 就不能 chroot。App 内置 proot:它用 ptrace 拦截程序的系统调用,把路径、uid、挂载点「翻译」成普通目录,于是 Ubuntu 的 arm64 根文件系统可以以普通应用身份直接运行。
两个必要的配套
targetSdk 固定为 28
Android 10 起,targetSdk ≥ 29 的应用禁止从自身数据目录执行可执行文件(W^X 策略),proot 会直接报 error=13 Permission denied。保持 28 即可获得与 Termux 相同的兼容模式。
proot-loader
guest 程序需要的动态链接器与应用目录不同,必须通过 PROOT_LOADER 指定外部加载器,否则会出现 execve("/usr/bin/env"): No such file or directory。App 已内置并自动配置。
1.3QQ 与 NapCat 是怎么跑起来的
官方 Linux arm64 版本
QQ 使用官方 QQ NT Linux arm64 版本(deb 解包后放入 rootfs),运行在 Xvfb 虚拟显示上,因此不需要屏幕也能登录。
以「注入」方式工作
把 QQ 的 resources/app/package.json 中 main 指向外部入口 loadNapCat.js,该入口先加载 NapCat 模块,再按原路径启动 QQ。OneBot 服务运行在 QQ 进程内部,能直接收发消息,而不需要改动 QQ 本体。
自动生成 OneBot 配置
首次启动会生成 OneBot 配置:
1.4一条消息的完整链路
私聊:始终回复 · 群聊:按设置「仅被 @ 时回复」或「持续主动回复」
send_msg 发回 QQ图片、语音等内容不会被上传到除模型 API 之外的任何地方;App 本身不含任何统计或上报。
1.5模型接入方式
支持两种主流协议,因此兼容绝大多数厂商:
OpenAI 兼容
Anthropic
内置厂商预设
「自定义 OpenAI 兼容」可填任意中转地址。API Key 只保存在本机 SharedPreferences,不会上传。
如何使用
六个工序:装 App → 装环境 → 登录 QQ → 配模型 → 设人设 → 日常使用。每一步都有明确的完成标志。
安装 App
安装 B-bot-v1.1.1.apk(约 5.9 MB)。
- 首次打开请允许通知权限(用于显示运行状态的前台通知)
- 建议在系统设置里给 B-bot 开启:自启动 / 后台不受限制 / 忽略电池优化,否则息屏后系统可能冻结它的进程
安装 NapCat 环境(仅首次)
首页点击「安装 / 重装 NapCat」,确认后开始下载并解包:
- 内容:Ubuntu 根文件系统 + QQ + NapCat,约 500 MB
- 耗时:视网络,通常几分钟
- 不中断:安装期间可以切到设置页、日志页,安装不会中断,切回来还能看到进度
完成后首页「napcat」状态会变为已就绪(深蓝)。若显示「未安装」或「安装中」,看日志页的失败原因(多为空间不足或网络中断)。
需要至少 2 GB 可用空间;建议在 Wi-Fi 下进行。
启动并登录 QQ
- 首页点「启动 B-bot」
- 等待几秒,状态中「bot服务」变为运行中
- 点「扫码登录 QQ」,弹窗会显示二维码
- 用手机 QQ(或另一台设备)扫码并在 QQ 里确认登录
- 登录成功后,首页「QQ」状态变为 已连接 (QQ号)
二维码约 1~2 分钟过期。NapCat 会自动换新码,弹窗会跟随刷新,直接扫最新那张即可。
配置模型
进入「设置」页:
- 选择厂商(例如 MiMo、DeepSeek、Gemini…)
- 填写 API Key
- 点击「拉取模型列表」
成功:下拉框出现该账号真实可用的模型,直接选择
失败:会提示具体原因(如 401 表示 Key 不对) - 也可以不拉取,直接在「自定义模型名」里手写模型 ID
- 点「保存设置」,会提示「生效模型:xxx」
自定义输入优先于下拉选择;两者都为空时使用该厂商的默认模型。
设置角色与回复策略
同样在设置页:
- 角色提示词:决定 bot 的人设、语气、说话方式。留空则使用默认的「友善群聊助手」提示词。
- 群聊回复策略:
· 仅被 @ 时回复 —— 安静,只有被点名才说话
· 持续主动回复 —— 群里每条消息都会参与 - 私聊:始终主动回复(无需设置)
- 历史:本地保存,可在设置页「清空全部会话历史」重置
保存后立即对下一条消息生效。
日常使用
- 停止:只停止 bot 的收发。NapCat 进程和 QQ 登录状态都会保留,再次点「启动 B-bot」只需几秒重连,不需要重新扫码。
- 日志页:实时查看 QQ / NapCat 输出、模型调用、收发结果与错误;发送失败会打印 NapCat 返回的
retcode,便于排查。
运行状态灯含义
R 已就绪L 安装中N 未安装R 已登录N 未登录R 收发运行中L 已停止收发(NapCat 仍在跑)N 未启动特色
真正本地、无需 root、不碰账号密码 —— 以及十个让它日常好用的细节。
- 01
真正本地运行
Linux 环境、QQ、NapCat 全部在手机内,不依赖电脑或服务器;唯一对外请求是模型 API。
- 02
无需 root
基于 proot + 兼容模式,普通应用即可跑完整 Ubuntu 与 QQ。
- 03
扫码登录,不碰账号密码
App 不保存 QQ 账号密码,登录完全由 QQ 官方客户端完成。
- 04
10 家厂商 + 自定义
两种协议自动适配,OpenAI 兼容的任意中转地址都能填。
- 05
一键拉取模型列表
不用去翻文档找模型 ID,选完即用。
- 06
智能回复策略
私聊始终回、群聊可「仅 @ 回复」或「持续主动」,一键切换。
- 07
可自定义人设
角色提示词完全自由,支持多轮上下文。
- 08
停止不退出
停止只停收发,QQ 保持在线,避免每次重启都要重新扫码。
- 09
安装不中断
环境安装独立于界面运行,切页面不影响。
- 10
可读日志
二维码、错误码、收发记录都直接显示,出问题能自己看明白。
常见问题
先看日志,再看状态灯。下面七条覆盖了绝大多数情况。
Q1能收到消息,但 bot 不回复?
先看首页「bot服务」是否为运行中;再看日志页是否有「API 调用失败」或 retcode。常见原因:API Key 错误、余额不足、模型 ID 不存在,或群聊设置为「仅被 @」而消息里没有 @ 它。
Q2首页 QQ 一直显示未连接?
确认「napcat」是否已就绪、QQ 是否扫码登录成功。bot 会自动重连,等 10~30 秒通常可恢复;若仍不行,点一次停止再启动。
Q3二维码显示不出来或扫了没反应?
二维码约 1~2 分钟过期,弹窗会自动换新码,请扫最新显示的那张。若弹窗一直空白,等 NapCat 启动完成(日志出现二维码相关行)再打开。
Q4安装失败?
看日志页错误。多为可用空间不足(需 ≥ 2 GB)或网络中断;重试「安装 / 重装 NapCat」即可。
Q5安装 APK 时提示「解析软件包出现问题」?
先卸载旧版再安装;并用文件管理器核对文件大小是否为 5,858,854 字节(传输截断会导致该错误)。
Q6息屏后 bot 掉线?
在系统设置中允许 B-bot 自启动、关闭它的电池优化限制;部分 ROM 还需要在「最近任务」里给 B-bot 加锁。
Q7怎么彻底清除?
设置页「清空全部会话历史」清本地对话;要连环境一起清除,卸载 App 即可(环境文件都在应用私有目录内)。
附录:版本信息
| 版本 | v1.1.1(versionCode 17) |
|---|---|
| 安装包 | B-bot-v1.1.1.apk · 5,858,854 字节 |
| 系统要求 | Android 7.0 及以上 · arm64(骁龙、天玑等主流芯片) |
| 运行条件 | 无需 root、无需刷机、无需电脑 · 可用空间 ≥ 2 GB |
| 项目地址 | github.com/NOBAI612325/B-bot-AI-QQ- |