Astrbot+Napcat QQ机器人Debian部署过程记录 #9119
AhandsomeA
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
声明:包含AI生成内容
绪论
近几年,大语言模型(Large Language Model, LLM)的发展可谓是轰轰烈烈、如火如荼。我最初接触到并实际使用的LLM是ChatGPT3.5,当时只道是糊弄作业和写报告的又一个新手段。谁曾想,在这之后,国内外的LLMs以及许多非LLM的专用型AI模型如雨后春笋般相继涌现。截止到我写这篇文章,比较关注的LLMs的最新版本如下表所示:
就我这次部署聊天机器人来说,首先是为了折腾(将部署机器人这件事本身作为课余时间的娱乐方式),其次才是使用和体验机器人功能,
因此为了增加工作量,我走的是本地Linux直接部署方式。平台介绍
1️⃣硬件平台:从咸鱼搞的小主机,CPU为英特尔赛扬J1900,主频1.99GHz,TDP 仅 10W,运存与存储为8+120G(事实证明,对于在Linux环境下部署Astrbot机器人来说,即使同时跑着CasaOS,这样的性能仍然是十分过剩的☝️🤓,看来我还可以再折腾折腾别的)。
2️⃣系统平台:Debian13.5的Linux系统+xfce4桌面环境,使用systemd来管理服务,能实现开机自启、异常退出自动重启,这是保证长期稳定运行。
3️⃣机器人平台:要打造一个QQ智能机器人,核心在于两个开源项目:AstrBot与NapCat。Asrtbot是一个开源的一体化基座聊天机器人平台,负责AI LLM 对话、多模态、代理、技能、知识库、人物设定、自动上下文压缩等职责;NapCat采用OneBot11标准,作为连接腾讯 QQ 服务器的协议端,通过 NTQQ 接口实现无头(headless)运行,将复杂的 QQ 协议转换成标准的 HTTP/WebSocket 事件,分发给上层的 Asrtbot。
整体思路
这套方案基于J1900低功耗平台和Debian 13.5系统构建,所有服务均以原生进程方式运行,由systemd统一管理,未使用Docker等容器技术。核心是Asrtbot与NapCat组合实现的QQ机器人,其中NapCat负责对接QQ协议、将消息转换为HTTP/WebSocket请求,Asrtbot承担语义理解与回复生成,两者均编写了systemd服务单元并配置开机自启和异常自动重启,保障长期无人值守运行。针对图形操作需求,部署了noVNC服务,将宿主机桌面通过Web页面暴露出来,浏览器即可远程操作。同时部署CasaOS作为轻量管理面板,集中展示各项服务的入口并监控系统状态。所有WebUI——包括CasaOS面板、Asrtbot+Napcat后台、noVNC远程桌面——通过Tailscale组建的虚拟局域网串联,利用WireGuard加密通道实现安全穿透,在任何外网环境下均可通过浏览器统一访问和管理。我个人认为这套方案是比较合理的,其安全性也较高。
环境配置
BIOS配置与Debian安装
这里开始安装Debian系统,需要键盘、屏幕、鼠标,整体配置完成后可不需要屏幕和外设。
Debian系统的下载与安装我参照的b站上的已有教程,这里补充一下U盘安装时的BIOS配置情况(不同主板的BIOS界面和进入方式不同,这里以我的为例):
为保障QQ机器人及其他服务在无人值守情况下的良好平稳运行,上电自启动和服务开启自启是配置中不可缺少的一环。我所使用的这款J1900小主机支持上电自启动功能,可以在设置U盘引导时顺便开启:
安装完系统后进入终端进一步配置防止自动休眠:
网络和代理配置
2.1中给出的教程中已经包含了放入官方驱动包的操作,幸运的是,我的J1900的无线网卡在安装完Debian系统后已经可以运行,无需额外安装驱动。
下图是我的XFCE桌面,经过了一定美化操作,美化操作就不再详细展开了。
接下来连接网络,可以插入网线,也可以使用无线网络。XFCE桌面下,可以在桌面右下角单击无线网络图标进行配置,注意应该选择“连接到隐藏的Wi-Fi网络”,这样才能设置安全性和填入密码,网络名称填入实际搜到的WiFi网络名称,安全性一般选择WPA及WPA2个人,最后填入密码连接。
进一步进行代理配置,我这里使用的是Flclash+机场的模式。Flclsh是基于 Clash Meta (Mihomo) 内核,采用 Flutter 构建的图形化多平台代理客户端。
可以从仓库上下载.deb发行版安装包并通过xfce自带的图形化安装程序进行安装,也可以进入终端使用命令进行安装:
接下来就和window中填入机场连接操作一样了,至于机场就得自己找了。注意启用开机自启。不要开全局 TUN 模式。 让 FlClash 只提供一个本地代理端口(默认混合端口
127.0.0.1:7890)。VNC桌面配置
这里采用的是noVNC + TigerVNC的方案,在局域网中从浏览器里即能看到完整的XFCE桌面,无需安装其他应用。
[Unit] Description=TigerVNC Server for current X11 desktop After=graphical.target Wants=graphical.target [Service] Type=simple User=你的实际用户名 ExecStart=/usr/bin/x0vncserver \ -display :0 \ -rfbport 5900 \ -localhost \ -PasswordFile=/home/你的实际用户名/.vnc/passwd Restart=always RestartSec=3 [Install] WantedBy=graphical.target##5.创建 noVNC 服务(粘贴下面的novnc.service,然后Ctrl+O保存,Ctrl+X退出) sudo nano /etc/systemd/system/novnc.service[Unit] Description=noVNC WebSocket Proxy After=x0vncserver.service Requires=x0vncserver.service [Service] Type=simple ExecStart=/usr/bin/websockify \ --web=/usr/share/novnc/ \ 6080 \ localhost:5900 Restart=always RestartSec=3 [Install] WantedBy=multi-user.target配置完一键验证:
此时在连接到相同局域网的任意一台设备上输入:
"localhost"改成刚才用的hostname -I命令查到的debian在局域网中的IP,一般是192.168开头。

