Skip to content

Cambio dinámico de personalidad de IA

Crea algunos botones que cambien la personalidad, estilo de habla o idioma de la IA con un solo clic. Usa "Tell AI" y "Stop Telling AI" para cambiar dinámicamente el prompt del sistema de la IA — no es necesario reiniciar la sesión, cambia sin interrupciones a mitad de la conversación.


Lo que vas a construir

Un cambiador de personalidad integrado en el chat:

  • Tres modos — Narrador Normal, Modo Comedia, Modo Terror
  • Cambio con un clic — toca un botón para cambiar el estilo de habla de la IA, efectivo de inmediato
  • Retroalimentación visual — el botón del modo actualmente activo se resalta para que el jugador siempre sepa en qué modo está
  • Transiciones sin interrupciones — el cambio no interrumpe la conversación; la próxima respuesta de la IA usa el nuevo estilo

Cómo funciona

El sistema de comportamientos de Yumina tiene dos acciones poderosas: "Tell AI" y "Stop Telling AI".

  • Tell AI (inject-directive) — Inyecta una directiva en el prompt del sistema de la IA. Mientras la directiva esté presente, la IA la ve y la sigue en cada respuesta. Puedes especificar dónde aparece en el prompt, si es permanente, y cuántos turnos antes de que expire automáticamente.
  • Stop Telling AI (remove-directive) — Elimina una directiva previamente inyectada por su ID. Una vez eliminada, la IA ya no ve esa directiva.

Usando estas dos acciones juntas, podemos hacer esto:

El jugador hace clic en el botón "Modo Comedia"
  → El comportamiento se dispara: primero elimina la directiva de personalidad antigua (si la hay)
  → Luego inyecta la nueva directiva de estilo comedia
  → El prompt del sistema de la IA ahora incluye: "Narrate everything in a humorous, funny tone..."
  → La próxima respuesta de la IA cambia a estilo comedia

¿En qué se diferencia esto de las entradas del lorebook? Las entradas del lorebook (enable entry / disable entry) son geniales para grandes bloques de texto de worldbuilding. Las directivas inyectadas mediante "Tell AI" son más ligeras y flexibles — no son entradas, sino pequeños fragmentos de texto insertados directamente en el prompt del sistema. Perfectas para instrucciones de estilo cortas, reglas temporales o pistas puntuales. Puedes usar ambas juntas.


Paso a paso

Paso 1: Crea una variable

Necesitamos una variable para seguir qué modo está actualmente activo. El Root Component la lee para decidir qué botón resaltar.

Editor → barra lateral → pestaña Variables → haz clic en "Add Variable"

CampoValorPor qué
Nombre visibleModo actualPara tu propia referencia
IDcurrent_modeLos comportamientos y el Root Component leen/escriben usando este ID
TipoStringPorque los valores son texto ("normal", "comedy", "horror")
Valor por defectonormalLas nuevas sesiones empiezan en modo normal
CategoríaCustomCategoría dedicada al sistema de personalidad
Reglas de comportamientoNo modifiques esta variable. Está controlada por los botones de la UI del jugador.Le dice a la IA que no cambie esto por su cuenta — solo los botones del jugador pueden

Paso 2: Crea comportamientos

Necesitamos 3 comportamientos — uno por modo. La lógica de cada comportamiento es: eliminar directiva antigua → inyectar nueva directiva → actualizar variable → notificar al jugador.

Editor → pestaña Behaviors → añade comportamientos uno por uno

Comportamiento 1: Cambiar a Modo Comedia

WHEN (disparador):

CampoValorPor qué
Trigger TypeActionSe dispara cuando el código llama a executeAction("mode-comedy")
Action IDmode-comedyEl botón en el Root Component llama a este ID

DO (acciones):

Añade las siguientes acciones en orden:

#Tipo de acciónConfiguraciónPropósito
1Stop Telling AIDirective ID: personality-overrideElimina la directiva de personalidad anterior (si la hay). Si no existe ninguna, no pasa nada — sin error
2Tell AIDirective ID: personality-override, contenido a continuación, posición: After CharacterInyecta la directiva de estilo comedia
3Modificar variablecurrent_mode set a comedyActualiza la variable para que el Root Component sepa el modo actual
4Mostrar notificaciónMensaje: Cambiado a Modo Comedia, estilo: infoDa retroalimentación visual al jugador

Contenido de la directiva "Tell AI":

[Estilo de narración: Modo Comedia]
De ahora en adelante, narra todo con un tono humorístico y cómico. Puedes:
- Usar metáforas exageradas y analogías absurdas
- Romper ocasionalmente la cuarta pared y susurrar comentarios al lector
- Hacer que los NPCs suelten frases hilarantemente inoportunas
- Describir escenas serias con una voz ligera para conseguir contraste cómico
Mantén la historia avanzando — no te limites a contar chistes. El humor debe entretejerse en la narración, no reemplazarla.

