Wiki / Guides / Character Identity

Character Identity

Define la identidad y personalidad de tus NPCs. Este recurso contiene toda la informacion necesaria para que la IA genere dialogos consistentes con la personalidad del personaje.

Vision General

CharacterIdentity es un Resource de Godot que encapsula la personalidad completa de un NPC. Cuando el LLM genera respuestas, usa el metodo to_system_prompt() para convertir estos datos en instrucciones que guian su comportamiento.

💡

Flujo de datos

CharacterIdentity -> to_system_prompt() -> LlamaInterface -> Respuesta con personalidad

📋 Grupo: Identity

Propiedad Tipo Descripcion
character_id String Identificador unico del personaje (para saves y referencias)
character_name String Nombre visible en dialogos
portrait Texture2D Textura opcional para UI

🎭 Grupo: Personality

Propiedad Tipo Descripcion
personality String Rasgos de personalidad y tendencias
background String Historia, origen y experiencias
speech_style SpeechStyle Preset de estilo de habla
speech_patterns String Patrones de habla personalizados

🧠 Grupo: Knowledge & Motivations

Propiedad Tipo Descripcion
knowledge Array[String] Temas que el personaje conoce
goals Array[String] Objetivos del personaje
fears Array[String] Miedos y cosas que evita
secrets Array[String] Informacion oculta

👥 Grupo: Social

Propiedad Tipo Descripcion
relationships Dictionary Diccionario character_id -> descripcion
example_dialogues Array[String] Dialogos de ejemplo que muestran su voz

🗣 Estilos de Habla (SpeechStyle)

CASUAL

Relajado, usa contracciones e informalidad

FORMAL

Profesional, gramatica correcta

MEDIEVAL

Arcaico, usa "vos", "habeis", etc.

SCIENTIFIC

Tecnico, terminologia precisa

STREET

Jerga callejera, expresiones coloquiales

POETIC

Metaforico, lenguaje florido

MILITARY

Directo, oraciones cortas

CHILDISH

Simple, jugueton

ELDERLY

Sabio, pausado, usa proverbios

ROBOTIC

Mecanico, literal, sin emociones

🔧 Metodos Principales

Metodo Retorno Descripcion
to_system_prompt() String Convierte los datos a system prompt para el LLM
to_dict() Dictionary Serializa a diccionario para JSON/storage
from_dict(dict) CharacterIdentity Crea CharacterIdentity desde diccionario
is_valid() bool Verifica si tiene datos minimos requeridos
get_summary() String Resumen corto para debugging
estimate_tokens() int Estima tokens que usara el prompt (~4 chars/token)

📝 Ejemplo de Uso

GDScript
# Crear una identidad de personaje
var blacksmith = CharacterIdentity.new()

# Configurar identidad
blacksmith.character_id = "blacksmith_01"
blacksmith.character_name = "Grondar"
blacksmith.portrait = preload("res://portraits/grondar.png")

# Configurar personalidad
blacksmith.personality = "Gruñon pero con buen corazon. Perfeccionista con su trabajo."
blacksmith.background = "Ex-soldado que perdio su brazo en batalla. Ahora forja armas."
blacksmith.speech_style = CharacterIdentity.SpeechStyle.MILITARY
blacksmith.speech_patterns = "Usa metaforas de batalla. Dice 'muchacho' a menudo."

# Conocimiento y motivaciones
blacksmith.knowledge = ["forja", "metales", "guerra del norte", "armas legendarias"]
blacksmith.goals = ["forjar su obra maestra", "encontrar aprendiz digno"]
blacksmith.fears = ["perder su otro brazo", "ser olvidado"]
blacksmith.secrets = ["Sabe donde esta la Espada del Rey"]

# Relaciones
blacksmith.relationships = {
    "mayor_01": "Viejo amigo de guerra, le debe la vida",
    "merchant_01": "Rival comercial, desconfia de el"
}

# Ejemplos de dialogo
blacksmith.example_dialogues = [
    "Escucha, muchacho, el acero no miente.",
    "Esta espada? Tardare tres lunas. La perfeccion no se apura."
]

# Usar con DialogueManager
var dialogue_manager = DialogueManager.new()
dialogue_manager.character_identity = blacksmith
dialogue_manager.start_dialogue()