Demo Langsung
Bergabunglah dengan komunitas kami Discord: AI Stack Devs
AI Town adalah kota virtual tempat karakter AI tinggal, mengobrol, dan bersosialisasi.
Proyek ini adalah starter kit yang dapat diterapkan untuk dengan mudah membangun dan menyesuaikan versi kota AI Anda sendiri. Terinspirasi oleh makalah penelitian Agen Generatif: Simulacra Interaktif Perilaku Manusia .
Tujuan utama dari proyek ini, selain menyenangkan untuk dikerjakan, adalah untuk menyediakan platform dengan landasan kuat yang dimaksudkan untuk diperluas. Back-end secara asli mendukung keadaan global bersama, transaksi, dan mesin simulasi dan harus cocok untuk segala hal mulai dari proyek sederhana untuk dimainkan hingga game multi-pemain yang skalabel. Tujuan kedua adalah membuat kerangka kerja JS/TS tersedia karena sebagian besar simulator di bidang ini (termasuk makalah asli di atas) ditulis dengan Python.
llama3
dan disematkan dengan mxbai-embed-large
.Catatan : Ada instalasi sekali klik dari fork proyek ini di Pinokio bagi siapa saja yang tertarik untuk menjalankannya tetapi tidak memodifikasinya?
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
npm install
Unduh biner yang sudah dibuat sebelumnya (disarankan), atau buat dari sumber dan jalankan.
# 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
Ini juga just
menginstal (misalnya brew install just
atau cargo install just
). Kami menggunakan just
make
untuk menambahkan parameter tambahan, jadi Anda just convex ...
alih-alih npx convex ...
untuk pengembangan lokal.
Jika Anda menjalankan biner bawaan di Mac dan ada peringatan Apple, buka folder tempatnya dan klik kanan, lalu pilih "Buka" untuk melewatinya. Sejak saat itu Anda dapat menjalankannya dari baris perintah. Atau Anda dapat mengkompilasinya dari sumber dan menjalankannya (lihat di atas).
Anda dapat membiarkan aplikasi berjalan atau menjalankan ollama serve
. ollama serve
akan memperingatkan Anda jika aplikasi sudah berjalan. Jalankan ollama pull llama3
untuk mengunduh llama3
. Uji dengan ollama run llama3
. Jika Anda ingin menyesuaikan model mana yang akan digunakan, sesuaikan convex/util/llm.ts atau setel just convex env set LLM_MODEL # model
. Pilihan model Ollama dapat ditemukan di sini.
Anda mungkin ingin menyetel NUM_MEMORIES_TO_SEARCH
ke 1
di konstanta.ts, untuk mengurangi ukuran perintah percakapan, jika Anda melihat kelambatan.
Lihat convex/config.ts
untuk mengonfigurasi model mana yang akan ditawarkan ke UI, atau mengaturnya agar terhubung dengan LLM yang dihosting di cloud.
Untuk pembuatan musik latar belakang harian, buat akun Replikasi dan buat token di halaman Token API Profil Anda. just convex env set REPLICATE_API_TOKEN # token
Untuk menjalankan bagian depan dan belakang:
npm run dev
Catatan : Jika Anda mengalami kesalahan versi node di server cembung saat aplikasi dimulai, silakan gunakan versi node 18, yang paling stabil. Salah satu cara untuk melakukannya adalah dengan menginstal nvm dan menjalankan nvm install 18
atau nvm use 18
. Lakukan ini sebelum npm run dev
di atas dan ./convex-local-backend
pada Langkah 2.
Anda sekarang dapat mengunjungi http://localhost:5173.
Jika Anda lebih suka menjalankan frontend di terminal terpisah dari Convex (yang menyinkronkan fungsi backend Anda saat disimpan), Anda dapat menjalankan dua perintah berikut:
npm run dev:frontend
npm run dev:backend
Lihat package.json untuk detailnya, tetapi dev:backend berjalan just convex dev
Catatan : Simulasi akan berhenti setelah 5 menit jika jendela dalam keadaan idle. Memuat halaman akan membatalkan jeda. Anda juga dapat membekukan & mencairkan dunia secara manual dengan sebuah tombol di UI. Jika Anda ingin menjalankan dunia tanpa browser, Anda dapat mengomentari cron "hentikan dunia yang tidak aktif" di convex/crons.ts
.
Untuk menghentikan bagian belakang, jika terjadi terlalu banyak aktivitas
Ini akan menghentikan pengoperasian mesin dan agen. Anda masih dapat menjalankan kueri dan menjalankan fungsi untuk melakukan debug.
just convex run testing:stop
Untuk memulai kembali bagian belakang setelah menghentikannya
just convex run testing:resume
Untuk mematikan mesin jika mesin permainan atau agen tidak berjalan
just convex run testing:kick
Untuk mengarsipkan dunia
Jika Anda ingin mengatur ulang dunia dan memulai dari awal, Anda dapat mengarsipkan dunia saat ini:
just convex run testing:archive
Kemudian, Anda masih dapat melihat data dunia di dashboard, namun mesin dan agen tidak lagi berjalan.
Anda kemudian dapat membuat dunia baru dengan init
.
just convex run init
Untuk menghapus semua database
Anda dapat menghapus semua tabel dengan fungsi pengujian wipeAllTables
.
just convex run testing:wipeAllTables
Untuk menjeda penerapan backend Anda
Anda dapat membuka dasbor ke pengaturan penerapan Anda untuk menjeda dan membatalkan jeda penerapan Anda. Ini akan menghentikan semua fungsi, baik yang dipanggil dari klien, terjadwal, atau sebagai tugas cron. Anggaplah ini sebagai pilihan terakhir, karena ada cara yang lebih lembut untuk berhenti di atas. Sekali kamu
Ubah file package.json
Anda untuk menambahkan opsi --host
ke server front-end Anda (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/ "
}
}
Jalankan perintah berikut untuk meluncurkan Docker Compose:
docker-compose up --build
Setelah selesai, Anda dapat menutup terminal.
Di terminal lain, masih dalam direktori aitown
, luncurkan terminal Docker interaktif:
docker-compose exec ai-town /bin/bash
Unduh dan unzip backend Convex lokal:
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
Pastikan file convex-local-backend
ada di direktori, lalu hapus file zip:
rm convex-local-backend-x86_64-unknown-linux-gnu.zip
Jadikan file dapat dieksekusi:
chmod +x /usr/src/app/convex-local-backend
Luncurkan server backend Cembung:
./convex-local-backend
Di terminal lain, di direktori aitown
, luncurkan kembali:
docker-compose exec ai-town /bin/bash
Konfigurasikan socat
dengan alamat IP host:
HOST_IP=YOUR-HOST-IP # Use your host's IP address (not the Docker IP)
socat TCP-LISTEN:11434,fork TCP: $HOST_IP :11434 &
Uji koneksi:
curl http://localhost:11434/
Jika tertulis "Ollama sedang berlari", itu bagus!
Pastikan Convex mengetahui di mana menemukan Ollama (untuk melewati bug misterius acak ...):
just convex env set OLLAMA_HOST http://localhost:11434
Perbarui daftar browser:
npx update-browserslist-db@latest
Luncurkan Kota AI:
npm run dev
luncurkan wadah lalu Cukup buka dua terminal di folder AI-town Anda dengan docker-compose exec ai-town /bin/bash
Luncurkan server backend Convex: bash ./convex-local-backend
Dan di terminal kedua cukup Konfigurasikan Socat, Luncurkan Kota AI.
Pertama, Anda perlu menginstal WSL2. Ikuti panduan ini untuk mengatur WSL2 di mesin Windows Anda. Kami merekomendasikan menggunakan Ubuntu sebagai distribusi Linux Anda.
Buka terminal WSL Anda (Ubuntu) dan perbarui paket Anda:
sudo apt update
NVM (Node Version Manager) membantu mengelola beberapa versi Node.js. Instal NVM dan Node.js 18 (versi stabil):
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 diperlukan untuk beberapa dependensi. Instal Python dan Pip:
sudo apt-get install python3 python3-pip
sudo ln -s /usr/bin/python3 /usr/bin/python
Instal unzip
dan socat
:
sudo apt install unzip socat
Cargo adalah manajer paket Rust. Instal Karat dan Kargo:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
just
dengan Cargo just
digunakan untuk menjalankan perintah. Instal dengan Cargo:
cargo install just
export PATH="$HOME/.cargo/bin:$PATH"
just --version
socat
ke Bridge Ports untuk OllamaJalankan perintah berikut untuk menjembatani port, memungkinkan komunikasi antara Convex dan Ollama:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
Uji apakah itu berfungsi:
curl http://127.0.0.1:11434
Jika responsnya OK, API Ollama dapat diakses.
Kloning repositori Kota AI dari GitHub:
git clone https://github.com/a16z-infra/ai-town.git
cd ai-town
Instal paket npm yang diperlukan:
npm install
Unduh dan instal versi Convex yang telah dikompilasi:
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
Di terminal terpisah, luncurkan Convex:
./convex-local-backend
Atur host Ollama di Convex:
just convex env set OLLAMA_HOST http://localhost:11434
Terakhir, luncurkan Kota AI:
npm run dev
Kunjungi http://localhost:5173
di browser Anda untuk melihat AI Town beraksi.
Jika Anda perlu memulai ulang layanan:
Pastikan socat
berjalan:
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
Luncurkan Cembung:
./cembung-lokal-backend
Di terminal lain : 3. Luncurkan AI Town:
npm run dev
CATATAN: setiap kali Anda mengubah data karakter, Anda harus menjalankan kembali just convex run testing:wipeAllTables
lalu npm run dev
untuk mengunggah ulang semuanya ke Convex. Ini karena data karakter dikirim ke Convex pada pemuatan awal. Namun, berhati-hatilah karena just convex run testing:wipeAllTables
AKAN menghapus semua data Anda.
Buat karakter dan cerita Anda sendiri: Semua karakter dan cerita, serta referensi spritesheetnya disimpan di character.ts. Anda bisa memulai dengan mengubah deskripsi karakter.
Memperbarui spritesheet: di data/characters.ts
, Anda akan melihat kode ini:
export const characters = [
{
name : 'f1' ,
textureUrl : '/assets/32x32folk.png' ,
spritesheetData : f1SpritesheetData ,
speed : 0.1 ,
} ,
...
] ;
Anda harus menemukan sprite sheet untuk karakter Anda, dan menentukan gerakan/aset sprite di file yang sesuai (dalam contoh di atas, f1SpritesheetData
didefinisikan di f1.ts)
Perbarui Latar Belakang (Lingkungan): Peta dimuat dalam convex/init.ts
dari data/gentle.js
. Untuk memperbarui peta, ikuti langkah-langkah berikut:
convertMap.js
untuk mengonversi JSON ke format yang dapat digunakan mesin. node data/convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>
<mapDataPath>
: Jalur ke file Tiled JSON.<assetPath>
: Jalur ke gambar kumpulan ubin.<tilesetpxw>
: Lebar ubin dalam piksel.<tilesetpxh>
: Tinggi ubin dalam piksel. Menghasilkan converted-map.js
yang dapat Anda gunakan seperti gentle.js
convex/music.ts
convex/crons.ts
dengan memodifikasi tugas generate new background music
Konfigurasikan convex/util/llm.ts
atau atur variabel env berikut:
just convex env set LLM_API_HOST # url
just convex env set LLM_MODEL # model
Konfigurasi model embeddings perlu diubah dalam kode, karena Anda perlu menentukan dimensi embeddings.
Untuk Together.ai, kunjungi https://api.together.xyz/settings/api-keys Untuk OpenAI, kunjungi https://platform.openai.com/account/api-keys
Anda dapat menjalankan backend Convex di cloud hanya dengan menjalankannya
npx convex dev --until-success --configure
Dan memperbarui skrip package.json
untuk menghapus just
: ubah just convex ...
menjadi convex ...
.
Anda kemudian harus mengatur variabel lingkungan apa pun yang Anda miliki secara lokal di lingkungan cloud dengan npx convex env set
atau di dasbor: https://dashboard.convex.dev/deployment/settings/environment-variables
Sebelum dapat menjalankan aplikasi, Anda perlu memastikan fungsi Convex diterapkan ke lingkungan produksinya.
npx convex deploy
untuk menerapkan fungsi cembung ke produksinpx convex run init --prod
Jika Anda memiliki data yang ingin Anda hapus, Anda dapat menjalankan npx convex run testing:wipeAllTables --prod
Anda dapat menambahkan kembali auth petugas dengan git revert b44a436
. Atau lihat saja perbedaan itu untuk mengetahui apa yang berubah untuk menghapusnya.
Buat akun Panitera
VITE_CLERK_PUBLISHABLE_KEY
dan CLERK_SECRET_KEY
ke .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
.vercel --prod
. Kami mendukung penggunaan Ollama untuk generasi percakapan. Agar dapat diakses dari web, Anda dapat menggunakan Tunnelmole atau Ngrok atau sejenisnya.
Menggunakan Tunnelmole
Tunnelmole adalah alat penerowongan sumber terbuka.
Anda dapat menginstal Tunnelmole menggunakan salah satu opsi berikut:
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
untuk Windows di sini dan letakkan di suatu tempat di PATH Anda.Setelah Tunnelmole diinstal, jalankan perintah berikut:
tmole 11434
Tunnelmole akan menampilkan url unik setelah Anda menjalankan perintah ini.
Menggunakan Ngrok
Ngrok adalah alat penerowongan sumber tertutup yang populer.
Setelah ngrok diinstal dan diautentikasi, jalankan perintah berikut:
ngrok http http://localhost:11434
Ngrok akan menampilkan url unik setelah Anda menjalankan perintah ini.
Tambahkan titik akhir Ollama ke Convex
just convex env set OLLAMA_HOST # your tunnelmole/ngrok unique url from the previous step
Perbarui domain Ollama
Ollama memiliki daftar domain yang diterima. Tambahkan domain ngrok agar tidak menolak trafik. lihat ollama.ai untuk lebih jelasnya.
Convex adalah platform backend yang dihosting dengan database bawaan yang memungkinkan Anda menulis skema database dan fungsi server di TypeScript. Kueri basis data sisi server secara otomatis melakukan cache dan berlangganan data, mendukung useQuery
hook real-time di klien React kami. Ada juga klien untuk Python, Rust, ReactNative, dan Node, serta API HTTP sederhana.
Basis data mendukung dokumen bergaya NoSQL dengan validasi skema keikutsertaan, hubungan, dan indeks khusus (termasuk pada bidang di objek bersarang).
Fungsi server query
dan mutation
memiliki akses transaksional, latensi rendah ke database dan memanfaatkan runtime v8
kami dengan pagar pembatas determinisme untuk memberikan jaminan ACID terkuat di pasar: konsistensi langsung, isolasi serial, dan resolusi konflik otomatis melalui kontrol konkurensi multi-versi yang optimis (OCC/MVCC).
Fungsi server action
memiliki akses ke API eksternal dan mengaktifkan efek samping dan non-determinisme lainnya baik dalam runtime v8
kami yang dioptimalkan atau runtime node
yang lebih fleksibel.
Fungsi dapat berjalan di latar belakang melalui penjadwalan dan tugas cron.
Pengembangan bersifat cloud-first, dengan hot reload untuk pengeditan fungsi server melalui CLI, pratinjau penerapan, integrasi logging dan pelaporan pengecualian, Ada UI dasbor untuk menelusuri dan mengedit data, mengedit variabel lingkungan, melihat log, menjalankan fungsi server, dan banyak lagi .
Terdapat fitur bawaan untuk penomoran halaman reaktif, penyimpanan file, pencarian teks reaktif, pencarian vektor, titik akhir https (untuk webhook), impor/ekspor snapshot, impor/ekspor streaming, dan validasi waktu proses untuk argumen fungsi dan data database.
Semuanya diskalakan secara otomatis, dan gratis untuk memulai.