ライブデモ
コミュニティ Discord に参加してください: AI スタック開発者
AI タウンは、AI キャラクターが住み、チャットし、交流する仮想の町です。
このプロジェクトは、独自のバージョンの AI タウンを簡単に構築およびカスタマイズするための展開可能なスターター キットです。研究論文「Generative Agents: Interactive Simulacra of Human Behavior」からインスピレーションを受けています。
このプロジェクトの主な目標は、単に楽しく作業することを超えて、拡張を目的とした強力な基盤を備えたプラットフォームを提供することです。バックエンドは共有グローバル状態、トランザクション、シミュレーション エンジンをネイティブにサポートしており、簡単に遊べる単純なプロジェクトからスケーラブルなマルチプレイヤー ゲームまであらゆるものに適しています。第 2 の目標は、この分野のほとんどのシミュレータ (上記の元の論文を含む) が 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
警告を表示します。 ollama pull llama3
実行して、 llama3
をダウンロードします。 ollama run llama3
でテストしてください。使用するモデルをカスタマイズしたい場合は、 convex/util/llm.ts を調整するか、 just convex env set LLM_MODEL # model
を設定します。 Ollama モデルのオプションはここでご覧いただけます。
速度が遅い場合は、constants.ts でNUM_MEMORIES_TO_SEARCH
を1
に設定して、会話プロンプトのサイズを小さくするとよいでしょう。
convex/config.ts
をチェックして、UI に提供するモデルを構成したり、クラウドでホストされている LLM と通信するようにセットアップしたりできます。
毎日の BGM 生成の場合は、レプリケート アカウントを作成し、プロファイルの API トークン ページでトークンを作成します。 just convex env set REPLICATE_API_TOKEN # token
フロントエンドとバックエンドの両方を実行するには:
npm run dev
注: アプリケーションの起動時に凸サーバーでノード バージョン エラーが発生した場合は、最も安定しているノード バージョン 18 を使用してください。これを行う 1 つの方法は、nvm をインストールし、 nvm install 18
またはnvm use 18
を実行することです。これは、上記のnpm run dev
とステップ 2 の./convex-local-backend
の両方の前に実行します。
これで、http://localhost:5173 にアクセスできるようになります。
Convex とは別のターミナルでフロントエンドを実行したい場合 (バックエンド関数が保存されるときに同期します)、次の 2 つのコマンドを実行できます。
npm run dev:frontend
npm run dev:backend
詳細については package.json を参照してください。ただし、dev:backend はjust convex dev
実行します。
注: ウィンドウがアイドル状態の場合、シミュレーションは 5 分後に一時停止します。ページをロードすると一時停止が解除されます。 UI のボタンを使用して、ワールドを手動でフリーズおよびフリーズ解除することもできます。ブラウザを使わずにワールドを実行したい場合は、 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
ファイルを変更して、フロントエンド サーバー (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/
「オラマが走っています」と表示されていればOKです!
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 フォルダー内の 2 つのターミナルを開くだけです
Convex バックエンド サーバーを起動します: bash ./convex-local-backend
そして、2 番目のターミナルで 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
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 ネームサーバー | awk '{print $2}'):11434 &
コンベックスを起動:
./convex-local-backend
別の端末の場合: 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 で定義されています)。
背景 (環境) を更新する: マップは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
のプロンプトを変更して、BGM を変更します。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
実行して、convex 関数を実稼働環境にデプロイします。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
実行してコードスペース CLI から認証する必要があります。vercel --prod
を使用してアプリを Vercel にデプロイします。 会話世代での Ollama の使用をサポートしています。 Web からアクセスするには、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 ドメインを追加します。詳細については、ollam.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 エンドポイント (Webhook 用)、スナップショット インポート/エクスポート、ストリーミング インポート/エクスポート、関数引数とデータベース データのランタイム検証のための組み込み機能があります。
すべてが自動的にスケールされ、無料で開始できます。