Back to Blog
·Summer Team

Cómo crear NPCs con IA con memoria y personalidad en Godot 4

Aprende a crear NPCs que recuerdan a los jugadores, se mantienen en su personaje y reaccionan de forma dinámica usando IA en Godot 4.

Los NPCs en la mayoría de los juegos son máquinas de estados. Patrullan una ruta, detectan al jugador, cambian a modo ataque y vuelven al inicio del ciclo. Eso funciona para los enemigos, pero se desmorona cuando se trata de personajes que deberían sentirse vivos.

Un tendero que dice las mismas tres frases sin importar lo que hayas hecho en el juego. Un otorgador de misiones que no reconoce que salvaste su aldea la semana pasada. Un compañero que olvida cada conversación en el momento en que termina.

La IA cambia lo que es posible aquí. No reemplazando el diseño de juegos con chatbots, sino añadiendo capas de memoria, personalidad y respuesta dinámica sobre los sistemas tradicionales de NPCs.

Qué son realmente los NPCs con IA

Un NPC con IA no es un chatbot pegado en un mundo de juego. Esa es la confusión más común, y lleva a NPCs que se sienten desconectados del juego en el que existen.

Un NPC con IA bien construido combina modelos de lenguaje con sistemas de juego. Tiene:

  • Un prompt de personalidad que define cómo habla, qué le importa y cómo reacciona ante distintas situaciones. Un herrero gruñón habla distinto a un aprendiz nervioso.
  • Un sistema de memoria que rastrea las interacciones con el jugador. Lo que se dijo, lo que se intercambió, qué misiones se dieron y completaron.
  • Metas y motivaciones que influyen en el comportamiento. Un mercader quiere ganar dinero. Un guardia quiere proteger el pueblo. Un ladrón quiere evitar ser atrapado.
  • Consciencia del mundo del juego para que pueda referenciar eventos, objetos, ubicaciones y otros personajes reales. "Escuché que limpiaste a los bandidos del camino del este" solo funciona si el NPC puede consultar el estado del juego.

El resultado es un personaje que se mantiene consistente, recuerda el contexto y responde al jugador de maneras que se sienten naturales y ancladas en el mundo del juego.

Las tres capas de un NPC con IA

Todo NPC con IA puede descomponerse en tres capas distintas. Puedes implementar las tres, o empezar con solo una o dos.

Capa 1: Comportamiento

Esto es IA de juego tradicional. Rutas de patrulla, disparadores de reacción, lógica de combate, horarios diarios. Un árbol de comportamiento o máquina de estados gestiona las acciones físicas del NPC en el mundo.

Esta capa corre localmente sin necesidad de conexión a internet. Es determinista y predecible. El herrero se queda en la fragua durante el día y vuelve a casa de noche. El guardia patrulla las murallas. El mercader abre la tienda al amanecer.

En Godot 4, típicamente implementarías esto con un AnimationTree para transiciones de estados, nodos Area3D para zonas de detección, y un script que gestiona la máquina de estados o el árbol de comportamiento.

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 capa es la base. Aun si añades conversación y memoria con IA, la capa de comportamiento mantiene al NPC anclado en el mundo del juego con acciones consistentes y confiables.

Capa 2: Conversación

Aquí es donde entran los LLMs. En vez de seleccionar líneas de diálogo preescritas, el NPC genera respuestas basadas en su personalidad, el contexto actual y el historial de conversación.

El prompt de personalidad es la pieza más importante. Define la voz, el conocimiento y los límites del personaje:

Eres Tormund, un herrero en la aldea de Ashford.
Eres gruñón pero justo. Te enorgulleces de tu oficio.
Cobras precios razonables y das descuentos a clientes frecuentes.
Tienes una misión secundaria: necesitas mineral raro de las minas del norte
para forjar una hoja legendaria. Le pedirás ayuda a clientes de confianza.
Sabes sobre: chismes de la aldea, calidad de armas, ubicaciones mineras.
No sabes sobre: magia, política, eventos fuera de Ashford.

La capa de conversación necesita un modelo de IA. Puede ser una API en la nube (OpenAI, Anthropic, Google) o un modelo local corriendo a través de Ollama. Los modelos locales tienen mayor latencia pero cero costo continuo y privacidad total.

Una decisión de diseño clave: las respuestas del NPC deben estar acotadas. Un chatbot sin restricciones alucinará ubicaciones que no existen, referenciará objetos que el juego no tiene, o romperá el personaje por completo. El prompt de personalidad, combinado con un sistema que inyecta el estado actual del juego, mantiene las respuestas ancladas.

Capa 3: Memoria

La memoria es lo que separa a un NPC con IA convincente de una novedad. Sin memoria, cada conversación empieza de cero. El NPC no tiene idea de quién es el jugador ni de qué pasó antes.

