作者:晚空秋
在红岩网校看到「卷娘」这个 AI 形象时,第一反应是好奇:它是怎么来的?背后接了什么东西?能不能自己也做一个?
顺着这个问题问下去,发现原理并不神秘——一个 QQ 协议端负责收发消息,一个机器人框架负责接大模型,中间用 WebSocket 连起来。于是就有了下面这个属于我自己的 QQ AI:Nagi。
这篇记录整个搭建过程,包括踩过的坑。
一、需要准备什么 链接到标题
| 组件 | 作用 | 说明 |
|---|---|---|
| QQ 小号 | 给 AI 一个身份 | 强烈建议用小号,原因见下 |
| NapCat | QQ 协议端 | 让程序能像人一样收发 QQ 消息 |
| AstrBot Launcher | 图形化安装器 + 进程管家 | 本身不含 AI 能力,只负责把 AstrBot 装起来、跑起来 |
| AstrBot | 机器人主体 | 接大模型、管人格、装插件 |
| 大模型 API Key | 提供“智能” | 要花钱,按 token 计费 |
关于风险,先说清楚 链接到标题
NapCat 并不是腾讯官方提供的接口,它的做法是注入进程接管 QQ 客户端。这本质上违反了《QQ 软件许可协议》,存在被判定为异常登录、甚至封号的可能。
所以:一定用小号。真被封了也不心疼,主号不要冒险。
关于成本 链接到标题
这套东西不是免费的。AI 每回复一次都在消耗 token,你可以理解为「每说一句话都在花钱」。日常聊天花费很小,但如果拉进群、被频繁 @,账单会肉眼可见地涨。
二、三个部件是怎么连起来的 链接到标题
搞清楚这张图,后面每一步都不会迷路:
QQ 小号 ──扫码登录──> NapCat(协议端)
│
│ WebSocket ws://127.0.0.1:6199/ws
▼
AstrBot(AI 主体)──HTTPS──> 大模型 API(DeepSeek 等)
- NapCat 负责“听得见、说得出”——把 QQ 的消息转成程序能读的格式,再把回复发回去
- AstrBot 负责“想”——收到消息后调用大模型,决定回什么
- 6199 是两者之间的桥,AstrBot 在这头等着,NapCat 主动连过去
三、开始搭建 链接到标题
第 1 步:安装所需工具 链接到标题
去 GitHub 下载两个东西:
- AstrBot Launcher:https://github.com/AstrBotDevs/astrbot-launcher/releases
- NapCat:https://github.com/NapNeko/NapCatQQ/releases
NapCat 的安装脚本会自动检测并下载对应版本的 QQ(大约 300 MB),耐心等它跑完。

NapCat 安装时会自动拉取匹配版本的 QQ,进度条走完就装好了
第 2 步:运行 AstrBot,补齐运行组件 链接到标题
打开 AstrBot Launcher,先把三个组件装上:Python、Node.js (LTS)、uv。
注意 uv 选 v4.28.2 这个版本,别的版本可能和 Launcher 对不上。

三个组件都显示“已下载”才继续,缺一个后面都起不来
装完创建实例、启动,Launcher 会给你一组 WebUI 的账号和密码。浏览器打开它给的地址,登录进去,先创建一个自己的用户。
第 3 步:NapCat 登录 QQ 小号 链接到标题
NapCat 安装完成后会在 QQ 安装目录里生成 napcat.bat,双击运行,会弹出一个二维码。
用小号扫码登录。这一步成功后,NapCat 就已经能收发这个号的消息了。
第 4 步:在 AstrBot 里创建机器人 链接到标题
回到 AstrBot 的 WebUI,点“创建机器人”,按下表填:
| 字段 | 值 |
|---|---|
| 消息平台类别 | OneBot v11 |
| 机器人名称 | 随意(默认 default 也行) |
| 启用 | 打开 |
| 反向 WebSocket 主机 | 0.0.0.0 |
| 反向 WebSocket 端口 | 6199(保持不变) |
| 反向 WebSocket Token | 留空 |

