当一群有记忆、有目标、能交流的AI Agent被放进一个世界,会发生什么?
a16z的开源项目AI Town,一个多智能体(Multi-Agent)社会模拟系统。和聊天机器人不同,Agent相互认识、对话、形成关系。
本质上是一个基于大语言模型的多智能体仿真框架,通过外置的Agent Memory和强一致的World State,实现可并行运行、可记忆、可演化的多Agent系统。
三十分钟部署AI小镇,用Docker + Ollama + Convex的架构,看看小人儿会在盒子里玩什么。
界面展示
开始部署
0、前置条件
从官网下载并安装Docker desktop和Ollama。
1、拉取项目
这个项目在Github上,我们计划采用命令行部署。
因为网络问题,我这里将zip包下载后解压到项目文件夹中。
打开终端,cd到项目文件夹,分别输入git init、git add .、git commit -m "init from zip"假装是从git上clone下来的,以防不必要的错误。\
如果网络没问题的话,这步直接输入git clone https://github.com/a16z-infra/ai-town.git拉取项目即可。
2、配置AI大模型
两种方式启动ollama,一是在终端中输入ollama serve启动,二是直接点击桌面版图标启动。
在终端中输入ollama pull llama3,默认拉取的是llama3最新的模型,Llama 3 8B,同时默认会用适合机器的GGUF量化。
3、Docker中构建
为了方便后续管理和改动项目,采用Docker部署,这样干净方便一点。
在终端输入docker compose -p aitown_clean up --build -d
这一步中,用-p给项目起名叫aitown_clean,这样所有资源都带这个前缀,方便后续找到进行删改。然后根据docker-compose.yml文件重新构建镜像,在后台创建并启动所有服务。
4、生成并写入admin key
终端的项目中,输入docker compose -p aitown_clean exec backend ./generate_admin_key.sh,生成后台admin key。\
然后在项目根目录创建.env.local,输入
cat > .env.local <<'EOF'CONVEX_SELF_HOSTED_ADMIN_KEY="上一步生成的admin key>"CONVEX_SELF_HOSTED_URL="http://127.0.0.1:3210"
5、把.env.local统一成容器可访问地址
这里报错fetch failed,是因为我是frontend容器里跑predev,它去访问http://127.0.0.1:3210,但在容器里127.0.0.1指的是“frontend 容器自己”,不是backend(convex)服务。所以要把URL改成backend容器名。
输入perl -pi -e 's|^VITE_CONVEX_URL=.*$|VITE_CONVEX_URL="http://backend:3210"|' .env.local 2>/dev/null || true
把VITE_CONVEX_URL改为容器可达地址,同步把CONVEX_SELF_HOSTED_URL也改掉。
同时输入sed -i '' 's|^CONVEX_SELF_HOSTED_URL=.*|CONVEX_SELF_HOSTED_URL="http://backend:3210"|' .env.local。
6、重新跑一次初始化
输入docker compose -p aitown_clean exec frontend npm run predev
顺利完成。
7、配置ollama链接地址,配置模型
接下来就要配置ollama了,要在容器里写Convex环境变量。
输入
docker compose -p aitown_clean exec frontend \ npx convex env set OLLAMA_HOST http://host.docker.internal:11434docker compose -p aitown_clean exec frontend \ npx convex env set OLLAMA_MODEL llama3:latest
显示ollama is running。
重启一下确保稳定,输入\
docker compose -p aitown_clean restart
8、登录
到这一步基本上大功告成了,在浏览器输入网址http://localhost:5173,就可以打开前端页面操作了。
可以加入自己的角色与他们交互。
输入http://localhost:6791可以进入后台查看运行情况。
9、开启与关闭
可以在docker中关闭服务,回头下次再启动,用以下两条命令。
docker compose -p aitown_clean stop
docker compose -p aitown_clean start