現場演示
加入我們的 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)、快照匯入/匯出、串流匯入/匯出以及函數參數和資料庫資料的執行時間驗證的內建功能。
一切都會自動擴展,並且可以免費啟動。