¿Por qué "Stop Telling AI" antes de "Tell AI"? Porque ambas directivas usan el mismo ID (personality-override). Si el jugador cambia de Terror a Comedia, no eliminar la directiva antigua primero dependería de que injectDirective reemplace automáticamente el mismo ID — lo cual hace — pero eliminar explícitamente y luego reinjectar es un mejor hábito. La lógica es más clara y evita posibles casos límite.


Comportamiento 2: Cambiar a Modo Terror

WHEN:

CampoValor
Trigger TypeAction
Action IDmode-horror

DO:

#Tipo de acciónConfiguraciónPropósito
1Stop Telling AIDirective ID: personality-overrideElimina la antigua directiva de personalidad
2Tell AIDirective ID: personality-override, contenido a continuación, posición: After CharacterInyecta la directiva de estilo terror
3Modificar variablecurrent_mode set a horrorActualiza la variable
4Mostrar notificaciónMensaje: Cambiado a Modo Terror, estilo: dangerUsa una notificación de estilo peligro — el rojo encaja con el ambiente de terror

Contenido de la directiva "Tell AI":

[Estilo de narración: Modo Terror]
De ahora en adelante, narra todo con una atmósfera oscura e inquietante. Deberías:
- Usar un ritmo lento y opresivo para las descripciones de escena, centrándote en detalles sensoriales (sonidos, olores, texturas)
- Insinuar que algo observa al personaje desde las sombras, pero nunca revelarlo directamente
- Haz que el propio entorno se sienta extraño — puertas que se cierran solas, sombras que se mueven al revés, reflejos en los espejos que se retrasan medio compás
- Da a los NPCs diálogos con una sutil sensación de "algo va mal", como si supieran algo que no deberían
- Usa ocasionalmente la segunda persona para describir las reacciones fisiológicas del personaje (vellos del cuello erizándose, latidos acelerándose, pupilas dilatándose)
Construye una tensión sostenida, pero no metas un monstruo en cada párrafo. El verdadero terror vive en lo desconocido.

Comportamiento 3: Volver al Modo Normal

WHEN:

CampoValor
Trigger TypeAction
Action IDmode-normal

DO:

#Tipo de acciónConfiguraciónPropósito
1Stop Telling AIDirective ID: personality-overrideElimina la directiva de personalidad personalizada. Una vez eliminada, el prompt del sistema ya no tiene una sobrescritura de estilo — la IA vuelve a su estilo de narración predeterminado
2Modificar variablecurrent_mode set a normalActualiza la variable
3Mostrar notificaciónMensaje: Restored Normal Mode, estilo: infoRetroalimentación

Nota: El modo normal no inyecta ninguna directiva. Solo eliminar la sobrescritura anterior es suficiente — la IA vuelve a cualquier estilo predeterminado que hayas definido en tus entradas de personaje e instrucciones del sistema.


Paso 3: Entiende la posición y persistencia de las directivas

Al configurar una acción "Tell AI", verás dos configuraciones importantes: posición y persistencia / duración de turnos. Esto es lo que significan.

Posición de la directiva

La posición controla dónde aparece la directiva inyectada en el prompt del sistema.

PosiciónEtiquetaDescripciónCuándo usar
autoAutoEl motor elige el mejor lugar (normalmente después de la definición del personaje)Suficientemente bueno para la mayoría de los casos
topTopAl principio del prompt del sistema, mayor prioridadReglas globales urgentes (por ejemplo, "From now on reply only in English")
before_charBefore CharacterAntes de la definición del personajeConfiguraciones globales que afectan cómo la IA interpreta al personaje
after_charAfter CharacterDespués de la definición del personajeDirectivas de estilo, ajustes de tono (esta receta usa esta)
bottomBottomAl final del prompt del sistemaRecordatorios de última hora, instrucciones de estilo "jailbreak"
depthDepthInsertado por profundidad (antes del N-ésimo mensaje más reciente)Directivas que necesitan aparecer a mitad de conversación en lugar de en el prompt del sistema

¿Por qué esta receta usa "After Character"? Porque las directivas de cambio de personalidad son sobrescrituras de estilo para la narración. Colocadas después de la definición del personaje, la IA lee primero "quién soy" (personaje), luego "cómo debería hablar" (directiva de estilo). El orden se siente natural y produce los mejores resultados.

Directivas persistentes vs. temporales

ConfiguraciónDescripciónUso
Persistente (predeterminado)La directiva permanece en el prompt del sistema hasta que se elimina explícitamente con "Stop Telling AI"Esta receta usa esto — el modo permanece activo hasta que el jugador cambie de nuevo
Temporal (establecer duración de turnos)La directiva expira automáticamente tras el número de turnos especificadoBueno para efectos puntuales, por ejemplo, "Durante los próximos 3 turnos, el personaje está borracho y arrastra las palabras"

