Ce référentiel accompagne notre article de recherche intitulé «Agents génératifs: simulacra interactive du comportement humain». Il contient notre module de simulation de base pour les agents génératifs - des agents computants qui simulent les comportements humains crédibles - et leur environnement de jeu. Ci-dessous, nous documentons les étapes pour configurer l'environnement de simulation sur votre machine locale et pour rejouer la simulation en tant qu'animation de démonstration.
Pour configurer votre environnement, vous devrez générer un fichier utils.py
qui contient votre clé API OpenAI et télécharger les packages nécessaires.
Dans le dossier reverie/backend_server
(où se trouve reverie.py
), créez un nouveau fichier intitulé utils.py
et copiez et collez le contenu ci-dessous dans le fichier:
# 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
Remplacez <Your OpenAI API>
par votre touche API OpenAI et <name>
par votre nom.
Installez tout répertorié dans le fichier requirements.txt
(je recommande fortement de configurer d'abord un VirtualEnv comme d'habitude). Une note sur la version Python: nous avons testé notre environnement sur Python 3.9.12.
Pour exécuter une nouvelle simulation, vous devrez démarrer simultanément deux serveurs: le serveur environnemental et le serveur de simulation d'agent.
Encore une fois, l'environnement est implémenté en tant que projet Django, et en tant que tel, vous devrez démarrer le serveur Django. Pour ce faire, accédez d'abord à environment/frontend_server
(c'est là que se trouve manage.py
) dans votre ligne de commande. Puis exécutez la commande suivante:
python manage.py runserver
Ensuite, sur votre navigateur préféré, allez sur http: // localhost: 8000 /. Si vous voyez un message qui dit: «Votre serveur environnemental est opérationnel», votre serveur s'exécute correctement. Assurez-vous que le serveur Environment continue d'exécuter pendant que vous exécutez la simulation, alors gardez cet onglet de ligne de commande ouvert! (Remarque: je recommande d'utiliser Chrome ou Safari. Firefox peut produire des problèmes de frontend, bien qu'il ne devrait pas interférer avec la simulation réelle.)
Ouvrez une autre ligne de commande (celle que vous avez utilisée à l'étape 1 devrait toujours exécuter le serveur environnemental, alors laissez cela tel qu'il est). Accédez à reverie/backend_server
et exécutez reverie.py
.
python reverie.py
Cela démarrera le serveur de simulation. Une invite de ligne de commande apparaîtra, demandant ce qui suit: "Entrez le nom de la simulation fourchue:". Pour démarrer une simulation à 3 agents avec Isabella Rodriguez, Maria Lopez et Klaus Mueller, tapez ce qui suit:
base_the_ville_isabella_maria_klaus
L'invite demandera ensuite: "Entrez le nom de la nouvelle simulation:". Tapez n'importe quel nom pour désigner votre simulation actuelle (par exemple, la "simulation de test" fera l'affaire pour l'instant).
test-simulation
Gardez le serveur de simulateur en cours d'exécution. À ce stade, il affichera l'invite suivante: "Entrez l'option:"
Sur votre navigateur, accédez à http: // localhost: 8000 / simulateur_home. Vous devriez voir la carte de Smallville, ainsi qu'une liste d'agents actifs sur la carte. Vous pouvez vous déplacer autour de la carte à l'aide de vos flèches de clavier. Veuillez garder cet onglet ouvert. Pour exécuter la simulation, saisissez la commande suivante dans votre serveur de simulation en réponse à l'invite, "Entrez l'option":
run <step-count>
Notez que vous voudrez remplacer <step-count>
ci-dessus par un entier indiquant le nombre d'étapes de jeu que vous souhaitez simuler. Par exemple, si vous souhaitez simuler 100 étapes de jeu, vous devez saisir run 100
. Une étape de jeu représente 10 secondes dans le jeu.
Votre simulation devrait être en cours d'exécution et vous verrez les agents se déplacer sur la carte de votre navigateur. Une fois la simulation terminée en cours d'exécution, l'invite "Entrer l'option" sera réapparue. À ce stade, vous pouvez simuler plus d'étapes en réintégrant la commande RUN avec les étapes de jeu souhaitées, quitter la simulation sans économiser en tapant exit
ou en sauvegardant et en quittez en tapant fin
.
La simulation enregistrée est accessible la prochaine fois que vous exécutez le serveur de simulation en fournissant le nom de votre simulation comme simulation fourchue. Cela vous permettra de redémarrer votre simulation du point où vous vous êtes arrêté.
Vous pouvez rejouer une simulation que vous avez déjà exécutée simplement en faisant fonctionner votre serveur environnemental et en accédant à l'adresse suivante dans votre navigateur: http://localhost:8000/replay/<simulation-name>/<starting-time-step>
. Assurez-vous de remplacer <simulation-name>
par le nom de la simulation que vous souhaitez rejouer, et <starting-time-step>
par le pas entier à partir duquel vous souhaitez commencer la rediffusion.
Par exemple, en visitant le lien suivant, vous lancerez un exemple pré-simulé, en commençant à la période Time 1:
http: // localhost: 8000 / relay / juillet1_the_ville_isabella_maria_klaus-Step-3-20 / 1 /
Vous avez peut-être remarqué que tous les sprites de personnages dans la rediffusion semblent identiques. Nous tenons à préciser que la fonction de relecture est principalement destinée à des fins de débogage et ne privilégie pas l'optimisation de la taille du dossier de simulation ou des visuels. Pour démontrer correctement une simulation avec des sprites de caractère appropriés, vous devrez d'abord compresser la simulation. Pour ce faire, ouvrez le fichier compress_sim_storage.py
situé dans le répertoire reverie
à l'aide d'un éditeur de texte. Ensuite, exécutez la fonction compress
avec le nom de la simulation cible comme entrée. Ce faisant, le fichier de simulation sera compressé, ce qui le prépare pour la démonstration.
Pour démarrer la démo, accédez à l'adresse suivante sur votre navigateur: http://localhost:8000/demo/<simulation-name>/<starting-time-step>/<simulation-speed>
. Notez que <simulation-name>
et <starting-time-step>
indiquent les mêmes choses que celles mentionnées ci-dessus. <simulation-speed>
peut être réglé pour contrôler la vitesse de démonstration, où 1 est le plus lent, et 5 est le plus rapide. Par exemple, la visite du lien suivant commencera un exemple pré-simulé, en commençant à la période du temps 1, avec une vitesse de démonstration moyenne:
http: // localhost: 8000 / démo / juillet1_the_ville_isabella_maria_klaus-Step-3-20 / 1/3 /
Nous avons remarqué que l'API d'Openai peut suspendre lorsqu'elle atteint la limite horaire. Lorsque cela se produit, vous devrez peut-être redémarrer votre simulation. Pour l'instant, nous vous recommandons de sauver souvent votre simulation au fur et à mesure que vous progressez pour vous assurer que vous perdez le moins de simulation possible lorsque vous avez besoin de vous arrêter et de le réacheminer. La gestion de ces simulations, du moins au début de 2023, pourrait être quelque peu coûteuse, surtout lorsqu'il y a de nombreux agents dans l'environnement.
Toutes les simulations que vous enregistrez seront situées dans environment/frontend_server/storage
, et toutes les démos compressées seront situées dans environment/frontend_server/compressed_storage
.
Il existe deux façons de personnaliser éventuellement vos simulations.
Le premier consiste à initialiser les agents ayant une histoire unique au début de la simulation. Pour ce faire, vous voudrez 1) démarrer votre simulation à l'aide de l'une des simulations de base, et 2) l'historique de l'agent d'auteur et de chargement. Plus précisément, voici les étapes:
Il y a deux simulations de base incluses dans le référentiel: base_the_ville_n25
avec 25 agents, et base_the_ville_isabella_maria_klaus
avec 3 agents. Chargez l'une des simulations de base en suivant les étapes jusqu'à l'étape 2 ci-dessus.
Ensuite, lorsque vous êtes invité à "Entrez l'option:", vous devez charger l'historique de l'agent en répondant avec la commande suivante:
call -- load history the_ville/<history_file_name>.csv
Notez que vous devrez remplacer <history_file_name>
par le nom d'un fichier d'historique existant. Il y a deux fichiers d'historique inclus dans le repo en tant qu'exemples: agent_history_init_n25.csv
pour base_the_ville_n25
et agent_history_init_n3.csv
pour base_the_ville_isabella_maria_klaus
. Ces fichiers incluent des listes de listes de mémoire séparées par les demi-colons pour chacun des agents - les télécharger inséreront les enregistrements de mémoire dans le flux de mémoire des agents.
Pour personnaliser l'initialisation en créant votre propre fichier d'historique, placez votre fichier dans le dossier suivant: environment/frontend_server/static_dirs/assets/the_ville
. Le format de colonne de votre fichier d'historique personnalisé devra correspondre aux fichiers d'historique des exemples inclus. Par conséquent, nous vous recommandons de commencer le processus en copiant et en collant ceux qui sont déjà dans le référentiel.
Pour une personnalisation plus impliquée, vous devrez rédiger vos propres fichiers de simulation de base. L'approche la plus simple serait de copier et de coller un dossier de simulation de base existant, de le renommer et de l'éditer en fonction de vos exigences. Ce processus sera plus simple si vous décidez de garder les noms d'agent inchangés. Cependant, si vous souhaitez modifier leurs noms ou augmenter le nombre d'agents que la carte Smallville peut accueillir, vous devrez peut-être modifier directement la carte à l'aide de l'éditeur de carte carrelé.
Auteurs: Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, Michael S. Bernstein
Veuillez citer notre article si vous utilisez le code ou les données dans ce référentiel.
@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}
}
Nous vous encourageons à soutenir les trois artistes incroyables suivants qui ont conçu les actifs de jeu pour ce projet, surtout si vous prévoyez d'utiliser les actifs inclus ici pour votre propre projet:
De plus, nous remercions Lindsay Popowski, Philip Guo, Michael Terry et le Center for Advanced Study in the Behavioral Sciences (CASBS) pour leurs idées, leurs discussions et leur soutien. Enfin, tous les emplacements présentés dans Smallville sont inspirés par des emplacements du monde réel que Joon a fréquenté en tant que étudiant de premier cycle et diplômé - il remercie tout le monde là-bas pour l'avoir nourri et soutenu toutes ces années.