自己的Agent智能体需要考虑很多事情,其实归根到底就是Fastapi。但是,基于最近爆火的openclaw,可以快速得到一个可以通过通讯协议进行交互的Agent助手。但是,因为其危险的权限问题,最后找到了可以说是替代品,或者优化版本的开源项目:AstrBot。
其独特的沙盒环境,可以让我们将任何危险操作安全隔离,不会造成巨大损失。并且其还自带了webUI,快速配置非常的方便。
查询AstrBot的文档,本来是打算部署在雨云上的,但是每个月还要给40多有点舍不得。家里有多余的MacBook Pro,干脆直接拿来当常驻服务器得了。
于是有了这篇记录文档:
目标:
- 不继续租云服务
- 用MacBook当常驻主机
- 本地通过docker Compose 部署 Napcat + AstrBot
- 保持QQ机器人、AstrBot、插件功能都可以正常工作
整体架构思路:
本地环境:
- MacBook Pro
- Apple 芯片(M3 Pro)
- Docker Desktop
- Docker Compose
- Napcat + AstrBot 同机部署
也就是说:
- Napcat: 负责QQ协议登录、消息收发、OneBot对接
- AstrBot:负责机器人逻辑、模型调用、插件、WebUI管理
- 两者通过Docker Compose 默认网络通信
- NapCat 通过反向 Websocket 主动连接AstrBot
在弄清楚之前,要先确认你的主机是否能长期静默运行
windows就不说了,mac mini,这些都可以作为无头服务器直接运行,最佳实践就是mac mini或者一个大于2C 4G的自配置板子。。。反正你如果要参考本教程进行部署,要确保这一步你可以自行完成。
部署目录规划(默认你是macOS or linux)
windows的指令自行寻找AI进行翻译。反正都差不多。最后都要回到Docker Compose
mkdir -p ~/bot-stack
cd ~/bot-stack
mkdir -p napcat/config napcat/qqdata napcat/plugins
mkdir -p astrbot/data目录结构:
bot-stack/
├── docker-compose.yml
├── napcat/
│ ├── config/
│ ├── qqdata/
│ └── plugins/
└── astrbot/
└── data/如此设计的好处就是:
- NapCat的登录状态、配置、插件可以持久化
- AstrBot的数据和配置的持久化
后续重启、更新容器都很方便。
Docker Compose 配置文件:
services:
napcat:
image: mlikiowa/napcat-docker:latest
container_name: napcat
restart: unless-stopped
environment:
- NAPCAT_UID=1000
- NAPCAT_GID=1000
- TZ=Asia/Shanghai
ports:
- "3001:3001"
- "6099:6099"
volumes:
- ./napcat/config:/app/napcat/config
- ./napcat/qqdata:/app/.config/QQ
- ./napcat/plugins:/app/napcat/plugins
astrbot:
image: soulter/astrbot:latest
container_name: astrbot
restart: unless-stopped
depends_on:
- napcat
environment:
- TZ=Asia/Shanghai
ports:
- "6185:6185"
- "6199:6199"
volumes:
- ./astrbot/data:/AstrBot/data端口说明:
- 6099: NapCat WebUI
- 3001: NapCat OneBot 端口
- 6185:AstrBot WebUI
- 6199:AstrBot 反向Websocket 监听端口
关于镜像
因为AstrBot和NapCat的镜像源基本上都是github,没有代理可能上不去,当然,你也可以直接选择国内转接的代理源,但是基于以后的方便,个人建议给你的系统加上代理,如果跟我一样是本机,可以优先考虑clash。如果使用quanx会有TUN出网的问题。
万一你现在遇到了和我一样的问题,其实最简单的办法就是:
把 Docker Desktop 的手动代理关掉,保持默认无代理状态,然后:
- 先启动 Quantumult X
- 再启动 Docker Desktop
Docker 虽然没有显式代理配置,但已经能沿着宿主机的 TUN 链路正常出网。
启动NapCat 和 AstrBot
网络问题调顺畅之后,执行:
docker compose up -d
docker ps最后看到:
- NapCat 正常运行
- AstrBot 正常运行
我们打开Docker Desktop,找到NapCat的容器logs:

这里会拿到一个首次登录的token,既可以通过这个token打开本地的NapCat webUI,webUI的地址也被Docker logs打印出来了,直接访问就行了。
然后,我们可以直接设置网络配置:
新建网络配置,选择Websocket 客户端:

请如图设置:
名称随便,token请设置完毕之后,自行记住,后续在AstrBot那边也需要进行配置。
紧接着,查看AstrBot 容器的日志:

我们访问AstrBot 的 webUI:

配置机器人的消息类别,看你的需求,因为我是默认做的qq机器人,所以NapCat就是最好的通讯渠道,如果是企业微信,飞书,discord或者TG的话,可以自行查询他们的通讯工具,做到一开多用:
以qq为例:

token就是上面我让你记住的NapCat的反向Websocket的token,你自己设定的。
准备就绪之后,导入模型api:
有两种选择,如果你有足够牛逼的显卡,可以考虑ollama本地部署,也可以选择线上api,Deepseek就是不错的选择:
像我就用了Deepseek和ollama部署 Qwen3.5 9b混合驱动


需要注意的是,ollama的本地,其host URL需要用docker的表示方式,因为我们的AstrBot是走的docker容器方式部署的。
http://host.docker.internal:11434/v1
AstrBot作为一个非常不错的Agent架构,它的配置也是非常的全面:
你甚至可以给他设置一个人格:
我这边以月见八千代为例:


支持网页搜索,使用你的电脑,支持RAG,System Prompt也可以方便的注入。多的不用过多介绍,部署流程到这里就结束了。
设置和系统设置以及MCP,skills,插件市场,subAgent编队等等内容可以自行揣摩,官方的文档都有明确的说明。



使用愉快!