見出し画像

Generative Agents のセットアップ手順

「Generative Agents」のセットアップ手順をまとめました。

・M1 Mac


1. Generative Agents

「Generative Agents」(Generative Agents: Interactive Simulacra of Human Behavior) は、スタンフォード大学やGoogleらによるエージェントシミュレーション論文です。

自律的に動作する 25 名の AI エージェントが暮らす仮想世界を 2D ゲームエンジンで作り、社会シミュレーションを実施しています。

2. インストール

ローカルマシンでのインストール手順は、次のとおりです。

(1) Python仮想環境の準備

(2) リポジトリのクローン。

$ git clone https://github.com/joonspk-research/generative_agents

(3) 「util.py」の作成。
reverie/backend_serverフォルダ (reverie.pyがある場所) に utils.py を作成し、次のように編集します。<Your OpenAI API> にOpenAIのAPIキー、<Name> にユーザー名を記述します。

・utils.py

# OpenAI_APIのAPIキーを指定
openai_api_key = "<Your OpenAI API>"

# ユーザー名を指定
key_owner = "<Name>"

maze_assets_loc = "../../environment/frontend_server/static_dirs/assets"
env_matrix = f"{maze_assets_loc}/the_ville/matrix"
env_visuals = f"{maze_assets_loc}/the_ville/visuals"

fs_storage = "../../environment/frontend_server/storage"
fs_temp_storage = "../../environment/frontend_server/temp_storage"

collision_block_id = "32125"

# Verbose
debug = True

(4) パッケージのインストール。

$ cd generative_agents
$ pip install -r requirements.txt

3. サーバーの起動

シミュレーションを実行するには、「環境サーバー」と「シミュレーションサーバー」を起動する必要があります。

3-1. 環境サーバーの起動

(1) environment/frontend_server フォルダ(manage.pyがある場所)に移動し、以下のコマンドを実行。

$ python manage.py runserver

(2) ブラウザで「http://localhost:8000/」を開く。
「Your environment server is up and running,」(環境サーバーが稼働しています) が表示されていれば、サーバーは正常に動作しています。

3-2. シミュレーションサーバーの起動

(1) 別のコマンドプロンプトでPython仮想環境を準備し、reverie/backend_server フォルダに移動し、以下のコマンドを実行。

$ python reverie.py

(2) 「Enter the name of the forked simulation: 」と表示されたらフォークするシミュレーション名「base_the_ville_isabella_maria_klaus」を入力。
これは、「Isabella Rodriguez」「Maria Lopez」「Klaus Mueller」の3人のエージェントのシミュレーション名です。environment/frontend_server/storage に格納されています。

Enter the name of the forked simulation: base_the_ville_isabella_maria_klaus

(3) 「Enter the name of the new simulation: 」と表示されたら今回のシミュレーション名「test-simulation」(任意)を入力。
environment/frontend_server/storage に保存されます。

Enter the name of the new simulation: test-simulation

(4) 「Enter option: 」が表示されることを確認。
シミュレーションサーバーに対して指示するためのプロンプトになります。

(5) 「environment/frontend_server/storage/test-simulation」内に movement フォルダを追加。【エラー対策】
後ほどのrunコマンドでエラーが発生したので、回避策として追加しておきます。

4. シミュレーションの実行

シミュレーションの実行手順は、次のとおりです。

(1) ブラウザで「http://localhost:8000/simulator_home」を開く。
マップとエージェントが表示されます。キーボードの方向キーで地図上をスクロールできます。

(2) 「Enter option: 」で以下のコマンドを実行。

Enter option: run 100

「run <step-count>」でシミュレートするゲームステップ数を指定します。1ゲームステップは、ゲーム内の10秒を表します。

ログの例は、次のとおりです。

GNS FUNCTION: <generate_wake_up_hour>
=== persona/prompt_template/v2/wake_up_hour_v1.txt
~~~ persona    ---------------------------------------------------
Isabella Rodriguez 