消息平台选 OneBot v11,主机 0.0.0.0,端口 6199,Token 不填
第 5 步:在 NapCat 里建立连接 链接到标题
NapCat 运行后会给一个 WebUI 地址,浏览器打开,用刚登录的小号进去。找到 网络配置:
- 新建 WebSocket 客户端
- 启用打开
- URL 改成
ws://127.0.0.1:6199/ws - Token 删掉(留空)
- 心跳间隔、重连间隔都设为
1000 - 保存

NapCat 的概览页,可以看到版本号和运行状态

URL 指向 AstrBot 的 6199,Token 留空,两个间隔都是 1000
第 6 步:确认连接成功 链接到标题
回到 AstrBot,打开「数据与日志」,看到这一行就说明通了:
[INFO] aiochttp(OneBot v11) 适配器已连接。

日志里出现「适配器已连接」,说明 NapCat 和 AstrBot 握手成功
第 7 步:接入大模型 链接到标题
回到 AstrBot 的欢迎页,配置 AI:
- 选择提供商模型(我用的是 DeepSeek)
- 粘贴 API 密钥(获取方法见文末附录)
- 点“获取模型”
- 聊天模型选 flash
- 保存配置
到这里,主体就已经能跑起来了——给它发条消息试试。
第 8 步:给它一个人格 链接到标题
第一次对话大概率会让你失望:十分死板,毫无“人样”,像个问答机器人。
原因是模型不知道“它是谁”。所以要装人格:
① 装插件
在 Launcher 的插件市场安装 chat_plus(一个以 AI 读空气为主的群聊增强插件)。

② 打开分段回复和群聊上下文
在配置文件的「扩展功能」里:
- 启用分段回复(像真人一样把长回复拆成几条短消息)
- 启用群聊上下文感知(让它知道群里前面聊了什么)

分段回复能明显改善“像不像人”的观感,群聊上下文则避免它答非所问
③ 配置图片理解(可选)
勾选「自动理解图片」,选择一个视觉模型,群友发图它也能看懂。

④ 写系统提示词
回到 AstrBot 的「人格设定」,创建新人格:起一个 ID,然后在系统提示词里描述它是谁——名字、性格、说话风格、口头禅、禁忌。
这一步建议和豆包之类的 AI 对话来打磨:先写一版粗糙的,让它帮你提问(“遇到这种情况他会怎么回应?”),再根据回答补细节。
第 9 步:选择人格,收工 链接到标题
最后在配置文件的「AI 配置」里选中刚建的人格,保存。

配好人格之后,回复从“客服腔”变成了有人味的短句
四、踩过的坑 链接到标题
| 现象 | 原因 | 解法 |
|---|---|---|
| 日志一直没有「适配器已连接」 | 端口或 URL 写错 | 确认 AstrBot 是 0.0.0.0:6199,NapCat 连 ws://127.0.0.1:6199/ws |
| 扫码后秒掉线 | 小号被风控 | 换号,或降低发送频率 |
| 回复很慢 | 模型选了 pro/长上下文 | 换 flash,减少上下文条数 |
| 一口气发一大段 | 没开分段回复 | 扩展功能里打开分段,间隔 1.5–3.5 秒 |
| 说话不像人 | 系统提示词太笼统 | 写具体:称呼、语气、句子长度、禁用词 |
五、最后 链接到标题
从“看到一个 AI 形象觉得好奇”到“自己跑起来一个”,中间其实只有三个部件和一个端口。真正花时间的不是配置,而是调人格——同样的模型,提示词写得好不好,观感差距是数量级的。
Nagi 现在还在慢慢调,等哪天它能在群里自然地接话,这篇就算写完了。
附录:获取 DeepSeek API 密钥 链接到标题
- 打开 https://www.deepseek.com/ ,进入 API 开放平台
- 注册并登录,创建账户信息
- 新用户需要先充值(最少 10 元),用于抵扣运行时的 token 消耗
- 进入 API keys 页面,点“创建 API key”
- 复制生成的密钥,粘贴到 AstrBot 的配置里

密钥只显示一次,务必当场保存;泄露了就在后台删掉重建。