点击连接,输入刚才设置的密码,进入到VNC屏幕中:
此时如果在网页上操作屏幕,则直连Debian的物理屏也会同步进行操作,就好像向日葵远程协助一样。这时候拔掉直连Debian的物理屏,插上一个从淘宝9块9买的HDMI诱骗器,重新连接VNC,如果正常显示,则大功告成!从此装有Debian的主机便不再需要鼠标、键盘和屏幕,我们可以从局域网访问VNC屏幕!
Tailscale穿透配置
Tailscale 的核心原理基于 WireGuard VPN,它实现了端到端加密的点对点(P2P)连接,但在必要时会通过 中继服务器(DERP) 进行中转 。整体来说,它是一个零配置的 Mesh VPN,让所有设备看起来像是在同一个本地局域网(LAN)内。Tailscale支持Windows、Linux、Mac、Android、iOS设备,个人可以免费使用。
Tailscale提供了Linux一键安装命令,其他平台从官网下载后直接安装即可:
这样安装的Tailscale默认以systemd服务运行,安装时一般已经自动设置为开机启动。
可以通过控制台观察设备情况:
Tailscale会为每台设备分配一个IP地址,当然这个IP地址只有在运行Tailscale并登录相同账号时才能访问,它的安全性取决于Tailscale账号的安全性。比如,我的Debian主机分配的地址为100.83.237.15,当然,它是无法直接访问的。
内网IP的改变不会影响Tailscale分配给设备的地址,也就是说即使换了网络环境,只要登录了相同Tailscale账号,就能从其他设备通过Tailscale分配给设备的这个地址随时随地进行访问。
可以说,Tailscale可以在保证安全性的前提下,让你本地部署的Astrbot机器人也能像托管在服务器上的那样,通过WebUI随时随地进行查看和配置。当然,VNC远屏幕也可以通过这样随时随地远程访问。
Napcat与Astrbot配置
Napcat与Astrbot的部署
Astrbot官方和Napcat官方都提供了一键部署指令,因此部署它们是比较容易的。
都跑起来后,可分别通过:
分别访问Napcat和Astrbot的WebUI界面,"localhost"就是通过hostname -I命令查询到的192.168开头的Debian设备的局域网IP;当然,填入Tailscale分配的IP还可以让你在非局域网的条件下进入WebUI界面。6099是Napcat默认端口,6185是Astrbot默认端口。
在连接到同一局域网的设备上打开WebUI,我们需要先进行简单配置。
这里需要的token在Napcat启动日志中,可以通过打开napcat前台或直接浏览日志文件来查看:
值得一提的是,noVNC提供了共用的剪贴板,可以很方便地在浏览器所在系统和VNC远程屏幕之间交换内容:
在Napcat的WebUI中填入复制的token,可以顺利进入。我们首先要打开:
Websocket客户端的配置如下图所示:
配置好后可以向bot的QQ发送消息,并在猫猫日志里查看是否有反应,如果有则可进行下一步Astrbot配置。
注意不是QQ官方机器人,两者的原理和配置完全不同;
机器人名称自行设置,其余配置如图,然后保存,警告无视即可。盯着平台日志,待适配器链接完成后,再向Bot的QQ号发送消息,如果平台日志有反应,则可进行下一步操作。

