Este repositorio acompaña a nuestro trabajo de investigación titulado "Agentes generativos: simulacros interactivos del comportamiento humano". Contiene nuestro módulo de simulación central para agentes generativos, agentes de competencia que simulan comportamientos humanos creíbles) y su entorno de juego. A continuación, documentamos los pasos para configurar el entorno de simulación en su máquina local y para reproducir la simulación como una animación de demostración.
Para configurar su entorno, deberá generar un archivo utils.py
que contenga su tecla API OpenAI y descargue los paquetes necesarios.
En la carpeta reverie/backend_server
(donde se encuentra reverie.py
), cree un nuevo archivo titulado utils.py
y copie y pegue el contenido a continuación en el archivo:
# 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
Reemplace <Your OpenAI API>
con su tecla API OpenAI y <name>
con su nombre.
Instale todo lo que figura en el archivo requirements.txt
. Una nota sobre la versión de Python: probamos nuestro entorno en Python 3.9.12.
Para ejecutar una nueva simulación, deberá iniciar simultáneamente dos servidores: el servidor de entorno y el servidor de simulación de agente.
Nuevamente, el entorno se implementa como un proyecto Django y, como tal, deberá iniciar el servidor Django. Para hacer esto, primero navegue a environment/frontend_server
(aquí es donde se encuentra manage.py
) en su línea de comando. Luego ejecute el siguiente comando:
python manage.py runserver
Luego, en su navegador favorito, vaya a http: // localhost: 8000/. Si ve un mensaje que dice: "Su servidor de entorno está en funcionamiento", su servidor se está ejecutando correctamente. Asegúrese de que el servidor de entorno continúe ejecutándose mientras ejecuta la simulación, ¡así que mantenga esta pestaña de línea de comandos abierta! (Nota: Recomiendo usar Chrome o Safari. Firefox podría producir algunos problemas técnicos de frontend, aunque no debe interferir con la simulación real).
Abra otra línea de comando (la que usó en el Paso 1 aún debería ejecutar el servidor de entorno, así que deja eso como está). Navegue a reverie/backend_server
y ejecute reverie.py
.
python reverie.py
Esto iniciará el servidor de simulación. Aparecerá un mensaje de línea de comandos, preguntando lo siguiente: "Ingrese el nombre de la simulación bifurcada:". Para comenzar una simulación de 3 agentes con Isabella Rodríguez, Maria López y Klaus Mueller, escriba lo siguiente:
base_the_ville_isabella_maria_klaus
El mensaje luego preguntará: "Ingrese el nombre de la nueva simulación:". Escriba cualquier nombre para denotar su simulación actual (por ejemplo, solo la "simulación de prueba" funcionará por ahora).
test-simulation
Mantenga el servidor del simulador en funcionamiento. En esta etapa, mostrará el siguiente mensaje: "Ingrese la opción:"
En su navegador, navegue a http: // localhost: 8000/simulator_home. Debería ver el mapa de Smallville, junto con una lista de agentes activos en el mapa. Puede moverse alrededor del mapa usando las flechas de su teclado. Mantenga esta pestaña abierta. Para ejecutar la simulación, escriba el siguiente comando en su servidor de simulación en respuesta a la solicitud, "Ingrese la opción":
run <step-count>
Tenga en cuenta que querrá reemplazar <step-count>
arriba con un entero que indica la cantidad de pasos de juego que desea simular. Por ejemplo, si desea simular 100 pasos de juego, debe ingresar run 100
. Un paso de juego representa 10 segundos en el juego.
Su simulación debe estar ejecutándose, y verá que los agentes se mueven en el mapa en su navegador. Una vez que la simulación finalice en funcionamiento, la solicitud de "Opción ENTER" volverá a aparecer. En este punto, puede simular más pasos volviendo al comando Ejecutar con los pasos de juego deseados, salir de la simulación sin guardar mediante la exit
, o guardar y salir escribiendo fin
.
Se puede acceder a la simulación guardada la próxima vez que ejecute el servidor de simulación proporcionando el nombre de su simulación como simulación bifurcada. Esto le permitirá reiniciar su simulación desde el punto donde lo dejó.
Puede reproducir una simulación que ya ha ejecutado simplemente haciendo que su servidor de entorno se ejecute y navegando a la siguiente dirección en su navegador: http://localhost:8000/replay/<simulation-name>/<starting-time-step>
. Asegúrese de reemplazar <simulation-name>
con el nombre de la simulación que desea reproducir, y <starting-time-step>
con el paso de tiempo entero desde el que desea comenzar la repetición.
Por ejemplo, al visitar el siguiente enlace, iniciará un ejemplo presimulado, comenzando en el paso de tiempo 1:
http: // localhost: 8000/replay/july1_the_ville_isabella_maria_klaus-step-3-20/1/
Es posible que haya notado que todos los sprites de personajes en la repetición parecen idénticos. Nos gustaría aclarar que la función de reproducción está destinada principalmente a fines de depuración y no prioriza la optimización del tamaño de la carpeta de simulación o las imágenes. Para demostrar adecuadamente una simulación con sprites de carácter apropiados, primero deberá comprimir la simulación. Para hacer esto, abra el archivo compress_sim_storage.py
ubicado en el directorio reverie
usando un editor de texto. Luego, ejecute la función compress
con el nombre de la simulación de destino como su entrada. Al hacerlo, el archivo de simulación se comprimirá, lo que lo preparará para la demostración.
Para iniciar la demostración, vaya a la siguiente dirección en su navegador: http://localhost:8000/demo/<simulation-name>/<starting-time-step>/<simulation-speed>
. Tenga en cuenta que <simulation-name>
y <starting-time-step>
denotan las mismas cosas que se mencionan anteriormente. <simulation-speed>
se puede configurar para controlar la velocidad de demostración, donde 1 es el más lento, y 5 es el más rápido. Por ejemplo, visitar el siguiente enlace iniciará un ejemplo presimulado, comenzando en el paso de tiempo 1, con una velocidad de demostración media:
http: // localhost: 8000/demo/julio1_the_ville_isabella_maria_klaus-step-3-20/1/3/
Hemos notado que la API de OpenAI puede colgar cuando alcanza el límite de tarifa por hora. Cuando esto sucede, es posible que deba reiniciar su simulación. Por ahora, recomendamos guardar su simulación a menudo a medida que avanza para asegurarse de perder la menor simulación posible cuando necesita detenerla y volver a ejecutarla. Ejecutar estas simulaciones, al menos a principios de 2023, podría ser algo costoso, especialmente cuando hay muchos agentes en el medio ambiente.
Todas las simulaciones que guarde se ubicarán en environment/frontend_server/storage
, y todas las demostraciones comprimidas se ubicarán en environment/frontend_server/compressed_storage
.
Hay dos formas de personalizar opcionalmente sus simulaciones.
Primero es inicializar a los agentes con una historia única al comienzo de la simulación. Para hacer esto, querrá 1) Inicie su simulación utilizando una de las simulaciones base, y 2) el historial de autor y agente de carga. Más específicamente, aquí están los pasos:
Hay dos simulaciones base incluidas en el repositorio: base_the_ville_n25
con 25 agentes y base_the_ville_isabella_maria_klaus
con 3 agentes. Cargue una de las simulaciones base siguiendo los pasos hasta el paso 2 arriba.
Luego, cuando se le solicita con "Ingrese la opción:", debe cargar el historial de agentes respondiendo con el siguiente comando:
call -- load history the_ville/<history_file_name>.csv
Tenga en cuenta que deberá reemplazar <history_file_name>
con el nombre de un archivo de historial existente. Hay dos archivos de historial incluidos en el repositorio como ejemplos: agent_history_init_n25.csv
para base_the_ville_n25
y agent_history_init_n3.csv
para base_the_ville_isabella_maria_klaus
. Estos archivos incluyen listas de registros de memoria separadas por semicolon para cada uno de los agentes; cargarlos insertará los registros de memoria en la secuencia de memoria de los agentes.
Para personalizar la inicialización autorizando su propio archivo de historial, coloque su archivo en la siguiente carpeta: environment/frontend_server/static_dirs/assets/the_ville
. El formato de columna para su archivo de historial personalizado deberá coincidir con los archivos de historial de ejemplo incluidos. Por lo tanto, recomendamos comenzar el proceso copiando y pegando los que ya están en el repositorio.
Para una personalización más involucrada, deberá autorizar sus propios archivos de simulación base. El enfoque más directo sería copiar y pegar una carpeta de simulación base existente, renombrándola y editándola de acuerdo con sus requisitos. Este proceso será más simple si decide mantener los nombres de los agentes sin cambios. Sin embargo, si desea cambiar sus nombres o aumentar la cantidad de agentes que el mapa de Smallville puede acomodar, es posible que deba editar directamente el mapa utilizando el editor de mapas de machos.
Autores: Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, Michael S. Bernstein
Cite nuestro documento si usa el código o los datos en este repositorio.
@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}
}
Le recomendamos que apoye a los siguientes tres artistas increíbles que han diseñado los activos del juego para este proyecto, especialmente si planea usar los activos incluidos aquí para su propio proyecto:
Además, agradecemos a Lindsay Popowski, Philip Guo, Michael Terry y el Centro de Estudios Avanzados en la Comunidad de Ciencias del Comportamiento (CASBS) por sus ideas, discusiones y apoyo. Por último, todas las ubicaciones presentadas en Smallville están inspiradas en ubicaciones del mundo real que Joon ha frecuentado como estudiante de pregrado y posgrado, agradece a todos allí por alimentarlo y apoyarlo todos estos años.