前言

QQ 机器人真正难的地方,往往不是“让 AI 回一句话”,而是把几层完全不同的东西接稳:QQ 账号怎么登录、消息怎么交给机器人框架、模型怎么接入、插件和 MCP 怎么扩展,最后管理面板又怎么在外网维护。AstrBot 和 NapCat 放在一起,正好把这些职责拆开:NapCat 负责 QQ 登录和 OneBot 消息接口,AstrBot 负责机器人逻辑、模型、人设、插件与 MCP;Docker 再把两套服务统一拉起来。本文按这条链一步一步验证:先确认 61856099 两个 Web 页面都能访问,再让 NapCat 登录 QQ、让 AstrBot 收到消息,随后接入 DeepSeek,继续测试人设、插件和 12306 MCP,最后再用 cpolar 把 AstrBot 的 6185 管理页面提供到公网。这样每出一个问题,都能知道应该查哪一层。

1. 为什么需要 AstrBot 和 NapCat 两套组件?

1.1 AstrBot 负责 AI 和机器人逻辑

image-20251123183333728

AstrBot 是一个面向 AI 大模型的聊天机器人框架。本文实际用到的能力包括:

  • WebUI 管理;
  • QQ 个人号机器人配置;
  • DeepSeek 模型提供商;
  • 人格设定;
  • 插件市场;
  • MCP 服务;
  • 消息回复。

它可以理解成整套系统的“逻辑层”:收到消息以后,决定调用哪个模型、用什么人设、是否执行插件或 MCP。

1.2 NapCat 负责把 QQ 消息交出来

NapCat 在这套组合中负责登录 QQ,并通过 OneBot v11 接口把消息交给 AstrBot。

职责分开以后,排查就容易得多:

  • QQ 登录失败,先看 NapCat;
  • AstrBot 收不到 QQ 消息,检查两边的 OneBot 链路;
  • AI 不回复,继续看模型提供商;
  • 人设、插件、MCP 不生效,再回 AstrBot 配置。

也就是说,这不是两个功能重复的机器人,而是:

NapCat 负责 QQ → AstrBot 负责机器人逻辑和 AI。

2. 先用 Docker 把两套服务一起拉起来

本次演示环境是 Windows 11。

如果 Docker 已经准备好,在 Windows 中按 Windows + R,输入 powershell,打开 PowerShell。

执行:

irm https://gitee.com/jun-wan/script/raw/master/astrbot/deploy_astrbot.ps1 | iex

image-20251123200910304

这条脚本会完成 Docker 检查、目录创建、下载 astrbot.yml、启动容器,并输出访问地址。

如果是在 Linux 环境,可以按原步骤依次执行:

mkdir astrbot
cd astrbot
wget https://raw.githubusercontent.com/NapNeko/NapCat-Docker/main/compose/astrbot.yml
sudo docker compose -f astrbot.yml up -d

也可以使用 Linux 一键部署脚本:

curl -fsSL https://gitee.com/jun-wan/script/raw/master/astrbot/deploy_astrbot.sh | bash

容器启动以后,我更建议先别急着配置 QQ,而是先确认两套 Web 服务都活着。

AstrBot:

http://localhost:6185

image-20251123203853914

NapCat:

http://localhost:6099

image-20251123203901885

两个页面都能打开,才说明 Docker 部署这一层已经正常。

3. NapCat 先登录 QQ

NapCat Web 登录地址:

http://localhost:6099/

image-20251123205348634

第一次进入时需要 Token。

部署控制台会输出 Token。

image-20251123205444935

如果控制台日志已经清掉,可以通过容器日志查:

docker logs napcat | Select-String "Token"

image-20251123210323569

复制 Token,填回 Web 页面登录。

image-20251123205533979

接下来使用准备作为机器人的 QQ 账号扫码登录。

image-20251123210534466

这一步完成后,NapCat 才真正具备“QQ 账号在线并可通过 OneBot 接口被调用”的条件。

4. 再让 AstrBot 和 NapCat 连起来

4.1 初始化 AstrBot

AstrBot 地址:

http://localhost:6185

image-20251123210740085

初始用户名和密码都为:

astrbot

第一次登录后会提示修改账号信息,按页面修改后重新登录。

image-20251123210830583

4.2 创建 QQ 个人号机器人

进入 AstrBot 后,点击【机器人 → 创建机器人】。

消息类别选择:

QQ个人号

并启用后保存。

image-20251123211152800

如果弹出安全提醒,原步骤中选择【无视警告并继续创建】。本地环境也可以按需要自行设置 Token。

image-20251123211411957

创建完成以后,不要直接去配 DeepSeek。