Ejemplo: Si estableces la duración de turnos a 3 en la acción "Tell AI", la directiva desaparece automáticamente al final del 3er turno tras la inyección — no se necesita eliminación manual.


Paso 4: Añade botones de cambio de modo al Root Component

Muestra tres botones de modo debajo del último mensaje del chat. El botón del modo actualmente activo está resaltado.

Editor → sección Custom UI → abre index.tsx → pega lo siguiente (reemplaza el predeterminado return <Chat />):

tsx
export default function MyWorld() {
  const api = useYumina();

  // ---- Lee el modo actual ----
  const currentMode = String(api.variables.current_mode || "normal");

  // ---- Configuraciones de los tres modos ----
  const modes = [
    {
      id: "normal",
      label: "Normal",
      actionId: "mode-normal",
      color: "#94a3b8",
      activeColor: "#e2e8f0",
      activeBg: "rgba(148,163,184,0.2)",
      border: "#475569",
      activeBorder: "#94a3b8",
    },
    {
      id: "comedy",
      label: "Comedy",
      actionId: "mode-comedy",
      color: "#fbbf24",
      activeColor: "#fef3c7",
      activeBg: "rgba(251,191,36,0.2)",
      border: "#a16207",
      activeBorder: "#fbbf24",
    },
    {
      id: "horror",
      label: "Horror",
      actionId: "mode-horror",
      color: "#f87171",
      activeColor: "#fecaca",
      activeBg: "rgba(248,113,113,0.2)",
      border: "#991b1b",
      activeBorder: "#f87171",
    },
  ];

  // ---- Lista de mensajes, usada para encontrar el último ----
  const msgs = api.messages || [];

  return (
    <Chat renderBubble={(msg) => {
      const isLastMsg = msg.messageIndex === msgs.length - 1;
      return (
    <div>
      {/* Renderiza el texto del mensaje normalmente (la plataforma ya produjo HTML — solo usa contentHtml) */}
      <div
        style={{ color: "#e2e8f0", lineHeight: 1.7 }}
        dangerouslySetInnerHTML={{ __html: msg.contentHtml }}
      />

      {/* Botones de cambio de modo — solo en el último mensaje */}
      {isLastMsg && (
        <div style={{
          display: "flex",
          gap: "8px",
          marginTop: "16px",
          flexWrap: "wrap",
        }}>
          {modes.map((mode) => {
            const isActive = currentMode === mode.id;
            return (
              <button
                key={mode.id}
                onClick={() => {
                  if (!isActive) {
                    api.executeAction(mode.actionId);
                  }
                }}
                style={{
                  padding: "8px 16px",
                  background: isActive ? mode.activeBg : "transparent",
                  border: `2px solid ${isActive ? mode.activeBorder : mode.border}`,
                  borderRadius: "8px",
                  color: isActive ? mode.activeColor : mode.color,
                  fontSize: "13px",
                  fontWeight: isActive ? "700" : "500",
                  cursor: isActive ? "default" : "pointer",
                  opacity: isActive ? 1 : 0.7,
                  transition: "all 0.2s ease",
                }}
              >
                {isActive ? "● " : ""}{mode.label}
              </button>
            );
          })}
        </div>
      )}
    </div>
      );
    }} />
  );
}

Desglose línea por línea:

  • api.variables.current_mode — lee el valor de la variable del modo actual
  • modes — un array que define el ID de cada modo, etiqueta de visualización, action ID del comportamiento correspondiente y configuraciones de color
  • isActive — comprueba si el modo actual coincide con el modo de este botón. Si coincide, el botón se resalta; de lo contrario, queda en gris y semitransparente
  • api.executeAction(mode.actionId) — dispara el comportamiento que creamos en el Paso 2. Nota que solo se dispara cuando !isActive — si ya estás en este modo, hacer clic no hace nada
  • "● " — el botón activo obtiene un pequeño prefijo de punto como indicador visual
  • transition: "all 0.2s ease" — animación suave cuando cambia el estado del botón

¿No quieres escribir código tú mismo? Usa Studio AI

Barra superior del editor → haz clic en "Enter Studio" → panel AI Assistant → describe en lenguaje natural lo que quieres, y la IA generará el código por ti.


Paso 5: Guarda y prueba

  1. Haz clic en Save en la parte superior del editor
  2. Haz clic en Start Game o vuelve a la página de inicio e inicia una nueva sesión
  3. Chatea normalmente con la IA durante algunos turnos — estás en modo Normal
  4. Haz clic en el botón Comedy — el botón se resalta en dorado, una notificación dice "Switched to Comedy Mode"
  5. Envía un mensaje — la respuesta de la IA debería volverse humorística, exagerada, y podría romper la cuarta pared
  6. Haz clic en el botón Horror — el botón se vuelve rojo resaltado
  7. Envía otro mensaje — la respuesta de la IA se vuelve oscura, tensa y llena de pistas inquietantes
  8. Haz clic en el botón Normal — vuelve al estilo predeterminado
  9. Envía un mensaje más — confirma que la IA ha vuelto a la narración normal

