基于 NapCat 与本地 RAG 的群聊 AI 机器人方案(ARM64 部署)
关键词:QQ机器人、NapCat、OneBot、RAG、嵌入式LLM、ARM64部署、Node.js
适用场景:群聊智能应答、角色风格模拟、低成本本地部署
一、项目背景与目标
1.1 背景
在群聊场景中,我们希望拥有一台能模拟特定人物说话风格(简洁、带口头禅、爱吐槽)的自动回复机器人,用于娱乐或社群互动。同时要求低成本部署(ARM64机顶盒)、隐私保护(RAG向量库本地存储)、拟人化响应(可变延迟、随机忽略)。
1.2 目标
-
基于 NapCat(QQ无头协议)实现消息收发
-
内置 Timing Agent 规则引擎,控制回复时机与概率,模拟人类行为
-
结合本地 RAG(检索增强生成),召回历史对话片段作为 Few-shot 示例
-
调用外部 LLM API(如 DeepSeek)生成符合目标风格的回复
-
全部服务运行在 ARM64 机顶盒(8GB RAM) 上,几乎零额外成本
二、整体架构
text
机顶盒 (ARM64, 8GB RAM)
┌────────────────────────────────────────────┐
│ NapCat (QQ协议层, Node.js) │
│ ↓ WebSocket OneBot V11 (端口3001) │
│ Bot 调度器 (Node.js) │
│ ├── Timing Agent (规则引擎) │
│ ├── RAG 检索 (sqlite-vec, 本地) │
│ └── LLM API 调用 (外部) │
│ │
│ 附: Embedding Server (0.6B GGUF, CPU) │
│ 附: SQLite 向量数据库 (~189MB) │
└────────────────────────────────────────────┘
↓
外部 LLM API (DeepSeek/硅基流动等)
-
NapCat:负责QQ协议接入,提供 WebSocket 接口(OneBot V11 标准)。
-
Bot调度器:核心业务逻辑,包含消息过滤、时机决策、RAG检索、LLM调用。
-
Embedding Server:本地运行 Qwen3-Embedding-0.6B GGUF 模型,为查询生成向量。
-
SQLite向量库:存储预计算的历史对话块(1024维),支持ANN快速检索。
三、可行性分析
3.1 技术可行性
| 模块 | 方案 | 状态 | 风险 |
|---|---|---|---|
| QQ协议 | NapCat (NTQQ无头) | ✅ 成熟开源 | 小号可能被风控,建议准备备用号 |
| 消息收发 | OneBot V11 WebSocket | ✅ 标准协议 | 无 |
| 回复时机 | 规则引擎(基于数据分析) | ✅ 简单if-else | 需实际调参 |
| 内容生成 | 外部LLM API | ✅ 通用方案 | 依赖API可用性/成本 |
| RAG检索 | sqlite-vec (本地) | ✅ 单次0.09s | 无 |
| 嵌入服务 | Qwen3-0.6B GGUF (CPU) | ✅ 单次0.11s,占用~1.2GB | 无 |
| 存储 | SQLite向量库 | ✅ 189MB | 无 |
| 部署 | ARM64 Linux机顶盒 | ✅ 资源充足 | 需确认系统版本 |
3.2 资源消耗预估
| 资源 | 需求 | 说明 |
|---|---|---|
| RAM | ~2GB | NapCat 60MB + Node.js 30MB + Embedding 1.2GB + DB缓存 |
| 磁盘 | ~300MB(模型可外置) | NapCat 80MB + DB 189MB + 模型 610MB(可选) |
| 网络 | 外网访问 | LLM API + NapCat登录 |
| CPU | ARM64,无特殊要求 | 嵌入推理CPU足够 |
3.3 风险与应对
| 风险 | 等级 | 应对措施 |
|---|---|---|
| QQ小号被封 | 中高 | 准备2~3个备用号,先养号再使用 |
| NapCat协议被封堵 | 低 | 社区活跃,更新及时 |
| LLM API不稳定 | 低 | 准备多家Key(DeepSeek/硅基流动/通义) |
| 硬件故障 | 低 | 数据库可备份迁移 |
四、功能需求清单(优先级分级)
P0 – 必须实现
- □
NapCat 启动 + 扫码登录 + 维持在线
- □
通过 WebSocket 接收群消息/私聊并发送回复
- □
调用 LLM API 生成回复(无延迟控制)
- □
配置化管理(API Key、目标群号、端口等)
P1 – 拟人化增强
- □
Timing Agent:基于消息长度、时段、连发状态、对话轮次动态调整等待时间,并引入5%忽略概率
- □
对话上下文追踪(最近N条消息,维护会话状态)
- □
多媒体消息识别(图片/文件/表情,合理忽略或提示)
P2 – 个性化(RAG + 风格)
- □
RAG检索本地历史对话库,召回Top-5相关片段
- □
系统Prompt融入目标说话风格(简短、口头禅、吐槽)
- □
将RAG结果作为Few-shot示例拼入Prompt
P3 – 运维保障
- □
心跳保活(NapCat异常自动重启)
- □
日志记录(收到消息、回复、API调用量)
- □
错误重试与降级回复
- □
群白名单机制
P4 – 未来扩展(可选)
-
私聊应答、图片生成、命令系统、群管理、Web面板等
五、核心组件设计
5.1 NapCat 配置
-
项目:NapCatQQ
-
安装:
git clone+pnpm install+pnpm build:shell -
运行:Node.js 18+,默认 WebSocket 地址
ws://127.0.0.1:3001 -
内存:约50~100MB
-
登录:终端扫码
5.2 Bot 调度器(Node.js)
使用 npm 包:
-
ws– WebSocket 客户端 -
better-sqlite3+sqlite-vec– 向量检索 -
openai– LLM API 调用(兼容接口)
核心文件结构:
text
~/qq-bot/ ├── package.json ├── config.js # 所有配置项 ├── index.js # 入口,WS连接与消息循环 ├── timing.js # 规则引擎(延迟/忽略) ├── rag.js # RAG检索封装 ├── llm.js # LLM调用封装 ├── context.js # 上下文管理 └── tools/status.js # 健康检查
5.3 Timing Agent 规则(示例)
text
收到消息 → 计算等待时间(秒): 1. 消息长度 ≤2字 → 3~7s 2. 长度 11~20字 → 22±10s 3. 长度 ≥21字 → 60±20s 4. 深夜 (23~1点) → ×0.5 5. 同一人连发 → 1~3s (秒跟) 6. 对话已超50条 → ×1.5 (疲劳) 7. 5% 概率 → 忽略不回复 8. 极长延迟 (P95) → 2~70分钟(模拟忙碌)
5.4 RAG 检索参数
-
嵌入模型:Qwen3-Embedding-0.6B (GGUF Q8_0)
-
向量维度:1024
-
检索方式:sqlite-vec 的 ANN 索引,单次耗时 ~0.09s
-
数据库:约18k个chunk,总大小189MB
-
召回数量:Top-5
5.5 LLM Prompt 模板(脱敏版)
text
系统: 你正在模仿一位群友的说话风格。其特点:
- 句子简短,平均6~7字
- 常用口头禅:吼吼、啊这、离谱、确实、妈的
- 爱吐槽,极少提问,多为陈述/感慨
- 与群内某位好友关系熟络,对话随意
历史相关对话 (RAG召回):
{rag_chunks}
当前说话人: {sender} 说: {message}
你的回复:
六、实施计划(预估5天)
| 阶段 | 任务 | 耗时 |
|---|---|---|
| Day1 | 环境准备:安装Node.js、NapCat、扫码登录、拷贝嵌入模型与DB、启动Embedding Server | 1天 |
| Day2-3 | 调度器开发:WS连接、消息解析、Timing规则、RAG模块、LLM调用、集成调试 | 2天 |
| Day4 | Prompt调优:风格注入、RAG格式、长度控制、多场景测试 | 1天 |
| Day5 | 上线打磨:小群实测、参数调整、错误处理、日志监控 | 1天 |
最快Demo:若不使用RAG和Timing,仅NapCat + LLM直调,1~2小时即可跑通。
七、成本预估
| 项目 | 费用 |
|---|---|
| NapCat | 免费开源 |
| 本地Embedding | 免费(CPU推理) |
| LLM API(DeepSeek) | ~¥1/百万token,日常用量极低 |
| 机顶盒电费 | 可忽略 |
| QQ小号 | 免费(需自行注册) |
| 总计 | 接近零成本 |
八、已有资产(可直接复用)
-
历史聊天数据(脱敏后用于构建向量库)
-
预生成的向量数据库(189MB,含约1.8万条块)
-
Qwen3-Embedding GGUF 模型文件
-
RAG查询脚本(已调优ANN索引)
-
聊天特征分析报告(用于制定Timing规则)
-
NapCat源码(已拉取)
需新准备:
-
外部LLM API Key(推荐硅基流动领取免费额度)
-
机顶盒系统确认(
uname -m是否为aarch64) -
备用QQ小号2~3个
九、开发建议
-
先跑通再完善 – 首日先实现 NapCat + 基础LLM回复,能说话再逐步添加Timing和RAG。
-
API Key优先 – 没有Key无法调用LLM,建议提前注册。
-
注意账号安全 – 小号需正常养号,避免频繁操作触发风控。
-
日志一定要加 – 方便调试和监控,尤其在生产群中。
十、总结
本方案提供了一个低成本、可落地、高度拟人化的群聊AI机器人完整架构,充分利用了本地RAG和轻量级嵌入模型,在ARM64设备上即可流畅运行。通过灵活的规则引擎和外部LLM API,既可保证回复质量,又能模拟人类响应节奏,适合社群娱乐、内部测试等场景。
技术栈亮点:Node.js + NapCat + sqlite-vec + GGUF嵌入式 + 外部LLM
部署形态:纯本地(除LLM API外无云端依赖),数据自主可控。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)