Живая демо-версия
Присоединяйтесь к нашему сообществу Discord: AI Stack Devs
AI Town — это виртуальный город, в котором персонажи 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
. Если вы хотите настроить, какую модель использовать, настройте convex/util/llm.ts или установите just convex env set LLM_MODEL # model
. Варианты моделей Ollama можно найти здесь.
Возможно, вы захотите установить для NUM_MEMORIES_TO_SEARCH
значение 1
в файле Constants.ts, чтобы уменьшить размер подсказок диалога, если вы заметили медлительность.
Ознакомьтесь с convex/config.ts
чтобы настроить, какие модели предлагать пользовательскому интерфейсу, или настроить его для взаимодействия с облачным LLM.
Для ежедневного создания фоновой музыки создайте учетную запись-реплику и создайте токен на странице токенов API вашего профиля. just convex env set REPLICATE_API_TOKEN # token
Чтобы запустить как переднюю, так и заднюю часть:
npm run dev
Примечание . Если при запуске приложения вы столкнулись с ошибкой версии узла на сервере convex, используйте версию узла 18, которая является наиболее стабильной. Один из способов сделать это — установить nvm и запустить nvm install 18
или nvm use 18
. Сделайте это перед npm run dev
выше и ./convex-local-backend
на шаге 2.
Теперь вы можете посетить http://localhost:5173.
Если вы предпочитаете запускать интерфейс в отдельном от Convex терминале (который синхронизирует ваши серверные функции по мере их сохранения), вы можете запустить эти две команды:
npm run dev:frontend
npm run dev:backend
Подробности смотрите в package.json, но dev:backend запускает just convex dev
Примечание . Симуляция приостановится через 5 минут, если окно неактивно. Загрузка страницы возобновит ее. Вы также можете вручную заморозить и разморозить мир с помощью кнопки в пользовательском интерфейсе. Если вы хотите запустить мир без браузера, вы можете закомментировать cron «остановить неактивные миры» в convex/crons.ts
.
Чтобы остановить серверную часть в случае слишком большой активности
Это остановит работу движка и агентов. Вы по-прежнему можете выполнять запросы и функции для отладки.
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
Настройте socat
с IP-адресом хоста:
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/
Если там написано «Оллама бежит», это хорошо!
Убедитесь, что Convex знает, где найти Олламу (чтобы пропустить случайную загадочную ошибку...):
just convex env set OLLAMA_HOST http://localhost:11434
Обновите список браузеров:
npx update-browserslist-db@latest
Запустите AI Town:
npm run dev
запустите контейнер, затем просто откройте два терминала в папке AI-town с помощью docker-compose exec ai-town /bin/bash.
Запустите внутренний сервер Convex: bash ./convex-local-backend
И во втором терминале просто настройте Socat, запустите AI Town.
Сначала вам необходимо установить WSL2. Следуйте этому руководству, чтобы настроить WSL2 на вашем компьютере с Windows. Мы рекомендуем использовать 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 and 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
для портов моста для Олламы.Запустите следующую команду, чтобы соединить порты, обеспечивая связь между 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
Если он ответит «ОК», API Ollama доступен.
Клонируйте репозиторий AI Town с GitHub:
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
Установите хост Ollama в Convex:
just convex env set OLLAMA_HOST http://localhost:11434
Наконец, запустите AI Town:
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. Это связано с тем, что символьные данные отправляются в Convex при начальной загрузке. Однако имейте в виду, что just convex run testing:wipeAllTables
сотрет все ваши данные.
Создавайте своих собственных персонажей и истории. Все персонажи и истории, а также ссылки на их спрайты хранятся в файлеcharacters.ts. Вы можете начать с изменения описаний персонажей.
Обновление спрайт-таблиц: в data/characters.ts
вы увидите этот код:
export const characters = [
{
name : 'f1' ,
textureUrl : '/assets/32x32folk.png' ,
spritesheetData : f1SpritesheetData ,
speed : 0.1 ,
} ,
...
] ;
Вам следует найти лист спрайтов для вашего персонажа и определить движение/активы спрайта в соответствующем файле (в приведенном выше примере f1SpritesheetData
был определен в f1.ts).
Обновите фон (среду): карта загружается в convex/init.ts
из data/gentle.js
. Чтобы обновить карту, выполните следующие действия:
convertMap.js
, чтобы преобразовать JSON в формат, который может использовать механизм. node data/convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>
<mapDataPath>
: путь к мозаичному файлу JSON.<assetPath>
: Путь к изображениям набора плиток.<tilesetpxw>
: ширина набора тайлов в пикселях.<tilesetpxh>
: высота набора тайлов в пикселях. Создает converted-map.js
, который вы можете использовать как gentle.js
convex/music.ts
convex/crons.ts
, изменив задание generate new background music
. Настройте convex/util/llm.ts
или установите эти переменные env:
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
Прежде чем вы сможете запустить приложение, вам необходимо убедиться, что функции Convex развернуты в его производственной среде.
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
.vercel --prod
. Мы поддерживаем использование Ollama для генерации разговоров. Чтобы сделать его доступным из Интернета, вы можете использовать Tunnelmole, Ngrok или аналогичный.
Использование Tunnelmole
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
-файл для Windows здесь и поместите его куда-нибудь в свой PATH.После установки Tunnelmole выполните следующую команду:
tmole 11434
Tunnelmole должен вывести уникальный URL-адрес после запуска этой команды.
Использование Нгрока
Ngrok — популярный инструмент туннелирования с закрытым исходным кодом.
После установки и аутентификации ngrok выполните следующую команду:
ngrok http http://localhost:11434
Ngrok должен вывести уникальный URL-адрес после запуска этой команды.
Добавьте конечную точку Олламы в Convex
just convex env set OLLAMA_HOST # your tunnelmole/ngrok unique url from the previous step
Обновить домены Олламы
У Олламы есть список принятых доменов. Добавьте домен ngrok, чтобы он не отклонял трафик. Более подробную информацию можно найти на сайте ollama.ai.
Convex — это размещенная серверная платформа со встроенной базой данных, которая позволяет вам писать схему базы данных и функции сервера на TypeScript. Запросы к базе данных на стороне сервера автоматически кэшируют данные и подписываются на них, обеспечивая использование перехватчика useQuery
в реальном времени в нашем клиенте React. Существуют также клиенты для Python, Rust, ReactNative и Node, а также простой HTTP API.
База данных поддерживает документы в стиле NoSQL с дополнительной проверкой схемы, связями и настраиваемыми индексами (в том числе по полям во вложенных объектах).
Функции сервера query
и mutation
имеют транзакционный доступ к базе данных с низкой задержкой и используют нашу среду выполнения v8
с ограничениями детерминизма, чтобы обеспечить самые надежные гарантии ACID на рынке: немедленную согласованность, сериализуемую изоляцию и автоматическое разрешение конфликтов посредством оптимистического многоверсионного управления параллелизмом. (OCC/MVCC).
Функции сервера action
имеют доступ к внешним API и допускают другие побочные эффекты и недетерминизм либо в нашей оптимизированной среде выполнения v8
, либо в более гибкой среде выполнения node
.
Функции могут выполняться в фоновом режиме с помощью заданий планирования и cron.
Разработка ориентирована на облако, с горячей перезагрузкой для редактирования функций сервера через интерфейс командной строки, предварительным развертыванием, интеграцией журналов и отчетов об исключениях. Имеется пользовательский интерфейс информационной панели для просмотра и редактирования данных, редактирования переменных среды, просмотра журналов, запуска функций сервера и многого другого. .
Имеются встроенные функции для реактивной нумерации страниц, хранения файлов, реактивного текстового поиска, векторного поиска, конечных точек https (для веб-перехватчиков), импорта/экспорта снимков, потокового импорта/экспорта и проверки во время выполнения аргументов функций и данных базы данных.
Все масштабируется автоматически, и запуск бесплатен.