Si algo sale mal:

SíntomaCausa probableSolución
No puedo ver los botones de modoEl código del Root Component no se guardó o tiene un error de sintaxisComprueba el estado de compilación en la parte inferior del panel Custom UI — debería mostrar "OK" verde
Hacer clic en un botón no hace nadaEl action ID del comportamiento no coincide con el códigoConfirma que los action IDs del comportamiento son mode-comedy, mode-horror, mode-normal, coincidiendo con los parámetros executeAction() en el código
El estado del botón no cambiaLa variable no se está actualizando por el comportamientoComprueba que la acción "Modify Variable" de cada comportamiento establezca correctamente current_mode
El estilo de la IA no cambia tras cambiarEl contenido de la directiva está vacío o la posición es incorrectaComprueba que la acción "Tell AI" tenga el contenido de la directiva rellenado, y la posición esté establecida en "After Character"
El estilo persiste tras volver a NormalEl ID de la directiva "Stop Telling AI" no coincideConfirma que los tres comportamientos usan el mismo ID de directiva: personality-override

Uso avanzado

Añadir más modos

¿Quieres añadir un "Modo Poético"? Solo:

  1. Añade una entrada al array modes (ID, etiqueta, colores)
  2. Crea un nuevo comportamiento con action ID mode-poetic, mismo patrón de acción que comedia/terror (eliminar directiva antigua → inyectar nueva directiva → actualizar variable → notificar)
  3. Hecho. El botón aparece automáticamente en el Root Component

"Estallidos de personalidad" temporales con directivas limitadas por turnos

Digamos que quieres un "Botón Borracho" — haz clic y la IA habla en estupor borracho durante 3 turnos, luego revierte automáticamente:

En la acción "Tell AI", establece la duración de turnos a 3. La directiva expira automáticamente tras 3 turnos — no es necesario que el jugador haga clic de nuevo para cancelar.

Cambio de idioma

El mismo patrón funciona para cambiar el idioma de respuesta de la IA. Cambia el contenido de la directiva a "From now on reply entirely in English" o "From now on reply in Japanese" y tienes un cambiador de idioma.


Referencia rápida

Qué quieresCómo hacerlo
Modificar dinámicamente el prompt del sistema de la IAUsa "Tell AI" (inject-directive) en una acción de comportamiento — rellena ID de directiva, contenido y posición
Eliminar una directiva previamente inyectadaUsa "Stop Telling AI" (remove-directive) — rellena el ID de la directiva a eliminar
Hacer expirar automáticamente una directiva tras N turnosEstablece la duración de turnos en "Tell AI"
Mantener una directiva permanentemente (hasta eliminación manual)No establezcas una duración de turnos en "Tell AI" (comportamiento predeterminado)
Colocar una directiva de estilo después de la definición del personajeEstablece la posición a "After Character" (after_char)
Poner una sobrescritura de regla urgente arribaEstablece la posición a "Top" (top)
Poner un recordatorio de última hora al finalEstablece la posición a "Bottom" (bottom)
Eliminar directiva antigua antes de cambiarUsa el mismo ID de directiva — "Stop Telling AI" primero, luego "Tell AI"
Resaltar el botón activoLee la variable dentro del Root Component y usa estilos condicionales (isActive) para controlar el resaltado

Pruébalo tú mismo — mundo demo importable

Descarga este JSON e impórtalo como un nuevo mundo para ver todo en acción:

recipe-11-demo.json

Cómo importar:

  1. Ve a Yumina → My WorldsCreate New World
  2. En el editor, haz clic en More ActionsImport Package
  3. Selecciona el archivo .json descargado
  4. Se crea un nuevo mundo con todas las variables, comportamientos y el Root Component preconfigurados
  5. Inicia una nueva sesión y pruébalo

Qué incluye:

  • 1 variable (current_mode siguiendo el modo de personalidad activo)
  • 3 comportamientos (cambiar a Comedia / cambiar a Terror / restaurar Normal)
  • Un Root Component (tres botones de cambio de modo con indicadores de resaltado)

Esta es la Receta #11

Esta receta demuestra el uso central de "Tell AI" / "Stop Telling AI" — inyectar y eliminar dinámicamente directivas en el prompt del sistema. El mismo patrón se puede usar para cambio de idioma, ajuste de dificultad, alternancia de perspectiva narrativa (primera persona / tercera persona), o incluso "deriva gradual de personalidad de IA" (inyectando automáticamente directivas de intensidad variable cada pocos turnos).