Este repositório acompanha nosso trabalho de pesquisa intitulado "Agentes generativos: simulacra interativo do comportamento humano". Ele contém nosso módulo de simulação principal para agentes generativos - agentes computacionais que simulam comportamentos humanos críveis - e seu ambiente de jogo. Abaixo, documentamos as etapas para configurar o ambiente de simulação em sua máquina local e reproduzir a simulação como uma animação de demonstração.
Para configurar seu ambiente, você precisará gerar um arquivo utils.py
que contém sua tecla API OpenAI e baixe os pacotes necessários.
Na pasta reverie/backend_server
(onde reverie.py
está localizado), crie um novo arquivo intitulado utils.py
e copie e cole o conteúdo abaixo no arquivo:
# 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
Substitua <Your OpenAI API>
pela sua chave de API do OpenAI e <name>
pelo seu nome.
Instale tudo listado no arquivo requirements.txt
(eu recomendo fortemente a configuração de um VirtualEnv como de costume). Uma nota sobre a versão Python: testamos nosso ambiente no Python 3.9.12.
Para executar uma nova simulação, você precisará iniciar simultaneamente dois servidores: o servidor de ambiente e o servidor de simulação do agente.
Novamente, o ambiente é implementado como um projeto Django e, como tal, você precisará iniciar o servidor Django. Para fazer isso, primeiro navegue até environment/frontend_server
(é aqui que manage.py
está localizado) na sua linha de comando. Em seguida, execute o seguinte comando:
python manage.py runserver
Em seguida, no seu navegador favorito, vá para http: // localhost: 8000/. Se você vir uma mensagem que diz: "Seu servidor de ambiente está em funcionamento", "seu servidor está sendo executado corretamente. Certifique-se de que o Servidor Ambiental continue sendo executado enquanto estiver executando a simulação; portanto, mantenha a guia Linha de comando aberta! (Nota: eu recomendo usar o Chrome ou o Safari. O Firefox pode produzir algumas falhas de front -end, embora não deva interferir na simulação real.)
Abra outra linha de comando (a que você usou na etapa 1 ainda deve estar executando o servidor do ambiente, então deixe isso como ele é). Navegue até reverie/backend_server
e execute reverie.py
.
python reverie.py
Isso iniciará o servidor de simulação. Um prompt de linha de comando aparecerá, perguntando o seguinte: "Digite o nome da simulação bifurcada:". Para iniciar uma simulação de 3 agentes com Isabella Rodriguez, Maria Lopez e Klaus Mueller, digite o seguinte:
base_the_ville_isabella_maria_klaus
O prompt solicitará: "Digite o nome da nova simulação:". Digite qualquer nome para denotar sua simulação atual (por exemplo, apenas "simulação de teste" servirá por enquanto).
test-simulation
Mantenha o servidor simulador em execução. Nesta fase, ele exibirá o seguinte prompt: "Digite a opção:"
No seu navegador, navegue para http: // localhost: 8000/simulul_home. Você deve ver o mapa de Smallville, juntamente com uma lista de agentes ativos no mapa. Você pode se mover pelo mapa usando as setas do teclado. Por favor, mantenha esta guia aberta. Para executar a simulação, digite o seguinte comando em seu servidor de simulação em resposta ao aviso "Option Enter":
run <step-count>
Observe que você deseja substituir <step-count>
acima por um número inteiro indicando o número de etapas do jogo que deseja simular. Por exemplo, se você deseja simular 100 etapas do jogo, insira run 100
. Uma etapa do jogo representa 10 segundos no jogo.
Sua simulação deve estar em execução e você verá os agentes se movendo no mapa do seu navegador. Depois que a simulação terminar em execução, o prompt "Enter a opção" reaparecerá. Nesse ponto, você pode simular mais etapas novamente, reentrando o comando Run com as etapas desejadas do jogo, saia da simulação sem salvar digitando exit
ou salvar e sair digitando fin
.
A simulação salva pode ser acessada na próxima vez que você executar o servidor de simulação, fornecendo o nome da sua simulação como simulação bifurcada. Isso permitirá que você reinicie sua simulação a partir do ponto em que parou.
Você pode reproduzir uma simulação que você já executou simplesmente fazendo seu servidor de ambiente em execução e navegar para o seguinte endereço no seu navegador: http://localhost:8000/replay/<simulation-name>/<starting-time-step>
. Certifique-se de substituir <simulation-name>
pelo nome da simulação que deseja reproduzir e <starting-time-step>
com a etapa inteira do tempo a partir da qual você deseja iniciar a reprodução.
Por exemplo, ao visitar o link a seguir, você iniciará um exemplo pré-simulado, começando na etapa 1:
http: // localhost: 8000/replay/julho1_the_ville_isabella_maria_klaus-step-3-20/1/
Você deve ter notado que todos os sprites de personagens na repetição parecem idênticos. Gostaríamos de esclarecer que a função Replay se destina principalmente a fins de depuração e não prioriza a otimização do tamanho da pasta de simulação ou do visual. Para demonstrar adequadamente uma simulação com sprites de caracteres apropriados, você precisará comprimir a simulação primeiro. Para fazer isso, abra o arquivo compress_sim_storage.py
localizado no diretório reverie
usando um editor de texto. Em seguida, execute a função compress
com o nome da simulação de destino como sua entrada. Ao fazer isso, o arquivo de simulação será comprimido, preparando -o para demonstração.
Para iniciar a demonstração, vá para o seguinte endereço no seu navegador: http://localhost:8000/demo/<simulation-name>/<starting-time-step>/<simulation-speed>
. Observe que <simulation-name>
e <starting-time-step>
denotam as mesmas coisas mencionadas acima. <simulation-speed>
pode ser definido para controlar a velocidade da demonstração, onde 1 é o mais lento e 5 é o mais rápido. Por exemplo, a visita do link a seguir iniciará um exemplo pré-simulado, começando no tempo 1, com uma velocidade de demonstração média:
http: // localhost: 8000/Demo/julho1_the_ville_isabella_maria_klaus-step-3-20/1/3/
Percebemos que a API do OpenAI pode pendurar quando atingir o limite de taxa horária. Quando isso acontece, pode ser necessário reiniciar sua simulação. Por enquanto, recomendamos salvar sua simulação com frequência à medida que você avança para garantir que você perca o mínimo possível da simulação quando precisar parar e executá -la. A execução dessas simulações, pelo menos no início de 2023, pode ser um pouco cara, especialmente quando há muitos agentes no ambiente.
Todas as simulações que você salvam estarão localizadas no environment/frontend_server/storage
, e todas as demos compactadas estarão localizadas no environment/frontend_server/compressed_storage
.
Existem duas maneiras de personalizar opcionalmente suas simulações.
O primeiro é inicializar agentes com história única no início da simulação. Para fazer isso, você deseja 1) iniciar sua simulação usando uma das simulações básicas e 2) histórico de autores e carregamento do agente. Mais especificamente, aqui estão as etapas:
Existem duas simulações básicas incluídas no repositório: base_the_ville_n25
com 25 agentes e base_the_ville_isabella_maria_klaus
com 3 agentes. Carregue uma das simulações básicas seguindo as etapas até a etapa 2 acima.
Então, quando solicitado com "Enter a opção:", você deve carregar o histórico do agente respondendo com o seguinte comando:
call -- load history the_ville/<history_file_name>.csv
Observe que você precisará substituir <history_file_name>
pelo nome de um arquivo de histórico existente. Existem dois arquivos de histórico incluídos no repositório como exemplos: agent_history_init_n25.csv
para base_the_ville_n25
e agent_history_init_n3.csv
para base_the_ville_isabella_maria_klaus
. Esses arquivos incluem listas semicolon-separadas de registros de memória para cada um dos agentes-carregá-los inserirá os registros de memória no fluxo de memória dos agentes.
Para personalizar a inicialização, criando seu próprio arquivo de histórico, coloque seu arquivo na seguinte pasta: environment/frontend_server/static_dirs/assets/the_ville
. O formato da coluna para o seu arquivo de histórico personalizado terá que corresponder aos arquivos de histórico de exemplo incluídos. Portanto, recomendamos iniciar o processo copiando e colando os que já estão no repositório.
Para uma personalização mais envolvida, você precisará criar seus próprios arquivos de simulação básica. A abordagem mais direta seria copiar e colar uma pasta de simulação de base existente, renomeando e editando -a de acordo com seus requisitos. Esse processo será mais simples se você decidir manter os nomes de agentes inalterados. No entanto, se você deseja alterar seus nomes ou aumentar o número de agentes que o mapa de Smallville pode acomodar, pode ser necessário editar diretamente o mapa usando o editor de mapas de azulejos.
Autores: Joon Sung Park, Joseph C. O'Brien, Carrie J. Cai, Meredith Ringel Morris, Percy Liang, Michael S. Bernstein
Cite nosso artigo se você usar o código ou dados neste repositório.
@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}
}
Incentivamos você a apoiar os três artistas incríveis que projetaram os ativos do jogo para este projeto, especialmente se você planeja usar os ativos incluídos aqui para seu próprio projeto:
Além disso, agradecemos a Lindsay Popowski, Philip Guo, Michael Terry e o Centro de Estudos Avançados da Comunidade de Ciências Comportamentais (CASBS) por suas idéias, discussões e apoio. Por fim, todos os locais apresentados em Smallville são inspirados em locais do mundo real que Joon frequentou como estudante de graduação e pós-graduação-ele agradece a todos por alimentar e apoiá-lo todos esses anos.