ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

手机部署猫娘QQ机器人:基于Termux与NoneBot2的零成本实践

手机部署猫娘QQ机器人:基于Termux与NoneBot2的零成本实践 这次我们来看一个手机快速部署猫娘QQ机器人的项目。如果你一直想在QQ群里添加一个能聊天、能互动、还能带点“猫娘”人设的智能机器人但又觉得在电脑上部署太麻烦或者没有服务器资源那么这个方案值得你关注。它的核心思路是利用手机作为运行平台通过一些轻量化的工具和框架实现QQ机器人的本地化部署和运行。这个项目最吸引人的地方在于“快速”和“手机部署”。它通常不依赖于复杂的服务器环境而是借助Termux这类Android终端模拟器或者一些集成了运行环境的手机App让你能在安卓设备上跑起一个Python环境进而运行机器人框架。对于想低成本、快速体验QQ机器人开发或者希望机器人能24小时在线又不想开电脑的用户来说这是一个非常实用的切入点。本文将带你走通从环境准备、依赖安装、机器人框架配置、到最终对接QQ并实现基础猫娘对话功能的完整流程。我们会重点关注在手机端部署可能遇到的特殊问题如权限、后台保活、资源占用等并提供实际的解决方案。无论你是想学习机器人开发还是单纯想给自己的群聊增加一个有趣的AI伙伴都可以按照本文的步骤进行操作。1. 核心能力速览在深入部署细节之前我们先通过一个表格快速了解这个方案的核心特性和要求帮助你判断是否适合自己。能力项说明部署平台Android 手机需Android 7.0及以上具备一定性能。iOS系统因权限限制实现类似功能极为困难。核心工具Termux终端模拟器或AidLux集成了Linux和AI环境的App是主流选择。本文以Termux为例。机器人框架基于Python的机器人框架如NoneBot2、HoshinoBot、OlivOS等。它们负责处理QQ协议和消息事件。AI对话能力通过接入大语言模型API如豆包、文心一言、GPT等或使用本地轻量模型来实现“猫娘”人格的对话逻辑。网络要求手机需要保持网络连接Wi-Fi或移动数据用于机器人登录QQ和调用AI接口。资源占用主要占用手机存储空间安装环境约1-2GB和运行内存。长期后台运行可能增加耗电量。是否需要Root不需要。Termux在非Root环境下足以完成绝大多数部署工作。适合场景QQ群趣味互动、个人学习机器人开发、轻量级自动化回复、作为AI应用移动端部署的练手项目。不适合场景高并发消息处理、需要复杂计算或大模型本地推理、对稳定性要求极高的生产环境。2. 适用场景与使用边界在开始动手之前明确你能用它来做什么以及哪些事情它做不了或者不适合做可以避免后续走弯路。适用场景社群娱乐与活跃气氛在QQ群中部署一个具有“猫娘”人设的机器人可以自动回复消息、进行简单聊天、发送特定表情或图片有效增加群聊的趣味性。个人学习与开发测试对于想学习Python、异步编程、网络协议或机器人框架的开发者在手机上进行部署是一个低成本、便捷的沙箱环境。轻量级自动化任务结合定时任务或关键词触发可以实现天气查询、新闻推送、签到提醒等简单自动化功能。作为AI应用的移动端载体将手机作为一个随时在线的“微服务器”运行一些轻量级的AI应用如对话机器人体验端侧AI的部署。使用边界与注意事项性能限制手机的计算能力、内存和存储无法与电脑或服务器相比。因此不应部署需要大量实时计算或大模型本地推理的复杂功能。稳定性挑战手机系统可能会为了省电而清理后台进程导致机器人意外掉线。需要配置Termux的后台保活和唤醒锁。网络依赖机器人的稳定运行依赖于手机网络的连续性。在信号不佳或切换网络时可能导致短暂离线。账号安全风险用于登录机器人的QQ账号存在因频繁操作或行为模式异常被腾讯安全机制限制的风险如冻结、要求验证。务必使用小号进行测试切勿使用主力账号。合规与授权在群内部署机器人应事先获得群主或管理员的同意避免打扰他人。机器人的言行应符合平台规范不得用于发送垃圾信息、骚扰他人或从事违法违规活动。AI内容责任如果接入了第三方AI对话接口需注意其生成内容的安全性、合规性。建议设置内容过滤机制避免产生不良言论。3. 环境准备与前置条件让我们开始具体的部署。首先确保你的手机满足基本条件并安装好核心的终端环境。3.1 手机设备检查操作系统Android 7.0 或更高版本。建议使用性能相对较好的手机老旧手机可能体验不佳。存储空间确保有至少2GB的可用空间用于安装Termux、Python环境、依赖包和代码。网络准备一个稳定的Wi-Fi环境初次安装和后续下载依赖包需要较多流量。3.2 安装Termux由于Google Play版本的Termux可能更新不及时推荐从F-Droid或GitHub获取最新版本。打开手机浏览器访问F-Droid官网下载F-Droid客户端安装包并安装。打开F-Droid搜索“Termux”找到由Termux官方发布的应用点击安装。或者直接访问Termux的GitHub Releases页面下载最新的-universal版本APK文件进行安装。安装完成后打开Termux。首次运行会进行初始化需要等待一会儿。3.3 配置Termux基础环境Termux初始化后首先需要更新软件源并安装基础工具包。# 1. 更新软件源列表 pkg update # 2. 升级已安装的包可选但建议执行 pkg upgrade # 3. 安装必要的工具Python、git、wget等 pkg install python git wget curl proot -y # 4. 验证Python安装 python --version # 正常应显示 Python 3.x.x安装完成后Termux的基础环境就准备好了。它的$HOME目录位于手机存储的/data/data/com.termux/files/home你可以通过cd ~进入。4. 安装部署与启动方式环境就绪后我们将安装机器人框架和必要的依赖。这里以NoneBot2框架和go-cqhttp协议端为例这是一个非常流行且文档丰富的组合。4.1 安装NoneBot2NoneBot2是一个现代化的Python异步机器人框架。# 1. 使用pip安装nonebot2 pip install nonebot2 # 2. 安装适配器这里使用OneBot V11协议最常用 pip install nonebot-adapter-onebot # 3. 安装一些常用插件和工具可选但推荐 pip install nonebot-plugin-apscheduler nonebot-plugin-gocqhttp4.2 安装和配置go-cqhttpgo-cqhttp是一个基于OneBot协议的QQ客户端负责与QQ服务器通信。下载在Termux中使用wget下载适合Android ARM64架构的版本。cd ~ wget https://github.com/Mrs4s/go-cqhttp/releases/download/v1.0.0-rc3/go-cqhttp_linux_arm64.tar.gz注意版本号可能更新请前往GitHub Releases页面查看最新版本链接。解压tar -zxvf go-cqhttp_linux_arm64.tar.gz首次运行生成配置cd ~ ./go-cqhttp首次运行会因缺少配置文件而退出并在当前目录生成config.yml。4.3 配置go-cqhttp (config.yml)使用vim或nano编辑config.yml文件。这里给出最关键的部分account: # 账号配置 uin: 123456789 # 填写你的机器人QQ号 password: # 密码为空时后续会提示扫码登录更安全 encrypt: false # 是否启用加密建议false # 反向WebSocket服务供NoneBot连接 servers: - ws-reverse: universal: ws://127.0.0.1:8080/onebot/v11/ws/ # NoneBot默认监听地址 reconnect-interval: 5000 middlewares: : *default # 引用默认中间件保存配置后再次运行./go-cqhttp。如果设置了密码会提示输入如果密码为空则会生成一个二维码图片文件使用你的手机QQ另一个账号扫描即可登录机器人账号。4.4 创建并配置NoneBot项目使用脚手架创建项目cd ~ python -m nb create按照交互提示操作项目模板选择bootstrap(简单)项目名称例如cat_bot其他选项可按回车使用默认值。进入项目目录并安装依赖cd cat_bot pip install -r requirements.txt配置环境变量编辑项目根目录下的.env文件或.env.prod文件。# .env.prod ENVIRONMENTprod HOST127.0.0.1 # 监听地址 PORT8080 # 监听端口需与go-cqhttp配置中的端口一致编写一个简单的猫娘回复插件在cat_bot/plugins目录下创建一个新文件例如catgirl.py。from nonebot import on_keyword from nonebot.adapters.onebot.v11 import Message, MessageSegment import random # 创建一个关键词触发器当消息包含“猫娘”时触发 catgirl on_keyword({猫娘}, priority50) catgirl.handle() async def handle_catgirl(): replies [ 喵~ 主人你叫我吗(蹭蹭), 猫娘在这里哦今天想和我玩什么, 竖起耳朵听到主人在喊猫娘呢, 喵呜~ 肚子有点饿了呢..., ] # 随机选择一个回复 reply random.choice(replies) # 也可以发送图片需要先将图片放入资源目录 # msg MessageSegment.text(reply) MessageSegment.image(filefile:///path/to/cat.png) msg Message(reply) await catgirl.finish(msg)5. 功能测试与效果验证配置完成后我们需要启动服务并进行测试。5.1 启动服务需要启动两个服务并保持它们都在后台运行。启动NoneBot机器人在Termux中进入项目目录。cd ~/cat_bot nb run --reload--reload参数用于开发时热重载。看到输出包含Running on http://127.0.0.1:8080即表示启动成功。不要关闭这个Termux会话。启动go-cqhttp新开一个Termux窗口Termux支持多窗口。在原来的Termux界面长按选择“新建会话”。在新会话中cd ~ ./go-cqhttp如果之前已扫码登录这次会尝试自动登录。看到输出连接成功、收到上线通知等信息即可。5.2 基础消息测试用你的个人QQ向机器人QQ号或它所在的群发送包含“猫娘”的消息。观察运行nb run的那个Termux窗口应该能看到收到消息的事件日志。如果配置正确机器人应该会随机回复一句预设的猫娘台词。5.3 接入AI对话能力以豆包API为例要让猫娘更智能需要接入大语言模型。这里以字节跳动的豆包API为例需自行申请API Key。安装请求库pip install httpx修改插件更新catgirl.py使其能调用API。from nonebot import on_message from nonebot.adapters.onebot.v11 import Message, MessageEvent import httpx import json import asyncio # 改为监听所有消息或根据需要调整触发器 chat on_message(priority99, blockFalse) # blockFalse 允许其他插件处理 chat.handle() async def handle_chat(event: MessageEvent): user_msg event.get_plaintext().strip() if not user_msg or len(user_msg) 100: # 简单过滤 return # 这里替换为你自己的豆包API端点和密钥 API_URL https://ark.cn-beijing.volces.com/api/v3/chat/completions API_KEY your_api_key_here headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } # 构建带有“猫娘”人设的提示词 payload { model: ep-20250205142129-abcdefg, # 替换为你的模型ID messages: [ {role: system, content: 你是一个可爱的猫娘说话语气要带‘喵~’喜欢用括号表达动作比如(蹭蹭)、(摇尾巴)。称呼用户为‘主人’。回答要简短活泼。}, {role: user, content: user_msg} ], stream: False } try: async with httpx.AsyncClient(timeout30.0) as client: resp await client.post(API_URL, jsonpayload, headersheaders) if resp.status_code 200: data resp.json() reply data[choices][0][message][content] await chat.finish(Message(reply)) else: await chat.finish(Message(喵网络好像不太对劲...)) except Exception as e: await chat.finish(Message(出错了喵...))重启NoneBot服务在运行nb run的窗口按CtrlC停止然后重新执行nb run --reload。测试AI对话再次向机器人发送消息它应该会以猫娘的口吻调用AI进行回复。6. 接口API与批量任务虽然手机部署主要面向即时消息响应但NoneBot框架本身也支持通过HTTP接口触发任务这为一些自动化场景提供了可能。6.1 通过插件暴露简易API你可以编写一个插件监听特定的HTTP POST请求来触发任务。安装额外依赖pip install nonebot-plugin-httpx创建API插件在plugins目录创建api_trigger.py。from nonebot import on_command from nonebot.rule import to_me from nonebot.params import CommandArg from nonebot.adapters.onebot.v11 import Message, PrivateMessageEvent import httpx # 定义一个命令例如 #broadcast broadcast on_command(broadcast, ruleto_me(), priority1, blockTrue) broadcast.handle() async def handle_broadcast(event: PrivateMessageEvent, args: Message CommandArg()): # 这里可以添加权限验证比如只允许管理员QQ号操作 if event.user_id ! 123456789: # 替换为管理员QQ号 await broadcast.finish(你没有权限哦喵~) msg args.extract_plain_text() if not msg: await broadcast.finish(主人要广播什么内容呢) # 这里模拟一个“批量任务”向指定群列表发送消息 group_list [123456, 654321] # 替换为你的群号列表 success [] failed [] bot broadcast.bot for group_id in group_list: try: await bot.send_group_msg(group_idgroup_id, messagemsg) success.append(str(group_id)) except: failed.append(str(group_id)) result f广播完成喵\n成功{,.join(success)}\n失败{,.join(failed)} await broadcast.finish(result)这样管理员在私聊中向机器人发送#broadcast 大家晚上好喵~机器人就会向预设的群组发送消息。6.2 使用APScheduler插件实现定时任务nonebot-plugin-apscheduler插件可以让你方便地添加定时任务。确保已安装该插件。创建定时任务插件在plugins目录创建scheduled_task.py。from nonebot import require from nonebot.plugin import PluginMetadata from nonebot.log import logger require(nonebot_plugin_apscheduler) from nonebot_plugin_apscheduler import scheduler # 定义一个每天上午9点执行的定时任务 scheduler.scheduled_job(cron, hour9, minute0, idmorning_greeting) async def morning_greeting(): try: bot list(scheduler.bots.values())[0] # 获取一个bot实例 await bot.send_group_msg(group_id你的群号, message大家早上好喵该起床啦~(伸懒腰)) logger.info(定时问候发送成功) except Exception as e: logger.error(f定时任务执行失败: {e}) __plugin_meta__ PluginMetadata( name定时问候, description每天定时发送问候, usage自动触发, )重启NoneBot后定时任务就会自动注册并执行。7. 资源占用与性能观察在手机端长期运行服务监控资源占用至关重要。7.1 在Termux内查看资源# 查看进程和CPU/内存占用 (类似Linux的top命令) top # 查看存储空间使用情况 df -h # 查看指定进程的详细信息比如Python进程 ps aux | grep python7.2 手机系统级观察Android设置 电池查看Termux的耗电情况。Android设置 应用 Termux 移动数据查看网络使用量。使用第三方监控工具如Simple System Monitor等可以更直观地在通知栏或桌面看到CPU、内存、温度、网络实时数据。7.3 降低资源消耗的建议精简插件只加载必需的插件禁用或卸载不用的插件。优化AI调用对于API调用设置合理的超时时间如10-15秒避免长时间挂起。可以考虑使用缓存对重复问题直接返回缓存答案。如果使用本地小模型务必选择参数量小、优化过的版本。管理后台进程在Termux中可以使用tmux或screen来会话管理避免直接关闭终端导致进程结束。在手机系统设置中为Termux开启“自启动”和“省电无限制”或类似选项防止系统杀后台。定期清理定期清理~/storage/downloads或项目目录中生成的临时日志、缓存文件。8. 常见问题与排查方法手机部署环境特殊以下是可能遇到的问题及解决方案。问题现象可能原因排查方式解决方案Termux无法安装包软件源问题或网络问题。运行pkg update看错误信息。1. 检查网络。2. 尝试更换Termux软件源镜像。pip install失败Python环境问题、依赖冲突或网络超时。查看具体的错误信息通常是最后几行。1. 使用pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package换源加速。2. 升级pippip install --upgrade pip。3. 对于复杂依赖可尝试先创建虚拟环境。go-cqhttp扫码登录失败二维码过期、网络问题或协议限制。查看go-cqhttp输出的日志。1. 确保手机时间准确。2. 尝试在config.yml中配置protocol: 2Android Pad协议或protocol: 5MacOS协议并重启。3. 清除session.token等文件重新扫码。NoneBot启动失败提示地址已被占用端口冲突8080端口被其他程序使用。运行netstat -tunlp | grep 8080(需安装net-tools)。1. 修改.env.prod中的PORT为其他端口如8081。2. 同时修改go-cqhttp配置中universal的端口号。机器人收不到消息或不回消息1. go-cqhttp未成功连接NoneBot。2. 插件未正确加载或触发条件不满足。1. 查看go-cqhttp日志看是否有WebSocket连接成功的提示。2. 查看NoneBot日志看是否收到消息事件。1. 检查IP和端口配置是否一致。2. 在NoneBot日志中确认插件加载成功。3. 检查消息触发规则关键词、命令前缀等。Termux进程被系统清理手机系统省电策略。机器人突然离线重新打开Termux发现进程已结束。1. 手机设置中为Termux开启“允许后台活动”、“允许自启动”、“省电无限制”。2. 使用termux-wake-lock命令阻止CPU休眠需安装termux-api。3. 考虑使用AidLux这类更注重后台保活的App。AI接口调用返回错误API Key无效、额度不足、网络超时或请求格式错误。查看NoneBot日志中httpx请求的返回状态码和内容。1. 检查API Key和URL是否正确。2. 在浏览器或Postman中测试API是否正常。3. 查看对应AI平台的官方文档和错误码说明。存储空间不足安装的包、日志文件或下载的模型过多。运行df -h和du -sh ~查看。1. 清理pip缓存pip cache purge。2. 清理Termux包缓存pkg clean。3. 删除不必要的日志和下载文件。9. 最佳实践与使用建议为了让你的手机QQ机器人运行得更稳定、更安全遵循以下建议账号隔离坚决使用单独的、不重要的QQ小号作为机器人账号。主账号一旦被风控将严重影响日常使用。配置备份定期将Termux的$HOME目录特别是~/cat_bot项目目录和~/.config/go-cqhttp备份到手机存储或电脑。重装系统或App后可以快速恢复。日志管理NoneBot和go-cqhttp默认都会输出日志。建议配置日志轮转避免单个日志文件过大。可以在NoneBot的pyproject.toml中配置日志级别和文件输出。权限最小化机器人插件只赋予其完成功能所需的最小权限。例如定时广播插件应验证触发者的QQ号。人设与内容管理精心设计“猫娘”的系统提示词System Prompt引导AI生成符合设定的对话。同时考虑加入基础的内容过滤机制避免AI“胡言乱语”引发问题。功能迭代从一个最简单的回声机器人开始逐步添加关键词回复、定时任务、AI对话等功能。每添加一个功能都充分测试确保不会影响原有服务。社区与文档遇到复杂问题积极查阅所用框架NoneBot2、go-cqhttp的官方文档和GitHub Issues。相关的开发者社区如QQ群、论坛也是宝贵的资源。合规使用清晰告知群成员群内存在机器人。避免让机器人高频发送消息尤其是全体成员以免对其他用户造成骚扰。10. 总结与下一步通过本文的步骤你应该已经成功在安卓手机上部署了一个具备基础对话能力的猫娘QQ机器人。这个方案的核心优势在于低成本、便捷性和学习价值让你能在一台闲置手机上快速搭建起一个可交互的AI应用原型。最值得尝试的深化方向插件生态探索NoneBot2有丰富的社区插件库可以尝试安装图库、游戏、管理等功能插件极大扩展机器人能力。Web UI管理面板为你的机器人部署一个简单的Web管理界面方便在浏览器里查看状态、配置开关插件甚至直接对话测试。混合部署将耗资源的AI模型推理部分部署在性能更强的电脑、服务器或云函数上手机端机器人仅作为轻量的消息接收和发送端通过网络调用远程API。这能显著提升复杂任务的响应速度和稳定性。协议端优化关注go-cqhttp的更新尝试不同的登录协议以提高账号登录的稳定性和成功率。最容易踩的坑账号风控新号或低活跃度账号频繁操作极易被限制。保持账号一定的日常活跃度并控制机器人消息频率。后台中断手机系统杀后台是最大的不稳定因素。务必按照第8节的建议做好保活设置。依赖冲突Python包版本冲突是常见问题。建议在项目内使用虚拟环境venv进行隔离。手机部署QQ机器人是一个充满乐趣的技术实践它模糊了移动设备与服务器之间的界限。虽然它不适合承载核心业务但对于个人项目、技术学习和社群娱乐来说其灵活性和可玩性非常高。建议你将关键配置和步骤收藏在需要重建环境时能快速回顾。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进