先展开平台日志,然后用另一个 QQ 账号给机器人账号发一条消息。

image-20251123211819688

日志能够收到消息,说明最关键的第一段链已经跑通:

QQ → NapCat → AstrBot。

如果这一步都没通,后面再怎么改模型也不会有用。

5. 接入 DeepSeek,让机器人真正开始回答

5.1 创建 DeepSeek API Key

先进入 DeepSeek 平台:

https://platform.deepseek.com

image-20251123212312595

进入 API keys

image-20251123212412923

点击【创建 API key】,填写名称并创建。

密钥只会显示一次,创建后复制保存。

image-20251123212454913

5.2 在 AstrBot 中新增 DeepSeek

回到 AstrBot 后台,进入【模型提供商】,点击【新增模型提供商】,选择【接入 DeepSeek】。

image-20251123213212109

点击修改,把刚才的 DeepSeek API Key 填入,然后保存。

image-20251123213521325

保存以后,在模型提供商页面点击【测试】。

image-20251123213608969

模型测试通过以后,再回 QQ 对话。

5.3 用另一个 QQ 实际发消息验证

继续使用另一个账号向机器人 QQ 发消息。

image-20251123214128707

机器人能够正常回复后,第二段链才算真正成立:

QQ → NapCat → AstrBot → DeepSeek → QQ 回复。

6. 回答能用了,再调整人设和回复方式

默认回答比较像标准助手。

image-20251124095024827

AstrBot 默认人设提示词记录为:

你是一个乐于助人、友好的助手……

image-20251124095151804

如果想让机器人表现出不同风格,可以进入【更多功能 → 人格设定】,新建人格 ID 和系统提示词。

image-20251124100820821

原教程还准备了一份人设资源:

123云盘永久链接:https://www.123865.com/s/3jOKVv-GSNzH?pwd=1314#

提取码:1314

创建完成后,新的人格会出现在列表里。

image-20251124102106235

6.1 查看和切换人格

在对话框输入:

/persona

image-20251124103153219

查看人格列表:

/persona list

image-20251124103302095

切换人格:

/persona 猫娘(请替换为你创建好的人格ID名称)

image-20251124103450166

再发消息测试。

image-20251124103547234

人格已经生效。

6.2 回复太长时,打开流式 / 分段回复

如果回复一整大段不适合聊天,可以回到 AstrBot 配置文件里找到流式回复并启用。

image-20251124103742684

再次测试。

image-20251124103856180

现在回复会按配置进行分段。

切换到其他人格时,原步骤特别提醒先注意上下文,并执行 /reset

完整命令记录如下:

# 切换人设
/persona <你要切换的人格设定ID名称>

# 清空上下文,防止原人格对话影响现人格
/reset

image-20251124104244203

再次测试新的人格。

image-20251124104311795

这一部分真正解决的是“机器人怎么说话”,不是底层通信问题。所以把它放在 QQ、AstrBot 和模型都验证成功以后更合适。

7. 插件负责扩展具体功能

AstrBot 后台进入【插件】,可以看到插件市场。

image-20251124113803564

这里用点歌插件做测试。

搜索“音乐”,找到点歌插件。

image-20251124114659439

安装时可以选择 GitHub 加速,并先做连通性测试,选择延迟较低的节点。

image-20251124115256225

安装完成后会显示说明文档。

image-20251124115341542

回到 QQ 对话,执行:

/点歌 恋人(你想要点歌的歌曲名字)

image-20251124115515662

机器人成功返回歌曲卡片。

这一步可以很直观地看出插件的定位:

插件更像是给 AstrBot 增加一个已经封装好的具体功能。

8. MCP 和插件有什么区别?

插件能增加特定机器人功能,而 MCP 更偏向把外部工具或服务以标准化方式交给模型调用。

本文没有把 MCP 写成“自动拥有一切能力”,而是用一个很具体的 12306 示例验证。

8.1 添加 12306 MCP

进入 AstrBot 后台的【MCP】,点击同步服务器,再跳转到 ModelScope。

image-20251124133852557

地址:

https://www.modelscope.cn/mcp

image-20251124134022977

找到 12306-mcp 后,复制 MCP 服务器配置:

{
    "mcpServers": {
        "12306-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "12306-mcp"
            ]
        }
    }
}

image-20251124134112637

回到 AstrBot,点击【新增服务器】,填写服务器名称并粘贴配置。

先测试,测试可用再保存。

image-20251124134422796

8.2 回 QQ 做一次真实查询

回到聊天窗口,直接向机器人提出车票相关问题。

image-20251124134847881

本文测试中,机器人返回了普通快速列车和高铁动车相关信息,包括列车号、出发时间、到达时间、座位和价格。

