当一群有记忆、有目标、能交流的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