~~~ gpt_param ----------------------------------------------------
{'engine': 'text-davinci-002', 'max_tokens': 5, 'temperature': 0.8, 'top_p': 1, 'stream': False, 'frequency_penalty': 0, 'presence_penalty': 0, 'stop': ['\n']} 

~~~ prompt_input    ----------------------------------------------
["Name: Isabella Rodriguez\nAge: 34\nInnate traits: friendly, outgoing, hospitable\nLearned traits: Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is always looking for ways to make the cafe a place where people can come to relax and enjoy themselves.\nCurrently: Isabella Rodriguez is planning on having a Valentine's Day party at Hobbs Cafe with her customers on February 14th, 2023 at 5pm. She is gathering party material, and is telling everyone to join the party at Hobbs Cafe on February 14th, 2023, from 5pm to 7pm.\nLifestyle: Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.\nDaily plan requirement: Isabella Rodriguez opens Hobbs Cafe at 8am everyday, and works at the counter until 8pm, at which point she closes the cafe.\nCurrent Date: Monday February 13\n", 'Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.', 'Isabella'] 

~~~ prompt    ----------------------------------------------------
Name: Isabella Rodriguez
Age: 34
Innate traits: friendly, outgoing, hospitable
Learned traits: Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is always looking for ways to make the cafe a place where people can come to relax and enjoy themselves.
Currently: Isabella Rodriguez is planning on having a Valentine's Day party at Hobbs Cafe with her customers on February 14th, 2023 at 5pm. She is gathering party material, and is telling everyone to join the party at Hobbs Cafe on February 14th, 2023, from 5pm to 7pm.
Lifestyle: Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.
Daily plan requirement: Isabella Rodriguez opens Hobbs Cafe at 8am everyday, and works at the counter until 8pm, at which point she closes the cafe.
Current Date: Monday February 13


In general, Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.
Isabella's wake up hour: 

~~~ output    ----------------------------------------------------
6 

=== END ==========================================================
GNS FUNCTION: <generate_wake_up_hour>
=== persona/prompt_template/v2/wake_up_hour_v1.txt
~~~ persona    ---------------------------------------------------
Isabella Rodriguez 

~~~ gpt_param ----------------------------------------------------
{'engine': 'text-davinci-002', 'max_tokens': 5, 'temperature': 0.8, 'top_p': 1, 'stream': False, 'frequency_penalty': 0, 'presence_penalty': 0, 'stop': ['\n']} 

~~~ prompt_input    ----------------------------------------------
["Name: Isabella Rodriguez\nAge: 34\nInnate traits: friendly, outgoing, hospitable\nLearned traits: Isabella Rodriguez is a cafe owner of Hobbs Cafe who loves to make people feel welcome. She is always looking for ways to make the cafe a place where people can come to relax and enjoy themselves.\nCurrently: Isabella Rodriguez is planning on having a Valentine's Day party at Hobbs Cafe with her customers on February 14th, 2023 at 5pm. She is gathering party material, and is telling everyone to join the party at Hobbs Cafe on February 14th, 2023, from 5pm to 7pm.\nLifestyle: Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.\nDaily plan requirement: Isabella Rodriguez opens Hobbs Cafe at 8am everyday, and works at the counter until 8pm, at which point she closes the cafe.\nCurrent Date: Monday February 13\n", 'Isabella Rodriguez goes to bed around 11pm, awakes up around 6am.', 'Isabella'] 
["名前: イザベラ ロドリゲス\n年齢: 34\n生まれ持った特性: フレンドリー、社交的、親切な\n学んだ特性: イザベラ ロドリゲスは、ホッブズ カフェのカフェ オーナーで、人々を歓迎するのが大好きです。彼女はカフェを作る方法を常に探しています。 人々がリラックスして楽しむことができる場所です。\n現在: イザベラ ロドリゲスは、2023 年 2 月 14 日の午後 5 時にホブズ カフェで顧客とバレンタインデー パーティーを開く予定です。彼女はパーティーの材料を集めており、みんなに次のように言っています。 2023 年 2 月 14 日の午後 5 時から午後 7 時まで、ホッブズ カフェで行われるパーティーに参加してください。\nライフスタイル: イザベラ ロドリゲスは午後 11 時頃に就寝し、午前 6 時頃に起きます。\n毎日のプラン要件: イザベラ ロドリゲスは毎日午前 8 時にホッブズ カフェを開き、で働いています。 カウンターは午後 8 時までで、午後 8 時になったらカフェを閉めます。\n現在の日付: 2 月 13 日月曜日\n", 'イザベラ ロドリゲスは午後 11 時頃に就寝し、午前 6 時頃に起きます。', 'イザベラ']

