自己的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 的手动代理关掉,保持默认无代理状态,然后:

  1. 先启动 Quantumult X
  2. 再启动 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编队等等内容可以自行揣摩,官方的文档都有明确的说明。


使用愉快!

最后修改:2026 年 03 月 29 日
收款不要了,给孩子补充点点赞数吧