Live-Demo
Treten Sie unserer Community Discord bei: AI Stack Devs
AI Town ist eine virtuelle Stadt, in der KI-Charaktere leben, chatten und Kontakte knüpfen.
Bei diesem Projekt handelt es sich um ein einsetzbares Starterkit zum einfachen Erstellen und Anpassen Ihrer eigenen Version der KI-Stadt. Inspiriert durch die Forschungsarbeit Generative Agents: Interactive Simulacra of Human Behavior .
Das Hauptziel dieses Projekts besteht nicht nur darin, dass es viel Spaß macht, daran zu arbeiten, sondern auch darin, eine Plattform mit einem starken Fundament bereitzustellen, das erweitert werden kann. Das Back-End unterstützt nativ einen gemeinsamen globalen Status, Transaktionen und eine Simulations-Engine und sollte für alles geeignet sein, von einem einfachen Projekt zum Herumspielen bis hin zu einem skalierbaren Mehrspielerspiel. Ein sekundäres Ziel besteht darin, ein JS/TS-Framework verfügbar zu machen, da die meisten Simulatoren in diesem Bereich (einschließlich des Originalpapiers oben) in Python geschrieben sind.
llama3
und Einbettungen mit mxbai-embed-large
.Hinweis : Es gibt eine One-Click-Installation eines Forks dieses Projekts auf Pinokio für alle, die daran interessiert sind, es auszuführen, aber nicht zu verändern?
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
npm install
Laden Sie entweder eine vorgefertigte Binärdatei herunter (empfohlen) oder erstellen Sie sie aus dem Quellcode und führen Sie sie aus.
# 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
Dies wird auch just
installiert (z. B. brew install just
oder cargo install just
). Wir verwenden just
wie make
, um zusätzliche Parameter hinzuzufügen, sodass Sie für die lokale Entwicklung just convex ...
anstelle von npx convex ...
ausführen.
Wenn Sie die vorgefertigte Binärdatei auf einem Mac ausführen und eine Apple-Warnung angezeigt wird, gehen Sie zu dem Ordner, in dem sie sich befindet, klicken Sie mit der rechten Maustaste darauf und wählen Sie „Öffnen“, um sie zu umgehen. Von da an können Sie es über die Befehlszeile ausführen. Oder Sie können es aus dem Quellcode kompilieren und ausführen (siehe oben).
Sie können die App laufen lassen oder ollama serve
ausführen. ollama serve
warnt Sie, wenn die App bereits ausgeführt wird. Führen Sie ollama pull llama3
aus, um llama3
herunterzuladen. Testen Sie es mit ollama run llama3
. Wenn Sie anpassen möchten, welches Modell verwendet werden soll, passen Sie convex/util/llm.ts an oder legen Sie just convex env set LLM_MODEL # model
fest. Ollama-Modelloptionen finden Sie hier.
Möglicherweise möchten Sie NUM_MEMORIES_TO_SEARCH
in konstanten.ts auf 1
setzen, um die Größe der Konversationsaufforderungen zu reduzieren, wenn Sie eine Langsamkeit feststellen.
Sehen Sie sich convex/config.ts
an, um zu konfigurieren, welche Modelle der Benutzeroberfläche angeboten werden sollen, oder um sie für die Kommunikation mit einem in der Cloud gehosteten LLM einzurichten.
Erstellen Sie für die tägliche Generierung von Hintergrundmusik ein Replikatkonto und erstellen Sie ein Token auf der API-Token-Seite Ihres Profils. just convex env set REPLICATE_API_TOKEN # token
So führen Sie sowohl das Front- als auch das Back-End aus:
npm run dev
Hinweis : Wenn beim Start der Anwendung ein Knotenversionsfehler auf dem Convex-Server auftritt, verwenden Sie bitte Knotenversion 18, die am stabilsten ist. Eine Möglichkeit, dies zu tun, besteht darin, nvm zu installieren und nvm install 18
oder nvm use 18
auszuführen. Tun Sie dies, bevor Sie sowohl npm run dev
oben als auch ./convex-local-backend
in Schritt 2 ausführen.
Sie können jetzt http://localhost:5173 besuchen.
Wenn Sie das Frontend lieber in einem separaten Terminal als Convex ausführen möchten (das Ihre Backend-Funktionen beim Speichern synchronisiert), können Sie diese beiden Befehle ausführen:
npm run dev:frontend
npm run dev:backend
Weitere Informationen finden Sie in package.json, aber dev:backend führt just convex dev
aus
Hinweis : Die Simulation wird nach 5 Minuten angehalten, wenn das Fenster inaktiv ist. Durch das Laden der Seite wird die Pause aufgehoben. Sie können die Welt auch manuell mit einer Schaltfläche in der Benutzeroberfläche einfrieren und wieder freigeben. Wenn Sie die Welt ohne den Browser ausführen möchten, können Sie den Cron „Inaktive Welten stoppen“ in convex/crons.ts
auskommentieren.
Um das Backend zu stoppen, falls zu viel Aktivität herrscht
Dadurch werden die Engine und die Agenten nicht mehr ausgeführt. Sie können weiterhin Abfragen ausführen und Funktionen zum Debuggen ausführen.
just convex run testing:stop
Um das Backend neu zu starten, nachdem es gestoppt wurde
just convex run testing:resume
Um die Engine zu starten, falls die Spiel-Engine oder die Agenten nicht laufen
just convex run testing:kick
Um die Welt zu archivieren
Wenn Sie die Welt zurücksetzen und von vorne beginnen möchten, können Sie die aktuelle Welt archivieren:
just convex run testing:archive
Dann können Sie die weltweiten Daten weiterhin im Dashboard anzeigen, die Engine und die Agenten werden jedoch nicht mehr ausgeführt.
Anschließend können Sie mit init
eine neue Welt erstellen.
just convex run init
Zum Löschen aller Datenbanken
Mit der Testfunktion wipeAllTables
können Sie alle Tabellen löschen.
just convex run testing:wipeAllTables
Um Ihre Backend-Bereitstellung anzuhalten
Sie können im Dashboard zu Ihren Bereitstellungseinstellungen gehen, um Ihre Bereitstellung anzuhalten und die Pause aufzuheben. Dadurch werden alle Funktionen gestoppt, unabhängig davon, ob sie vom Client aufgerufen, geplant oder als Cron-Job ausgeführt werden. Betrachten Sie dies als letzten Ausweg, da es oben sanftere Möglichkeiten gibt, anzuhalten. Einmal du
Ändern Sie Ihre package.json
-Datei, um die Option --host
zu Ihrem Front-End-Server (Vite) hinzuzufügen:
{
"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/ "
}
}
Führen Sie den folgenden Befehl aus, um Docker Compose zu starten:
docker-compose up --build
Sobald Sie fertig sind, können Sie das Terminal schließen.
Starten Sie in einem anderen Terminal, immer noch im aitown
-Verzeichnis, ein interaktives Docker-Terminal:
docker-compose exec ai-town /bin/bash
Laden Sie das lokale Convex-Backend herunter und entpacken Sie es:
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
Stellen Sie sicher, dass sich die Datei convex-local-backend
im Verzeichnis befindet, und entfernen Sie dann die ZIP-Datei:
rm convex-local-backend-x86_64-unknown-linux-gnu.zip
Machen Sie die Datei ausführbar:
chmod +x /usr/src/app/convex-local-backend
Starten Sie den Convex-Backend-Server:
./convex-local-backend
Starten Sie in einem anderen Terminal im aitown
-Verzeichnis neu:
docker-compose exec ai-town /bin/bash
Konfigurieren Sie socat
mit der IP-Adresse des Hosts:
HOST_IP=YOUR-HOST-IP # Use your host's IP address (not the Docker IP)
socat TCP-LISTEN:11434,fork TCP: $HOST_IP :11434 &
Testen Sie die Verbindung:
curl http://localhost:11434/
Wenn da steht „Ollama läuft“, ist das gut!
Stellen Sie sicher, dass Convex weiß, wo Ollama zu finden ist (um einen zufälligen mysteriösen Fehler zu überspringen ...):
just convex env set OLLAMA_HOST http://localhost:11434
Aktualisieren Sie die Browserliste:
npx update-browserslist-db@latest
KI-Stadt starten:
npm run dev
Starten Sie den Container und öffnen Sie dann einfach zwei Terminals in Ihrem AI-town-Ordner mit docker-compose exec ai-town /bin/bash
Starten Sie den Convex-Backend-Server: bash ./convex-local-backend
Und im zweiten Terminal konfigurieren Sie einfach Socat und starten AI Town.
Zuerst müssen Sie WSL2 installieren. Befolgen Sie diese Anleitung, um WSL2 auf Ihrem Windows-Computer einzurichten. Wir empfehlen die Verwendung von Ubuntu als Linux-Distribution.
Öffnen Sie Ihr WSL-Terminal (Ubuntu) und aktualisieren Sie Ihre Pakete:
sudo apt update
NVM (Node Version Manager) hilft bei der Verwaltung mehrerer Versionen von Node.js. Installieren Sie NVM und Node.js 18 (die stabile Version):
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
Für einige Abhängigkeiten ist Python erforderlich. Installieren Sie Python und Pip:
sudo apt-get install python3 python3-pip
sudo ln -s /usr/bin/python3 /usr/bin/python
unzip
und socat
installieren:
sudo apt install unzip socat
Cargo ist der Rust-Paketmanager. Installieren Sie Rust und Cargo:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
just
mit Cargo installieren wird just
zum Ausführen von Befehlen verwendet. Installieren Sie es mit Cargo:
cargo install just
export PATH="$HOME/.cargo/bin:$PATH"
just --version
socat
als Bridge-Ports für OllamaFühren Sie den folgenden Befehl aus, um Ports zu überbrücken und die Kommunikation zwischen Convex und Ollama zu ermöglichen:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
Testen Sie, ob es funktioniert:
curl http://127.0.0.1:11434
Wenn die Antwort „OK“ ist, ist die Ollama-API zugänglich.
Klonen Sie das AI Town-Repository von GitHub:
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
Installieren Sie die erforderlichen npm-Pakete:
npm install
Laden Sie die vorkompilierte Version von Convex herunter und installieren Sie sie:
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
Starten Sie Convex in einem separaten Terminal:
./convex-local-backend
Legen Sie den Ollama-Host in konvex fest:
just convex env set OLLAMA_HOST http://localhost:11434
Starten Sie abschließend AI Town:
npm run dev
Besuchen Sie http://localhost:5173
in Ihrem Browser, um AI Town in Aktion zu sehen.
Wenn Sie die Dienste neu starten müssen:
Stellen Sie sicher, dass socat
ausgeführt wird:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
Konvex starten:
./convex-local-backend
In einem anderen Terminal: 3. AI Town starten:
npm run dev
HINWEIS: Jedes Mal, wenn Sie Zeichendaten ändern, sollten Sie just convex run testing:wipeAllTables
und dann npm run dev
erneut ausführen, um alles erneut nach Convex hochzuladen. Dies liegt daran, dass Zeichendaten beim ersten Laden an Convex gesendet werden. Beachten Sie jedoch, dass just convex run testing:wipeAllTables
alle Ihre Daten löscht.
Erstellen Sie Ihre eigenen Charaktere und Geschichten: Alle Charaktere und Geschichten sowie ihre Spritesheet-Referenzen werden in Characters.ts gespeichert. Sie können damit beginnen, die Charakterbeschreibungen zu ändern.
Spritesheets aktualisieren: In data/characters.ts
sehen Sie diesen Code:
export const characters = [
{
name : 'f1' ,
textureUrl : '/assets/32x32folk.png' ,
spritesheetData : f1SpritesheetData ,
speed : 0.1 ,
} ,
...
] ;
Sie sollten ein Sprite-Sheet für Ihren Charakter finden und Sprite-Bewegungen/Assets in der entsprechenden Datei definieren (im obigen Beispiel wurde f1SpritesheetData
in f1.ts definiert).
Aktualisieren Sie den Hintergrund (Umgebung): Die Karte wird in convex/init.ts
von data/gentle.js
geladen. Um die Karte zu aktualisieren, gehen Sie folgendermaßen vor:
convertMap.js
um den JSON in ein Format zu konvertieren, das die Engine verwenden kann. node data/convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>
<mapDataPath>
: Pfad zur gekachelten JSON-Datei.<assetPath>
: Pfad zu Tileset-Bildern.<tilesetpxw>
: Tileset-Breite in Pixel.<tilesetpxh>
: Tileset-Höhe in Pixel. Erzeugt converted-map.js
, das Sie wie gentle.js
verwenden könnenconvex/music.ts
ändernconvex/crons.ts
generiert werden soll, indem Sie den Job generate new background music
ändern Konfigurieren Sie convex/util/llm.ts
oder legen Sie diese Umgebungsvariablen fest:
just convex env set LLM_API_HOST # url
just convex env set LLM_MODEL # model
Die Konfiguration des Einbettungsmodells muss im Code geändert werden, da Sie die Einbettungsdimension angeben müssen.
Für Together.ai besuchen Sie https://api.together.xyz/settings/api-keys. Für OpenAI besuchen Sie https://platform.openai.com/account/api-keys
Sie können Ihr Convex-Backend in der Cloud ausführen, indem Sie es einfach ausführen
npx convex dev --until-success --configure
Und aktualisieren Sie die package.json
-Skripte, um sie just
zu entfernen: Ändern Sie just convex ...
in convex ...
.
Anschließend müssen Sie alle Umgebungsvariablen festlegen, die Sie lokal in der Cloud-Umgebung mit npx convex env set
oder im Dashboard hatten: https://dashboard.convex.dev/deployment/settings/environment-variables
Bevor Sie die App ausführen können, müssen Sie sicherstellen, dass die Convex-Funktionen in der Produktionsumgebung bereitgestellt werden.
npx convex deploy
aus, um die konvexen Funktionen in der Produktion bereitzustellennpx convex run init --prod
Wenn Sie vorhandene Daten löschen möchten, können Sie npx convex run testing:wipeAllTables --prod
ausführen
Mit git revert b44a436
können Sie die Sachbearbeiter-Authentifizierung wieder hinzufügen. Oder schauen Sie sich einfach dieses Diff an, um herauszufinden, was sich geändert hat, um es zu entfernen.
Erstellen Sie ein Clerk-Konto
VITE_CLERK_PUBLISHABLE_KEY
und CLERK_SECRET_KEY
zu .env.local
hinzu 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
ausführen.vercel --prod
auf Vercel bereit. Wir unterstützen die Verwendung von Ollama für Konversationsgenerierungen. Um über das Internet darauf zugreifen zu können, können Sie Tunnelmole oder Ngrok oder ähnliches verwenden.
Verwendung von Tunnelmole
Tunnelmole ist ein Open-Source-Tunneling-Tool.
Sie können Tunnelmole mit einer der folgenden Optionen installieren:
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
Datei für Windows hier herunter und legen Sie sie irgendwo in Ihrem PATH ab.Führen Sie nach der Installation von Tunnelmole den folgenden Befehl aus:
tmole 11434
Tunnelmole sollte eine eindeutige URL ausgeben, sobald Sie diesen Befehl ausführen.
Mit Ngrok
Ngrok ist ein beliebtes Closed-Source-Tunneling-Tool.
Sobald ngrok installiert und authentifiziert ist, führen Sie den folgenden Befehl aus:
ngrok http http://localhost:11434
Ngrok sollte eine eindeutige URL ausgeben, sobald Sie diesen Befehl ausführen.
Ollama-Endpunkt zu Convex hinzufügen
just convex env set OLLAMA_HOST # your tunnelmole/ngrok unique url from the previous step
Aktualisieren Sie Ollama-Domänen
Ollama verfügt über eine Liste akzeptierter Domains. Fügen Sie die ngrok-Domäne hinzu, damit der Datenverkehr nicht abgelehnt wird. Weitere Informationen finden Sie unter ollama.ai.
Convex ist eine gehostete Backend-Plattform mit integrierter Datenbank, mit der Sie Ihr Datenbankschema und Ihre Serverfunktionen in TypeScript schreiben können. Serverseitige Datenbankabfragen speichern und abonnieren Daten automatisch und ermöglichen so einen Echtzeit useQuery
Hook in unserem React-Client. Es gibt auch Clients für Python, Rust, ReactNative und Node sowie eine einfache HTTP-API.
Die Datenbank unterstützt Dokumente im NoSQL-Stil mit optionaler Schemavalidierung, Beziehungen und benutzerdefinierten Indizes (einschließlich für Felder in verschachtelten Objekten).
Die query
und mutation
verfügen über transaktionalen Zugriff mit geringer Latenz auf die Datenbank und nutzen unsere v8
-Laufzeit mit Determinismus-Leitplanken, um die stärksten ACID-Garantien auf dem Markt zu bieten: sofortige Konsistenz, serialisierbare Isolierung und automatische Konfliktlösung über optimistische Parallelitätskontrolle mehrerer Versionen (OCC / MVCC).
Die action
haben Zugriff auf externe APIs und ermöglichen andere Nebenwirkungen und Nichtdeterminismus entweder in unserer optimierten v8
Laufzeit oder einer flexibleren node
.
Über Scheduling- und Cron-Jobs können Funktionen im Hintergrund ausgeführt werden.
Die Entwicklung erfolgt cloud-first, mit Hot-Reloads für die Bearbeitung von Serverfunktionen über die CLI, Vorschaubereitstellungen, Protokollierung und Ausnahmeberichtsintegrationen. Es gibt eine Dashboard-Benutzeroberfläche zum Durchsuchen und Bearbeiten von Daten, Bearbeiten von Umgebungsvariablen, Anzeigen von Protokollen, Ausführen von Serverfunktionen und mehr .
Es gibt integrierte Funktionen für reaktive Paginierung, Dateispeicherung, reaktive Textsuche, Vektorsuche, https-Endpunkte (für Webhooks), Snapshot-Import/Export, Streaming-Import/Export und Laufzeitvalidierung für Funktionsargumente und Datenbankdaten.
Alles skaliert automatisch und der Start ist kostenlos.