~~~ prompt    ----------------------------------------------------
名前:イザベラ・ロドリゲス
年齢: 34歳
生来の特徴:フレンドリー、社交的、親切
学んだ特徴: イザベラ ロドリゲスは、ホッブズ カフェのカフェ オーナーで、人々を歓迎していると感じさせるのが大好きです。 彼女は、カフェを人々がリラックスして楽しめる場所にする方法を常に模索しています。
現在: イザベラ ロドリゲスは、2023214 日の午後 5 時に顧客とホッブズ カフェでバレンタインデー パーティーを開く予定です。 彼女はパーティーの資料を集めており、2023214 日の午後 5 時から午後 7 時までホブズ カフェで開催されるパーティーに参加するようにみんなに伝えています。
ライフスタイル: イザベラ ロドリゲスは午後 11 時頃に就寝し、午前 6 時頃に起きます。
毎日の計画要件: イザベラ ロドリゲスは毎日午前 8 時にホッブズ カフェを開き、午後 8 時までカウンターで働き、午後 8 時にカフェを閉めます。
現在の日付: 213 日月曜日


一般に、イザベラ ロドリゲスは午後 11 時頃に就寝し、午前 6 時頃に起きます。
イザベラの起床時間:

~~~ output    ----------------------------------------------------
6 

=== END ==========================================================

時間は3分20秒、料金は$0.8ほどかかりました。

(3) 「Enter option:」が再び表示されたら、「fin」を実行。

Enter option: fin

主なコマンドは、次のとおりです。

・run <step-count> : ゲームステップ実行 
・exit : シミュレーションを保存せず終了
・fin : シミュレーションを保存して終了

5. シミュレーションのリプレイ

シミュレーションのリプレイ手順は、次のとおりです。

(1) ブラウザで「http://localhost:8000/replay/July1_the_ville_isabella_maria_klaus-step-3-20/5000/」を開く。
「http://localhost:8000/replay/<simulation-name>/<starting-time-step>/」のパラメータは、次のとおりです。

・<simulation-name> : 再生したいシミュレーション名
・<starting-time-step> : 再生開始するゲームステップ

「test-simulation」は、深夜0時から100ゲームステップなのでみんな寝てました。

6. シミュレーションのデモ

リプレイ時のキャラクタースプライトはすべて同じです。リプレイは主にデバッグを目的としています。適切なキャラクタースプライトでシミュレーションを適切に実演するには、シミュレーションを圧縮する必要があります。

(1) 「reverie」フォルダの「compress_sim_storage.py」を開き、mainを次のように編集。

compress_sim_storage.py

if __name__ == '__main__':
  compress("test-simulation")

(2) 別のコマンドプロンプトでPython仮想環境を準備し、reverie フォルダに移動し、以下のコマンドを実行。

python compress_sim_storage.py

(3) environment/frontend_server/compressed_storage フォルダにtest-simulationが生成されていることを確認。

(4) ブラウザで「http://localhost:8000/demo/test-simulation/1/5」を開く。
「http://localhost:8000/demo/<simulation-name>/<starting-time-step>/<simulation-speed>」のパラメータは、次のとおりです。

・<simulation-name> : 再生したいシミュレーション名
・<starting-time-step> : 再生開始するゲームステップ
・<simulation-speed> : シミュレーション速度 (遅1〜5速)

キャラクタースプライトが割り当てられていることがわかります。



この記事が気に入ったらサポートをしてみませんか?