作者:晚空秋

在红岩网校看到「卷娘」这个 AI 形象时,第一反应是好奇:它是怎么来的?背后接了什么东西?能不能自己也做一个?

顺着这个问题问下去,发现原理并不神秘——一个 QQ 协议端负责收发消息,一个机器人框架负责接大模型,中间用 WebSocket 连起来。于是就有了下面这个属于我自己的 QQ AI:Nagi。

这篇记录整个搭建过程,包括踩过的坑。

一、需要准备什么 链接到标题

组件作用说明
QQ 小号给 AI 一个身份强烈建议用小号,原因见下
NapCatQQ 协议端让程序能像人一样收发 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 客户端

NapCat 安装时会自动拉取匹配版本的 QQ,进度条走完就装好了

第 2 步:运行 AstrBot,补齐运行组件 链接到标题

打开 AstrBot Launcher,先把三个组件装上:Python、Node.js (LTS)、uv。

注意 uv 选 v4.28.2 这个版本,别的版本可能和 Launcher 对不上。

AstrBot 组件管理:Python、Node.js、uv 均已下载

三个组件都显示“已下载”才继续,缺一个后面都起不来

装完创建实例、启动,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留空

在 AstrBot 中创建 OneBot v11 机器人

消息平台选 OneBot v11,主机 0.0.0.0,端口 6199,Token 不填

第 5 步:在 NapCat 里建立连接 链接到标题

NapCat 运行后会给一个 WebUI 地址,浏览器打开,用刚登录的小号进去。找到 网络配置:

  1. 新建 WebSocket 客户端
  2. 启用打开
  3. URL 改成 ws://127.0.0.1:6199/ws
  4. Token 删掉(留空)
  5. 心跳间隔、重连间隔都设为 1000
  6. 保存

NapCat 主界面:确认版本与连接状态

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

WebSocket 客户端配置:URL、心跳与重连间隔

URL 指向 AstrBot 的 6199,Token 留空,两个间隔都是 1000

第 6 步:确认连接成功 链接到标题

回到 AstrBot,打开「数据与日志」,看到这一行就说明通了:

[INFO] aiochttp(OneBot v11) 适配器已连接。

AstrBot 日志:适配器已连接

日志里出现「适配器已连接」,说明 NapCat 和 AstrBot 握手成功

第 7 步:接入大模型 链接到标题

回到 AstrBot 的欢迎页,配置 AI:

  1. 选择提供商模型(我用的是 DeepSeek)
  2. 粘贴 API 密钥(获取方法见文末附录)
  3. 点“获取模型”
  4. 聊天模型选 flash
  5. 保存配置

到这里,主体就已经能跑起来了——给它发条消息试试。

第 8 步:给它一个人格 链接到标题

第一次对话大概率会让你失望:十分死板,毫无“人样”,像个问答机器人。

原因是模型不知道“它是谁”。所以要装人格:

① 装插件

在 Launcher 的插件市场安装 chat_plus(一个以 AI 读空气为主的群聊增强插件)。

插件市场里安装 chat_plus

② 打开分段回复和群聊上下文

在配置文件的「扩展功能」里:

  • 启用分段回复(像真人一样把长回复拆成几条短消息)
  • 启用群聊上下文感知(让它知道群里前面聊了什么)

扩展功能:分段回复与群聊上下文

分段回复能明显改善“像不像人”的观感,群聊上下文则避免它答非所问

③ 配置图片理解(可选)

勾选「自动理解图片」,选择一个视觉模型,群友发图它也能看懂。

图片转述模型配置

④ 写系统提示词

回到 AstrBot 的「人格设定」,创建新人格:起一个 ID,然后在系统提示词里描述它是谁——名字、性格、说话风格、口头禅、禁忌。

这一步建议和豆包之类的 AI 对话来打磨:先写一版粗糙的,让它帮你提问(“遇到这种情况他会怎么回应?”),再根据回答补细节。

第 9 步:选择人格,收工 链接到标题

最后在配置文件的「AI 配置」里选中刚建的人格,保存。

和 Nagi 的第一次对话

配好人格之后,回复从“客服腔”变成了有人味的短句

四、踩过的坑 链接到标题

现象原因解法
日志一直没有「适配器已连接」端口或 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 密钥 链接到标题

  1. 打开 https://www.deepseek.com/ ,进入 API 开放平台
  2. 注册并登录,创建账户信息
  3. 新用户需要先充值(最少 10 元),用于抵扣运行时的 token 消耗
  4. 进入 API keys 页面,点“创建 API key”
  5. 复制生成的密钥,粘贴到 AstrBot 的配置里

DeepSeek 开放平台首页

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