该存储库伴随着我们的研究论文,标题为“生成剂:人类行为的互动模拟”。它包含我们针对生成代理的核心模拟模块(模拟可信人类行为的计算代理)及其游戏环境。在下面,我们记录了在本地计算机上设置仿真环境的步骤,并将模拟重新播放为演示动画。
要设置您的环境,您需要生成一个包含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)在本科和研究生的现实地点的启发 - 他感谢那里的所有人这些年来喂养和支持他。