这一层验证的是:

AstrBot → MCP → 12306-mcp → 返回查询结果。

它比单纯在后台看到“服务器已添加”更有意义。

9. 本地机器人都跑通以后,再处理远程管理

到这里,QQ AI 机器人已经完成:

NapCat 登录 QQ → AstrBot 收消息 → DeepSeek 回复 → 人格 → 插件 → MCP。

这时候再考虑一个实际问题:

如果 AstrBot 部署在家里的 Windows 主机上,人不在同一局域网时,怎么打开 6185 后台改配置?

cpolar 在这篇里只处理这一层:

把 AstrBot 的 Web 管理页面从本地 6185 提供到公网。

QQ 消息本身已经通过前面的 NapCat / AstrBot 链路正常工作,不需要把这两件事混在一起。

image-20250910114418412

10. Windows 安装 cpolar

进入 cpolar 下载页面,下载安装包。

image-20250815171202537

安装完成后,在 CMD 中确认版本:

cpolar version

image-20250815171446129

出现版本信息后,继续注册账号。

image-20250804085039567

进入注册页面。

image-20250804085208319

注册完成以后,通过本机 9200 进入 Web UI:

http://127.0.0.1:9200

image-20250815171734046

登录账号。

image-20250815171846757

11. 先用随机域名验证 AstrBot 6185

进入【隧道管理 → 隧道列表】,原环境里默认有两条隧道:

  • remoteDesktop3389 / TCP
  • website8080 / HTTP

image-20250914174356363

编辑 website,改成 AstrBot 所需配置。

image-20251124163111209

更新以后,到【状态 → 在线隧道列表】,可以看到名为:

astrbot-6185

的 http / https 地址。

image-20251124163228676

每个账号实际生成的公网地址不同。

用 https 地址访问测试。

image-20251124163410726

AstrBot 页面可以正常打开。

到这里,能确认的是:

AstrBot 6185 管理页面已经可以从公网浏览器访问。

12. 长期管理再换固定二级子域名

随机域名更适合临时测试。原教程记录里,它大约每 24 小时变化一次。

如果 AstrBot 后台准备长期远程维护,固定地址会更省事。

进入预留页面:

https://dashboard.cpolar.com/reserved

选择【保留二级子域名】,填写地区、名称和描述。

image-20251124164228056

本文记录的保留信息是:

  • 地区:China Top
  • 二级域名:astrbot

回到【隧道管理 → 隧道列表】,找到:

astrbot-6185

并编辑。

image-20251124164327252

域名类型改成【二级子域名】,填入前面保留的名称。

image-20251124165221495

更新以后,在线隧道列表里 astrbot-6185 会变成固定二级子域名形式。

image-20251124165819401

继续以 https 地址测试。

image-20251124165834465

页面可以正常访问。

总结

这套组合真正有价值的地方,不是“Docker 一键把 QQ 变成 AI”,而是把不同职责拆得很清楚:

NapCat 负责 QQ 登录和 OneBot 消息接口;
AstrBot 负责机器人逻辑、模型、人设、插件和 MCP;
DeepSeek 提供大模型能力;
插件补充具体机器人功能;
MCP让模型继续调用外部工具;
cpolar只负责把 AstrBot 的 6185 管理页面提供到公网。

整条实际跑通的链路是:

Docker → AstrBot 6185 + NapCat 6099 → NapCat Token → QQ 扫码登录 → AstrBot 创建 QQ 个人号 → QQ 消息日志验证 → DeepSeek API → QQ AI 回复 → Persona → 点歌插件 → 12306 MCP → cpolar → astrbot-6185 → 固定二级子域名 astrbot

这次已经实际展示的结果包括:

  • Windows 11 Docker 部署;
  • Linux 官方 Compose 命令;
  • AstrBot 6185
  • NapCat 6099
  • NapCat Token;
  • QQ 扫码登录;
  • AstrBot 默认账号 astrbot
  • QQ 个人号机器人;
  • DeepSeek API Key;
  • 模型测试;
  • QQ 实际对话回复;
  • /persona
  • /persona list
  • 人格切换与 /reset
  • 分段回复;
  • 点歌插件;
  • /点歌 恋人
  • 12306-mcp
  • MCP 测试与车票查询;
  • cpolar version
  • 127.0.0.1:9200
  • astrbot-6185
  • China Top
  • 固定二级子域名 astrbot

比起一开始就往机器人里堆功能,我更建议按这条顺序做:先确认 QQ 消息能进 AstrBot,再确认模型能回复,最后才加人设、插件和 MCP。 这样哪一步出问题,基本都能定位到对应组件,不会变成几个服务同时排查。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