該存儲庫伴隨著我們的研究論文,標題為“生成劑:人類行為的互動模擬”。它包含我們針對生成代理的核心模擬模塊(模擬可信人類行為的計算代理)及其遊戲環境。在下面,我們記錄了在本地計算機上設置仿真環境的步驟,並將模擬重新播放為演示動畫。
要設置您的環境,您需要生成一個包含OpenAI API密鑰並下載必要軟件包的utils.py
文件。
在reverie/backend_server
文件夾( reverie.py
的位置)中,創建一個名為utils.py
的新文件,然後將內容複製並粘貼到文件中:
# Copy and paste your OpenAI API Key
openai_api_key = "<Your OpenAI API>"
# Put your name
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
用OpenAI API鍵替換<Your OpenAI API>
,然後用您的名字替換<name>
。
安裝requirements.txt
文件中列出的所有內容(我強烈建議您首先設置一個Virtualenv)。關於Python版本的註釋:我們在Python 3.9.12上測試了環境。
要運行新的模擬,您將需要同時啟動兩個服務器:環境服務器和代理模擬服務器。
同樣,環境是作為Django項目實現的,因此,您需要啟動Django服務器。為此,請首先導航到命令行中的environment/frontend_server
(這是manage.py
所在的位置)。然後運行以下命令:
python manage.py runserver
然後,在您喜歡的瀏覽器上,轉到http:// localhost:8000/。如果您看到一條消息,上面寫著“您的環境服務器正在啟動並運行”,則服務器正常運行。確保環境服務器在運行仿真時繼續運行,因此請保持此命令行打開! (注意:我建議使用Chrome或Safari。Firefox可能會產生一些前端故障,儘管它不應干擾實際的模擬。)
打開另一個命令行(您在步驟1中使用的命令行仍應運行環境服務器,因此將其保持原樣)。導航到reverie/backend_server
並運行reverie.py
。
python reverie.py
這將啟動仿真服務器。將出現一個命令行提示,詢問以下內容:“輸入分叉模擬的名稱:”。要使用Isabella Rodriguez,Maria Lopez和Klaus Mueller啟動3代理模擬,請鍵入以下內容:
base_the_ville_isabella_maria_klaus
然後,提示將問:“輸入新模擬的名稱:”。鍵入任何名稱來表示您當前的仿真(例如,僅“測試模擬”現在可以做到)。
test-simulation
保持模擬器服務器運行。在此階段,它將顯示以下提示:“輸入選項:”
在瀏覽器上,導航到http:// localhost:8000/simulator_home。您應該看到Smallville的地圖,以及地圖上的活躍代理列表。您可以使用鍵盤箭頭在地圖上移動。請保持此標籤打開。要運行仿真,請在模擬服務器中鍵入以下命令,以響應提示“輸入選項”:
run <step-count>
請注意,您將需要用一個整數替換上面的<step-count>
,以指示要模擬的遊戲步驟數量。例如,如果要模擬100個遊戲步驟,則應輸入run 100
。一個遊戲步驟代表遊戲中的10秒。
您的模擬應該運行,您會看到瀏覽器中的代理在地圖上移動。一旦模擬完成,“ Enter Option”提示將重新出現。在這一點上,您可以通過使用所需的遊戲步驟重新輸入運行命令來模擬更多步驟,退出仿真而無需鍵入exit
,或通過鍵入fin
保存和退出。
下次運行仿真服務器時,可以通過將模擬的名稱作為分叉仿真來訪問保存的仿真。這將使您可以從停止的點重新啟動模擬。
您可以通過使環境服務器運行並導航到瀏覽器中的以下地址來重播您已經運行的模擬: http://localhost:8000/replay/<simulation-name>/<starting-time-step>
。請確保用要重播的仿真名稱替換<simulation-name>
,然後用整數時間步<starting-time-step>
time-step>您希望從中開始重播。
例如,通過訪問以下鏈接,您將啟動一個預先模擬的示例,從時間步長1:
http:// localhost:8000/replay/七月1_the_ville_isabella_maria_klaus-step-step-3-20/1/
您可能已經註意到,重播中的所有角色精靈看起來相同。我們要澄清,重播函數主要用於調試目的,並且不優化優化仿真文件夾或視覺效果的大小。為了正確演示具有適當角色精靈的模擬,您需要首先壓縮模擬。為此,使用文本編輯器打開位於reverie
目錄中的compress_sim_storage.py
文件。然後,用目標模擬的名稱作為輸入執行compress
函數。通過這樣做,仿真文件將被壓縮,使其準備進行演示。
要啟動演示,請轉到瀏覽器上的以下地址: http://localhost:8000/demo/<simulation-name>/<starting-time-step>/<simulation-speed>
。請注意, <simulation-name>
和<starting-time-step>
表示與上述相同的內容。可以將<simulation-speed>
設置為控制演示速度,其中1是最慢,而5是最快的。例如,訪問以下鏈接將以中等演示速度從時間步長開始啟動一個預模擬的示例:
http:// localhost:8000/demo/七月1_the_ville_isabella_maria_klaus-step-step-3-20/1/3/3/3/
我們注意到OpenAI的API在達到小時率限制時可以懸掛。發生這種情況時,您可能需要重新啟動模擬。目前,我們建議在進行進度時經常保存模擬,以確保在需要停止和重新運行時,損失盡可能少的模擬。至少在2023年初,運行這些模擬可能會有些昂貴,尤其是當環境中有很多代理商時。
您保存的所有模擬都將位於environment/frontend_server/storage
中,所有壓縮演示將位於environment/frontend_server/compressed_storage
中。
有兩種方法可以選擇自定義模擬。
首先是在模擬開始時初始化具有獨特歷史記錄的代理。為此,您需要1)使用基本模擬之一開始模擬,以及2)作者和加載代理歷史記錄。更具體地說,以下是:
存儲庫中包含兩個基本模擬: base_the_ville_n25
,帶有25個代理,以及帶有3個代理商的base_the_ville_isabella_maria_klaus
。通過遵循步驟,直到上面的步驟2,加載一個基本模擬。
然後,當提示使用“ Enter Option:”提示時,您應該通過響應以下命令來加載代理歷史記錄:
call -- load history the_ville/<history_file_name>.csv
請注意,您將需要用現有歷史記錄文件的名稱替換<history_file_name>
。存儲庫中包含兩個歷史記錄文件作為示例: agent_history_init_n25.csv
for base_the_ville_n25
和agent_history_init_n3.csv
for base_the_ville_isabella_maria_klaus
。這些文件包括每個代理的半分隔內存記錄列表 - 將它們插入代理的內存流中。
要通過創作自己的歷史記錄文件來自定義初始化,請將您的文件放在以下文件夾中: environment/frontend_server/static_dirs/assets/the_ville
。自定義歷史記錄文件的列格式必須匹配所包括的示例歷史記錄文件。因此,我們建議通過複製和粘貼存儲庫中的過程來開始該過程。
要進行更多涉及的自定義,您將需要撰寫自己的基本仿真文件。最直接的方法是複制並粘貼現有的基本模擬文件夾,根據您的要求重命名和編輯。如果您決定將代理名稱保持不變,此過程將更簡單。但是,如果您想更改其名稱或增加Smallville地圖可以容納的代理數量,則可能需要使用瓷磚地圖編輯器直接編輯地圖。
作者: Joon Sung Park,Joseph C. O'Brien,Carrie J. Cai,Meredith Ringel Morris,Percy Liang,Michael S. Bernstein
如果您使用此存儲庫中的代碼或數據,請引用我們的論文。
@inproceedings{Park2023GenerativeAgents,
author = {Park, Joon Sung and O'Brien, Joseph C. and Cai, Carrie J. and Morris, Meredith Ringel and Liang, Percy and Bernstein, Michael S.},
title = {Generative Agents: Interactive Simulacra of Human Behavior},
year = {2023},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
booktitle = {In the 36th Annual ACM Symposium on User Interface Software and Technology (UIST '23)},
keywords = {Human-AI interaction, agents, generative AI, large language models},
location = {San Francisco, CA, USA},
series = {UIST '23}
}
我們鼓勵您支持以下三位為該項目設計遊戲資產的驚人藝術家,尤其是如果您打算將此處包含的資產用於自己的項目:
此外,我們感謝Lindsay Popowski,Philip Guo,Michael Terry和行為科學(CASBS)社區高級研究中心的見解,討論和支持。最後,小維爾(Smallville)的所有地點都受到了喬(Joon)在本科和研究生的現實地點的啟發 - 他感謝那裡的所有人這些年來餵養和支持他。