Un sistema de memoria rastrea:

  • Historial de interacciones: Lo que dijo el jugador, lo que respondió el NPC, y cuándo ocurrió.
  • Estado de relación: ¿El NPC confía en el jugador? ¿Son amistosos, neutrales u hostiles?
  • Eventos clave: El jugador completó una misión para este NPC. El jugador robó en su tienda. El jugador salvó a su hijo del peligro.
  • Conocimiento compartido: Información que el jugador reveló. "Estoy buscando el templo perdido" se convierte en algo que el NPC puede referenciar más tarde.

El almacenamiento de memoria puede ser simple. Un archivo JSON o una base de datos SQLite funciona bien para la mayoría de juegos. La parte crítica es cómo se recuperan las memorias y se inyectan en el contexto de la conversación.

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:
    # Sort by importance and recency, return top memories
    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)

Cuando el jugador habla con el NPC, las memorias relevantes se extraen y se incluyen en el prompt. "El jugador te ayudó a encontrar mineral raro hace tres días. Estás agradecido y le ofreciste un descuento." El LLM usa este contexto para generar una respuesta que reconoce la historia compartida.

La memoria persiste entre sesiones. Cuando el jugador carga su partida guardada, el NPC sigue recordando todo. Esto es lo que hace que los NPCs con IA se sientan genuinamente distintos de los programados.

Cómo crear NPCs con IA en Summer Engine

Summer Engine hace este proceso conversacional. En vez de cablear cada capa manualmente, describes el NPC que quieres:

"Añade un NPC herrero llamado Tormund. Es gruñón pero justo, cobra precios razonables y tiene una misión secundaria sobre encontrar mineral raro en las minas del norte. Recuerda transacciones pasadas y da descuentos a clientes frecuentes."

El motor crea:

  • El nodo del NPC con un CharacterBody3D, forma de colisión y malla
  • Un árbol de comportamiento con horario diario (trabaja en la fragua durante el día, va a casa de noche)
  • Un sistema de conversación con prompt de personalidad basado en tu descripción
  • Un almacén de memoria que rastrea interacciones con el jugador e historial de transacciones
  • Una interfaz de tienda con lógica de precios que considera el estado de la relación

Puedes refinar cualquiera de estos componentes a través de la conversación. "Haz que Tormund sea más desconfiado con los extraños" ajusta el prompt de personalidad y el estado inicial de relación. "Añade una reacción de combate para que se defienda si lo atacan" extiende el árbol de comportamiento.

Como Summer Engine es compatible con Godot 4, los sistemas generados usan nodos estándar de Godot y GDScript. Puedes inspeccionar y modificar todo lo que el motor crea. El NPC con IA no es una caja negra; es una colección de nodos, scripts y recursos que te pertenecen.

NPCs con IA vs NPCs programados

Ambos enfoques tienen usos legítimos. La elección correcta depende de tu juego.

NPCs programados:

  • Completamente predecibles. Controlas cada palabra que dicen.
  • Funcionan sin conexión con cero costo en tiempo de ejecución.
  • Más fáciles de probar y hacer QA ya que el comportamiento es determinista.
  • Escalan bien. Cien NPCs programados cuestan lo mismo que uno.
  • Limitados por el contenido que escribes. Los jugadores agotan el diálogo rápido.

NPCs con IA:

  • Dinámicos y reactivos. Cada conversación es única.
  • Recuerdan el contexto entre interacciones.
  • Pueden manejar entradas inesperadas del jugador con elegancia.
  • Mayor costo en tiempo de ejecución (llamadas a API o inferencia de modelo local).
  • Más difíciles de probar ya que las respuestas varían.
  • Riesgo de romper el personaje o generar contenido inapropiado sin las barreras adecuadas.

El enfoque híbrido funciona mejor para la mayoría de juegos. Usa comportamiento programado para la capa base: rutas de patrulla, lógica de combate, horarios diarios y momentos críticos de la historia. Usa IA para las capas de conversación y memoria, donde las respuestas dinámicas aportan más valor.

Un NPC crítico para una misión puede tener diálogo programado para los momentos clave de la historia pero respuestas impulsadas por IA para todo lo demás. El jugador siempre obtiene la información que necesita para progresar, al tiempo que tiene la libertad de hacer preguntas y construir una relación con el personaje.

Primeros pasos

Las plantillas de RPG en Summer Engine vienen con sistemas de NPC con IA listos para personalizar. Describe los personajes que quieres y el motor los construye con personalidad, memoria y consciencia del mundo del juego.

Si quieres explorar la generación de NPCs con IA, échale un vistazo al generador de NPC con IA o descarga Summer Engine para construir tus primeros personajes impulsados por IA.