Como Criar NPCs com IA com Memória e Personalidade no Godot 4
Aprenda a criar NPCs que lembram dos jogadores, mantêm a personalidade e reagem dinamicamente usando IA no Godot 4.
NPCs na maioria dos jogos são máquinas de estados. Eles patrulham um caminho, detectam o jogador, mudam para o modo de ataque e voltam ao início. Isso funciona para inimigos, mas desmorona para personagens que deveriam parecer vivos.
Um lojista que diz as mesmas três falas independentemente do que você fez no jogo. Um entregador de missões que não reconhece que você salvou a vila dele na semana passada. Um companheiro que esquece cada conversa no momento em que ela termina.
A IA muda o que é possível aqui. Não substituindo o design de jogos por chatbots, mas adicionando camadas de memória, personalidade e resposta dinâmica em cima dos sistemas tradicionais de NPCs.
O Que NPCs com IA Realmente São
Um NPC com IA não é um chatbot colado em um mundo de jogo. Essa é a equivocação mais comum, e leva a NPCs que parecem desconectados do jogo em que existem.
Um NPC com IA bem construído combina modelos de linguagem com sistemas de jogo. Ele tem:
- Um prompt de personalidade que define como ele fala, com o que se importa e como reage a diferentes situações. Um ferreiro rude fala de forma diferente de um aprendiz nervoso.
- Um sistema de memória que rastreia interações com o jogador. O que foi dito, o que foi negociado, quais missões foram dadas e concluídas.
- Objetivos e motivações que influenciam o comportamento. Um comerciante quer ganhar dinheiro. Um guarda quer proteger a cidade. Um ladrão quer evitar ser pego.
- Consciência do mundo do jogo para que possa referenciar eventos, itens, locais e outros personagens reais. "Ouvi dizer que você eliminou os bandidos da estrada leste" só funciona se o NPC puder consultar o estado do jogo.
O resultado é um personagem que permanece consistente, lembra do contexto e responde ao jogador de formas que parecem naturais e fundamentadas no mundo do jogo.
As Três Camadas de um NPC com IA
Todo NPC com IA pode ser dividido em três camadas distintas. Você pode implementar todas as três, ou começar com apenas uma ou duas.
Camada 1: Comportamento
Esta é a IA tradicional de jogos. Rotas de patrulha, gatilhos de reação, lógica de combate, rotinas diárias. Uma árvore de comportamento ou máquina de estados cuida das ações físicas do NPC no mundo.
Esta camada roda localmente sem necessidade de conexão com a internet. É determinística e previsível. O ferreiro fica na forja durante o dia e vai para casa à noite. O guarda patrulha as muralhas. O comerciante abre a loja ao amanhecer.
No Godot 4, você normalmente implementaria isso com uma AnimationTree para transições de estado, nós Area3D para zonas de detecção e um script que gerencia a máquina de estados ou árvore de comportamento.
enum State { IDLE, WORKING, SLEEPING, TALKING }
var current_state: State = State.IDLE
var schedule: Dictionary = {
6: State.WORKING,
20: State.IDLE,
22: State.SLEEPING
}
Esta camada é a fundação. Mesmo que você adicione conversação e memória com IA, a camada de comportamento mantém o NPC fundamentado no mundo do jogo com ações consistentes e confiáveis.
Camada 2: Conversação
É aqui que os LLMs entram. Em vez de selecionar entre falas pré-escritas, o NPC gera respostas com base em sua personalidade, no contexto atual e no histórico da conversa.
O prompt de personalidade é a peça mais importante. Ele define a voz, o conhecimento e os limites do personagem:
Você é Tormund, um ferreiro na vila de Ashford.
Você é rude mas justo. Você tem orgulho do seu ofício.
Você cobra preços razoáveis e dá descontos para clientes frequentes.
Você tem uma missão paralela: precisa de minério raro das minas do norte
para forjar uma lâmina lendária. Você pedirá ajuda a clientes de confiança.
Você sabe sobre: fofocas da vila, qualidade de armas, locais de mineração.
Você não sabe sobre: magia, política, eventos fora de Ashford.
A camada de conversação precisa de um modelo de IA. Pode ser uma API na nuvem (OpenAI, Anthropic, Google) ou um modelo local rodando através do Ollama. Modelos locais têm latência maior, mas custo contínuo zero e privacidade completa.
Uma decisão chave de design: as respostas do NPC precisam ter limites. Um chatbot sem restrições vai alucinar locais que não existem, referenciar itens que o jogo não tem ou sair completamente do personagem. O prompt de personalidade, combinado com um sistema que injeta o estado atual do jogo, mantém as respostas fundamentadas.
Camada 3: Memória
A memória é o que separa um NPC com IA convincente de uma novidade. Sem memória, cada conversa começa do zero. O NPC não tem ideia de quem é o jogador ou do que aconteceu antes.
Um sistema de memória rastreia:
- Histórico de interações: O que o jogador disse, o que o NPC respondeu e quando aconteceu.
- Estado do relacionamento: O NPC confia no jogador? Eles são amigáveis, neutros ou hostis?
- Eventos importantes: O jogador concluiu uma missão para este NPC. O jogador roubou da loja dele. O jogador salvou o filho dele do perigo.
- Conhecimento compartilhado: Informações que o jogador revelou. "Estou procurando o templo perdido" vira algo que o NPC pode referenciar depois.
O armazenamento de memória pode ser simples. Um arquivo JSON ou um banco SQLite funciona bem para a maioria dos jogos. A parte crítica é como as memórias são recuperadas e injetadas no contexto da conversa.
var memories: Array[Dictionary] = []
func add_memory(event: String, importance: float) -> void:
memories.append({
"event": event,
"importance": importance,
"timestamp": Time.get_unix_time_from_system(),
})
func get_relevant_memories(context: String, limit: int = 5) -> Array:
# Ordena por importância e recência, retorna as melhores memórias
var sorted = memories.duplicate()
sorted.sort_custom(func(a, b):
return a.importance * _recency_weight(a.timestamp) > \
b.importance * _recency_weight(b.timestamp)
)
return sorted.slice(0, limit)
Quando o jogador conversa com o NPC, memórias relevantes são puxadas e incluídas no prompt. "O jogador ajudou você a encontrar minério raro há três dias. Você está grato e ofereceu um desconto." O LLM usa esse contexto para gerar uma resposta que reconhece o histórico compartilhado.
A memória persiste entre sessões. Quando o jogador carrega seu save, o NPC ainda lembra de tudo. É isso que faz NPCs com IA parecerem genuinamente diferentes dos roteirizados.
Criando NPCs com IA no Summer Engine
O Summer Engine torna esse processo conversacional. Em vez de conectar cada camada manualmente, você descreve o NPC que quer:
"Adicione um NPC ferreiro chamado Tormund. Ele é rude mas justo, cobra preços razoáveis e tem uma missão paralela sobre encontrar minério raro nas minas do norte. Ele lembra de transações passadas e dá descontos para clientes frequentes."
O motor cria:
- O nó do NPC com um CharacterBody3D, forma de colisão e malha
- Uma árvore de comportamento com rotina diária (trabalha na forja durante o dia, vai para casa à noite)
- Um sistema de conversação com prompt de personalidade baseado na sua descrição
- Um armazenamento de memória que rastreia interações do jogador e histórico de transações
- Uma interface de loja com lógica de preços que leva em conta o status do relacionamento
Você pode refinar qualquer um desses componentes através de conversação. "Deixe o Tormund mais desconfiado com estranhos" ajusta o prompt de personalidade e o estado inicial de relacionamento. "Adicione uma reação de combate para ele revidar se for atacado" estende a árvore de comportamento.
Como o Summer Engine é compatível com Godot 4, os sistemas gerados usam nós Godot padrão e GDScript. Você pode inspecionar e modificar tudo o que o motor cria. O NPC com IA não é uma caixa-preta; é um conjunto de nós, scripts e recursos que você possui.
NPCs com IA vs NPCs Roteirizados
Ambas as abordagens têm usos legítimos. A escolha certa depende do seu jogo.
NPCs Roteirizados:
- Completamente previsíveis. Você controla cada palavra que eles dizem.
- Funcionam offline com custo zero em tempo de execução.
- Mais fáceis de testar e fazer QA, já que o comportamento é determinístico.
- Escalam bem. Cem NPCs roteirizados custam o mesmo que um.
- Limitados pelo conteúdo que você escreve. Jogadores esgotam os diálogos rapidamente.
NPCs com IA:
- Dinâmicos e responsivos. Cada conversa é única.
- Lembram do contexto entre interações.
- Lidam com entradas inesperadas do jogador de forma elegante.
- Custo maior em tempo de execução (chamadas de API ou inferência de modelo local).
- Mais difíceis de testar, já que as respostas variam.
- Risco de sair do personagem ou gerar conteúdo inapropriado sem salvaguardas adequadas.
A abordagem híbrida funciona melhor para a maioria dos jogos. Use comportamento roteirizado para a camada base: rotas de patrulha, lógica de combate, rotinas diárias e momentos críticos da história. Use IA para as camadas de conversação e memória, onde respostas dinâmicas agregam mais valor.
Um NPC crítico para uma missão pode ter diálogo roteirizado para momentos chave da história, mas respostas movidas a IA para todo o resto. O jogador sempre recebe as informações que precisa para progredir, enquanto também tem a liberdade de fazer perguntas e construir um relacionamento com o personagem.
Começando
Os templates de RPG no Summer Engine vêm com sistemas de NPC com IA prontos para personalizar. Descreva os personagens que você quer e o motor os constrói com personalidade, memória e consciência do mundo do jogo.
Se quiser explorar a geração de NPCs com IA, confira o gerador de NPC com IA ou baixe o Summer Engine para criar seus primeiros personagens com IA.