接下来返回Debian的终端,通过创建systemd服务来设置Astrbot和Napcat开机自启:
这样,Astrbot和Napcat就可以方便地通过systemctl命令来管理了,下面是一个总结:
**hostname -I**(取第一个 192.168.x.x)**http://localhost:6099****http://localhost:6185****6199**(NapCat 的 WS 客户端指向**ws://127.0.0.1:6199/ws**)**http://<IP>:6080/vnc.html****5900****7890**(混合端口)Napcat与Astrbot的配置
Napcat相关配置
由于腾讯的风控策略,在Napcat登录QQ的开始这段时间内(约1个星期),QQ比较容易掉线,我的解决方法是通过Server酱进行提醒,收到提醒后重新扫码登录即可。待稳定后QQ基本不掉线。
首先微信登录拿到Sendkey:
然后在WebUI配置Napcat,这次需要创建HTTP服务器,按下图配置即可:
然后新建脚本,进行进一步配置:
脚本和配套文件
/usr/local/bin/qq_watch.sh、/etc/systemd/system/qq_watch.service、/etc/systemd/system/qq_watch.timer以下操作每块整体修改后复制到终端再回车即可。注意!下面的文件需要根据实际情况修改!修改时不保留<>
chmod +x /usr/local/bin/qq_watch.sh systemctl daemon-reload systemctl enable --now qq_watch.timer这样便能在微信服务号上收到掉线提醒:
Astrbot相关配置
接下来是最为关键的Astrbot配置,我整体的思路如下图所示:
接下来详细讲解模型提供商配置:
①Deepseek
在Deepseek充值并获得APIkey后,填入到模型提供商中:
②Mistral
经过我的考察,Mistral系列模型安全审查明显较弱,不容易被拦截和发生错误(凭借这一点,其在“上不上评分系统”中表现良好),不过其识别精准度相较于头部的多模态模型仍有差距。并且在据我了解的中转站点中,提供Mistral系列模型的仅有302ai一家。
由于302ai中转需要代理才能访问,所以在配置时,应当填入代理地址,这个我们在已经写入了Astrbot的开机自启服务配置里,直接使用即可:
③MIMO
由于我在MiMo官网的认证遇到了一些问题,这里使用的是第三方API:
拿到APIkey后,填入到语音转文字的模型提供商中,配置按下图所示即可:
④豆包语音复刻模型
机器人的语音输出功能既可以使用Astrbot官方提供的文字转语音服务,也可以使用文字转语音插件,其中插件astrbot_plugin_clonetts提供了语气描述,效果要更好一些。
Astrbot官方提供的文字转语音服务配置:
⑤嵌入与重排序模型
获取APIkey后如下配置,分别使用openai_embedding格式和vllm_rerank:
⑥文转图服务
Astrbot提供了文本转图像服务,这里直接配置即可:
接下来是在配置文件中应用我们已经导入完的模型:
应用配置文件:
在知识库中应用嵌入和重排序模型:
这样,一个全能机器人的基本配置便完成了。接下来推荐几个插件来拓展机器人功能,具体的插件配置不再展开叙述。刚兴趣的小伙伴可以自行研究。
功能展示与小结
经过我的配置和测试,HandsomeBot逐渐成为一个能看图、会说话、会听语音、会写文章、善于管理群、能下载作品、可以解析视频的全能机器人助理。
折腾了这么长时间,也算是折腾出了点名堂,我感觉在我之前应该没有人会自己从头开始在Debian上本地部署Astrbot+Napcat的QQ机器人吧,也算是开创先河了。这次折腾是关于AI的,能完成这次折腾也少不了各个AI的帮助,总之AI正在越来越渗透进我们生活的方方面面,没人知道未来它又会进化成什么样子。
最后,Astrbot还有许多功能,AI还会带来许多惊喜,这就需要你去慢慢尝试和研究啦!
Beta Was this translation helpful? Give feedback.
All reactions