现场演示
加入我们的 Discord 社区:AI 堆栈开发人员
AI Town 是一个虚拟城镇,AI 角色在此居住、聊天和社交。
该项目是一个可部署的入门套件,可轻松构建和定制您自己的 AI 城镇版本。受到研究论文生成代理:人类行为的交互式模拟的启发。
该项目的主要目标不仅仅是工作起来很有趣,还在于提供一个具有坚实基础且可扩展的平台。后端本身支持共享的全局状态、事务和模拟引擎,并且应该适合从简单的项目到可扩展的多人游戏的所有内容。第二个目标是使 JS/TS 框架可用,因为该领域的大多数模拟器(包括上面的原始论文)都是用 Python 编写的。
llama3
,嵌入为mxbai-embed-large
。注意:对于任何有兴趣运行但不修改它的人来说,Pinokio 上有一个该项目的分支的一键安装?
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
npm install
下载预构建的二进制文件(推荐),或从源代码构建并运行它。
# For new Macs:
curl -L -O https://github.com/get-convex/convex-backend/releases/latest/download/convex-local-backend-aarch64-apple-darwin.zip
unzip convex-local-backend-aarch64-apple-darwin.zip
brew install just
# Runs the server
./convex-local-backend
这也just
安装(例如brew install just
或cargo install just
)。我们使用just
make
一样添加额外的参数,因此您just convex ...
而不是npx convex ...
进行本地开发。
如果您在 Mac 上运行预构建的二进制文件并且出现 Apple 警告,请转到它所在的文件夹并右键单击它并选择“打开”以绕过。从那时起,您可以从命令行运行它。或者您可以从源代码编译它并运行它(见上文)。
您可以让应用程序保持运行或运行ollama serve
。如果应用程序已在运行, ollama serve
会警告您。运行ollama pull llama3
以下载llama3
。使用ollama run llama3
进行测试。如果您想自定义使用哪个模型,请调整凸/util/llm.ts或just convex env set LLM_MODEL # model
。 Ollama 模型选项可在此处找到。
如果您发现速度缓慢,您可能需要在 Constants.ts 中将NUM_MEMORIES_TO_SEARCH
设置为1
,以减少对话提示的大小。
查看convex/config.ts
以配置向 UI 提供哪些模型,或将其设置为与云托管的 LLM 对话。
对于每日背景音乐生成,创建一个复制帐户并在您的个人资料的 API 令牌页面中创建一个令牌。 just convex env set REPLICATE_API_TOKEN # token
要同时运行前端和后端:
npm run dev
注意:如果在应用程序启动时遇到凸服务器上的节点版本错误,请使用节点版本18,这是最稳定的。一种方法是安装 nvm 并运行nvm install 18
或nvm use 18
。在上面的npm run dev
和步骤 2 中的./convex-local-backend
之前执行此操作。
您现在可以访问 http://localhost:5173。
如果您希望在与 Convex 不同的终端中运行前端(它会在保存后端函数时同步它们),您可以运行以下两个命令:
npm run dev:frontend
npm run dev:backend
有关详细信息,请参阅 package.json,但 dev:backend just convex dev
注意:如果窗口空闲,模拟将在 5 分钟后暂停。加载页面将取消暂停。您还可以使用用户界面中的按钮手动冻结和解冻世界。如果你想在没有浏览器的情况下运行世界,你可以在convex/crons.ts
中注释掉“停止不活动的世界”cron。
停止后端,以防活动过多
这将停止运行引擎和代理。您仍然可以运行查询并运行函数来调试。
just convex run testing:stop
停止后重新启动后端
just convex run testing:resume
在游戏引擎或代理未运行的情况下启动引擎
just convex run testing:kick
为世界存档
如果您想重置世界并从头开始,您可以存档当前世界:
just convex run testing:archive
然后,您仍然可以在仪表板中查看世界数据,但引擎和代理将不再运行。
然后您可以使用init
创建一个新的世界。
just convex run init
清除所有数据库
您可以使用wipeAllTables
测试函数擦除所有表。
just convex run testing:wipeAllTables
暂停后端部署
您可以转到仪表板的部署设置来暂停和取消暂停部署。这将停止所有功能,无论是从客户端调用、计划的还是作为 cron 作业调用。请将此视为最后的手段,因为上面有更温和的方法可以停止。一旦你
修改您的package.json
文件以将--host
选项添加到您的前端服务器(Vite):
{
"name" : " ai-town " ,
"version" : " 0.0.0 " ,
"private" : true ,
"scripts" : {
"dev" : " npm-run-all --parallel dev:frontend dev:backend " ,
"build" : " tsc && vite build " ,
"lint" : " eslint . " ,
"predev" : " just convex dev --run init --until-success " ,
"dev:backend" : " just convex dev --tail-logs " ,
"dev:frontend" : " vite --host " , // <------------------------------------------ modify this line
"test" : " NODE_OPTIONS=--experimental-vm-modules jest --verbose " ,
"le" : " vite src/editor/ "
}
}
运行以下命令来启动 Docker Compose:
docker-compose up --build
完成后,您可以关闭终端。
在另一个终端中,仍在aitown
目录中,启动交互式 Docker 终端:
docker-compose exec ai-town /bin/bash
下载并解压本地Convex后端:
curl -L -O https://github.com/get-convex/convex-backend/releases/download/precompiled-2024-06-28-91981ab/convex-local-backend-x86_64-unknown-linux-gnu.zip
unzip convex-local-backend-x86_64-unknown-linux-gnu.zip
验证convex-local-backend
文件是否在目录中,然后删除 zip 文件:
rm convex-local-backend-x86_64-unknown-linux-gnu.zip
使文件可执行:
chmod +x /usr/src/app/convex-local-backend
启动 Convex 后端服务器:
./convex-local-backend
在另一个终端的aitown
目录中,重新启动:
docker-compose exec ai-town /bin/bash
使用主机的 IP 地址配置socat
:
HOST_IP=YOUR-HOST-IP # Use your host's IP address (not the Docker IP)
socat TCP-LISTEN:11434,fork TCP: $HOST_IP :11434 &
测试连接:
curl http://localhost:11434/
如果它显示“Ollama is running”,那就太好了!
确保 Convex 知道在哪里可以找到 Ollama(跳过随机的神秘错误......):
just convex env set OLLAMA_HOST http://localhost:11434
更新浏览器列表:
npx update-browserslist-db@latest
启动人工智能小镇:
npm run dev
启动容器,然后只需使用 docker-compose exec ai-town /bin/bash 在 AI-town 文件夹中打开两个终端
启动 Convex 后端服务器: bash ./convex-local-backend
在第二个终端中,只需配置 Socat,启动 AI Town。
首先,您需要安装 WSL2。请按照本指南在 Windows 计算机上设置 WSL2。我们建议使用 Ubuntu 作为您的 Linux 发行版。
打开 WSL 终端 (Ubuntu) 并更新您的软件包:
sudo apt update
NVM(节点版本管理器)有助于管理 Node.js 的多个版本。安装 NVM 和 Node.js 18(稳定版本):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
source ~/.bashrc
nvm install 18
nvm use 18
某些依赖项需要 Python。安装 Python 和 Pip:
sudo apt-get install python3 python3-pip
sudo ln -s /usr/bin/python3 /usr/bin/python
安装unzip
和socat
:
sudo apt install unzip socat
Cargo 是 Rust 包管理器。安装 Rust 和 Cargo:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
just
使用 Cargo 安装just
用于运行命令。与 Cargo 一起安装:
cargo install just
export PATH="$HOME/.cargo/bin:$PATH"
just --version
socat
配置为 Ollama 的桥接端口运行以下命令来桥接端口,从而允许 Convex 和 Ollama 之间进行通信:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
测试是否有效:
curl http://127.0.0.1:11434
如果响应正常,则可以访问 Ollama API。
从 GitHub 克隆 AI Town 存储库:
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
安装必要的 npm 包:
npm install
下载并安装Convex的预编译版本:
curl -L -O https://github.com/get-convex/convex-backend/releases/download/precompiled-2024-06-28-91981ab/convex-local-backend-x86_64-unknown-linux-gnu.zip
unzip convex-local-backend-x86_64-unknown-linux-gnu.zip
rm convex-local-backend-x86_64-unknown-linux-gnu.zip
chmod +x convex-local-backend
在单独的终端中,启动 Convex:
./convex-local-backend
在 Convex 中设置 Ollama 主机:
just convex env set OLLAMA_HOST http://localhost:11434
最后启动AI小镇:
npm run dev
在浏览器中访问http://localhost:5173
以查看 AI Town 的运行情况。
如果需要重启服务:
确保socat
正在运行:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
发射凸:
./凸本地后端
在另一个终端中: 3. 启动 AI Town:
npm run dev
注意:每次更改字符数据时,您应该重新运行just convex run testing:wipeAllTables
,然后npm run dev
将所有内容重新上传到凸。这是因为字符数据在初始加载时发送到 Convex。但是,请注意, just convex run testing:wipeAllTables
将擦除所有数据。
创建您自己的角色和故事:所有角色和故事以及它们的精灵表引用都存储在characters.ts中。您可以从更改角色描述开始。
更新 spritesheets:在data/characters.ts
中,您将看到以下代码:
export const characters = [
{
name : 'f1' ,
textureUrl : '/assets/32x32folk.png' ,
spritesheetData : f1SpritesheetData ,
speed : 0.1 ,
} ,
...
] ;
您应该为您的角色找到一个精灵表,并在相应的文件中定义精灵运动/资源(在上面的示例中, f1SpritesheetData
是在 f1.ts 中定义的)
更新背景(环境):地图从data/gentle.js
加载到convex/init.ts
中。要更新地图,请执行以下步骤:
convertMap.js
脚本将JSON 转换为引擎可以使用的格式。 node data/convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>
<mapDataPath>
:平铺 JSON 文件的路径。<assetPath>
:图块集图像的路径。<tilesetpxw>
:图块集宽度(以像素为单位)。<tilesetpxh>
:图块集高度(以像素为单位)。生成converted-map.js
,您可以像gentle.js
一样使用它convex/music.ts
中的提示来改变背景音乐generate new background music
作业来更改在convex/crons.ts
生成新音乐的频率配置convex/util/llm.ts
或设置这些环境变量:
just convex env set LLM_API_HOST # url
just convex env set LLM_MODEL # model
嵌入模型配置需要在代码中更改,因为您需要指定嵌入维度。
对于 Together.ai,请访问 https://api.together.xyz/settings/api-keys 对于 OpenAI,请访问 https://platform.openai.com/account/api-keys
您只需运行即可在云中运行您的 Convex 后端
npx convex dev --until-success --configure
并更新package.json
脚本以删除just
:将just convex ...
更改为convex ...
。
然后,您需要使用npx convex env set
云环境中本地的任何环境变量:https://dashboard.convex.dev/deployment/settings/environment-variables
在运行应用程序之前,您需要确保凸函数已部署到其生产环境。
npx convex deploy
以将凸函数部署到生产环境npx convex run init --prod
如果您有想要清除的现有数据,可以运行npx convex run testing:wipeAllTables --prod
您可以使用git revert b44a436
添加职员身份验证。或者只需查看该差异以了解更改的内容即可将其删除。
开设一个文员账户
VITE_CLERK_PUBLISHABLE_KEY
和CLERK_SECRET_KEY
添加到.env.local
VITE_CLERK_PUBLISHABLE_KEY=pk_ ***
CLERK_SECRET_KEY=sk_ ***
just convex env set CLERK_ISSUER_URL # e.g. https://your-issuer-url.clerk.accounts.dev/
vercel login
从 codespaces cli 进行身份验证。vercel --prod
将应用程序部署到 Vercel。 我们支持使用 Ollama 进行对话生成。要从网络访问它,您可以使用 Tunnelmole 或 Ngrok 或类似的。
使用隧道摩尔
Tunnelmole 是一个开源隧道工具。
您可以使用以下选项之一安装 Tunnelmole:
npm install -g tunnelmole
curl -s https://tunnelmole.com/sh/install-linux.sh | sudo bash
curl -s https://tunnelmole.com/sh/install-mac.sh --output install-mac.sh && sudo bash install-mac.sh
exe
文件并将其放在 PATH 中的某个位置。安装 Tunnelmole 后,运行以下命令:
tmole 11434
运行此命令后,Tunnelmole 应该输出一个唯一的 url。
使用 Ngrok
Ngrok 是一种流行的闭源隧道工具。
安装并验证 ngrok 后,运行以下命令:
ngrok http http://localhost:11434
运行此命令后,Ngrok 应该输出一个唯一的 url。
将 Ollama 端点添加到 Convex
just convex env set OLLAMA_HOST # your tunnelmole/ngrok unique url from the previous step
更新 Ollama 域
Ollama 有一个接受域的列表。添加 ngrok 域,这样它就不会拒绝流量。有关更多详细信息,请参阅 ollama.ai。
Convex 是一个具有内置数据库的托管后端平台,可让您在 TypeScript 中编写数据库架构和服务器函数。服务器端数据库查询自动缓存和订阅数据,为我们的 React 客户端中的实时useQuery
挂钩提供支持。还有 Python、Rust、ReactNative 和 Node 的客户端,以及简单的 HTTP API。
该数据库支持 NoSQL 样式文档,具有选择加入模式验证、关系和自定义索引(包括嵌套对象中的字段)。
query
和mutation
服务器功能具有对数据库的事务性、低延迟访问,并利用我们的v8
运行时和确定性护栏来提供市场上最强大的 ACID 保证:立即一致性、可序列化隔离以及通过乐观多版本并发控制自动解决冲突(OCC/MVCC)。
action
服务器函数可以访问外部 API,并在我们优化的v8
运行时或更灵活的node
运行时中启用其他副作用和不确定性。
函数可以通过调度和 cron 作业在后台运行。
开发是云优先的,通过 CLI 进行服务器功能编辑的热重载、预览部署、日志记录和异常报告集成,有一个仪表板 UI 用于浏览和编辑数据、编辑环境变量、查看日志、运行服务器功能等。
有用于反应式分页、文件存储、反应式文本搜索、矢量搜索、https 端点(用于 webhooks)、快照导入/导出、流式导入/导出以及函数参数和数据库数据的运行时验证的内置功能。
一切都会自动扩展,并且可以免费启动。