라이브 데모
커뮤니티 Discord에 참여하세요: AI 스택 개발자
AI 타운은 AI 캐릭터가 살고, 채팅하고, 사교 활동을 하는 가상 마을입니다.
이 프로젝트는 자신만의 AI 타운 버전을 쉽게 구축하고 사용자 정의할 수 있는 배포 가능한 스타터 키트입니다. 연구 논문 Generative Agents: Interactive Simulacra of Human Behavior 에서 영감을 얻었습니다.
이 프로젝트의 주요 목표는 단지 작업하는 것이 재미있다는 것 이상으로 확장될 수 있는 강력한 기반을 갖춘 플랫폼을 제공하는 것입니다. 백엔드는 기본적으로 공유된 전역 상태, 트랜잭션 및 시뮬레이션 엔진을 지원하며 간단한 프로젝트부터 확장 가능한 멀티 플레이어 게임까지 모든 것에 적합해야 합니다. 두 번째 목표는 이 분야의 대부분의 시뮬레이터(위의 원본 논문 포함)가 Python으로 작성되었으므로 JS/TS 프레임워크를 사용할 수 있도록 만드는 것입니다.
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
). 추가 매개변수를 추가하기 위해 make
와 just
사용하므로 로컬 개발을 위해 npx convex ...
대신에 just convex ...
실행합니다.
Mac에서 사전 빌드된 바이너리를 실행 중이고 Apple 경고가 표시되는 경우 해당 바이너리가 있는 폴더로 이동하여 마우스 오른쪽 버튼을 클릭하고 "열기"를 선택하여 우회하세요. 그때부터 명령줄에서 실행할 수 있습니다. 또는 소스에서 컴파일하고 실행할 수 있습니다(위 참조).
앱을 실행 상태로 두거나 ollama serve
실행할 수 있습니다. ollama serve
앱이 이미 실행 중이면 경고를 표시합니다. llama3
다운로드하려면 ollama pull llama3
실행하세요. ollama run llama3
으로 테스트해 보세요. 사용할 모델을 사용자 정의하려면 convex/util/llm.ts를 조정하거나 just convex env set LLM_MODEL # model
설정하세요. Ollama 모델 옵션은 여기에서 찾을 수 있습니다.
속도가 느려지는 경우 대화 프롬프트의 크기를 줄이기 위해 Constants.ts에서 NUM_MEMORIES_TO_SEARCH
1
로 설정하는 것이 좋습니다.
UI에 제공할 모델을 구성하거나 클라우드 호스팅 LLM과 통신하도록 설정하려면 convex/config.ts
확인하세요.
일일 배경 음악 생성을 위해 복제 계정을 생성하고 프로필의 API 토큰 페이지에서 토큰을 생성하세요. just convex env set REPLICATE_API_TOKEN # token
프런트엔드와 백엔드를 모두 실행하려면 다음 안내를 따르세요.
npm run dev
참고 : 애플리케이션 시작 시 Convex 서버에서 노드 버전 오류가 발생하는 경우 가장 안정적인 노드 버전 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분 후에 일시 중지됩니다. 페이지를 로드하면 일시중지가 해제됩니다. UI의 버튼을 사용하여 수동으로 세계를 고정하거나 고정 해제할 수도 있습니다. 브라우저 없이 월드를 실행하려면, 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
백엔드 배포를 일시 중지하려면
대시보드의 배포 설정으로 이동하여 배포를 일시 중지하거나 일시 중지를 해제할 수 있습니다. 이렇게 하면 클라이언트에서 호출되거나 예약되거나 크론 작업으로 호출되는 모든 기능이 중지됩니다. 위에서 멈추는 더 부드러운 방법이 있으므로 이것을 최후의 수단으로 삼으십시오. 일단 당신은
package.json
파일을 수정하여 프런트 엔드 서버(Vite)에 --host
옵션을 추가하세요.
{
"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가 실행 중입니다"라고 표시되면 좋습니다!
Convex가 Ollama를 찾을 수 있는 위치를 알고 있는지 확인하십시오(임의의 신비한 버그를 건너뛰기 위해...):
just convex env set OLLAMA_HOST http://localhost:11434
브라우저 목록을 업데이트합니다.
npx update-browserslist-db@latest
AI 타운 시작:
npm run dev
컨테이너를 시작한 다음 docker-compose exec ai-town /bin/bash를 사용하여 AI-town 폴더에서 두 개의 터미널을 엽니다.
Convex 백엔드 서버를 실행합니다: bash ./convex-local-backend
그리고 두 번째 터미널에서는 Socat을 구성하고 AI Town을 실행합니다.
먼저 WSL2를 설치해야 합니다. Windows 컴퓨터에 WSL2를 설정하려면 이 가이드를 따르세요. Linux 배포판으로 Ubuntu를 사용하는 것이 좋습니다.
WSL 터미널(Ubuntu)을 열고 패키지를 업데이트합니다.
sudo apt update
NVM(Node Version Manager)은 여러 버전의 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
설치 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
OK라고 응답하면 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 Town을 시작하세요.
npm run dev
AI Town이 실제로 작동하는 모습을 보려면 브라우저에서 http://localhost:5173
방문하세요.
서비스를 다시 시작해야 하는 경우:
socat
실행 중인지 확인하세요.
socat TCP-LISTEN:11434,fork TCP:$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):11434 &
볼록한 실행:
./convex-local-backend
다른 터미널에서: 3. AI 타운 시작:
npm run dev
참고: 문자 데이터를 변경할 때마다 just convex run testing:wipeAllTables
다시 실행한 다음 npm run dev
실행하여 모든 것을 Convex에 다시 업로드해야 합니다. 이는 초기 로드 시 문자 데이터가 Convex로 전송되기 때문입니다. 그러나 just convex run testing:wipeAllTables
모든 데이터가 지워진다는 점에 유의하세요.
나만의 캐릭터와 스토리 만들기: 모든 캐릭터와 스토리는 물론 해당 스프라이트시트 참조도character.ts에 저장됩니다. 캐릭터 설명을 변경하여 시작할 수 있습니다.
스프라이트시트 업데이트: 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>
: 타일셋 높이(픽셀)입니다. gentle.js
처럼 사용할 수 있는 converted-map.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)에서 로컬로 가지고 있는 환경 변수를 설정해야 합니다.
앱을 실행하기 전에 Convex 함수가 프로덕션 환경에 배포되었는지 확인해야 합니다.
npx convex deploy
실행하여 볼록한 함수를 프로덕션에 배포합니다.npx convex run init --prod
지우려는 기존 데이터가 있는 경우 npx convex run testing:wipeAllTables --prod
실행할 수 있습니다.
git revert b44a436
사용하여 직원 인증을 다시 추가할 수 있습니다. 아니면 해당 차이점을 살펴보고 제거하기 위해 변경된 내용을 확인하세요.
서기 계정 만들기
.env.local
에 VITE_CLERK_PUBLISHABLE_KEY
및 CLERK_SECRET_KEY
추가합니다. 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을 출력해야 합니다.
Convex에 Ollama 끝점 추가
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
런타임에서 다른 부작용 및 비결정성을 활성화합니다.
기능은 예약 및 크론 작업을 통해 백그라운드에서 실행될 수 있습니다.
개발은 CLI를 통한 서버 기능 편집을 위한 핫 리로드, 배포 미리보기, 로깅 및 예외 보고 통합을 갖춘 클라우드 우선입니다. 데이터 탐색 및 편집, 환경 변수 편집, 로그 보기, 서버 기능 실행 등을 위한 대시보드 UI가 있습니다. .
반응형 페이지 매김, 파일 저장, 반응형 텍스트 검색, 벡터 검색, https 엔드포인트(웹후크용), 스냅샷 가져오기/내보내기, 스트리밍 가져오기/내보내기, 함수 인수 및 데이터베이스 데이터에 대한 런타임 검증을 위한 기능이 내장되어 있습니다.
모든 것이 자동으로 확장되며 무료로 시작할 수 있습니다.