Cambio dinámico de personalidad de IA
Unos cuantos botones que cambian cómo narra la IA: normal, comedia, terror. El jugador pulsa uno y la siguiente respuesta de la IA sale en ese estilo. El texto de cada estilo vive en entradas de lore que solo le llegan a la IA cuando una variable lo dice, así que no hace falta código.
Lo que vas a construir
- Tres modos: Normal, Comedia y Terror
- Se cambia con un toque: la siguiente respuesta usa el estilo nuevo y la conversación sigue
- Se ve el modo actual: el jugador sabe qué modo está puesto
- Volver atrás no deja restos: el estilo anterior deja de llegarle a la IA en cuanto cambia el modo
Cómo funciona
El jugador pulsa "Comedia"
→ El botón pone la variable Mode en "comedy"
→ La entrada de lore "Estilo comedia" solo le llega a la IA mientras Mode = comedy, así que entra
→ La entrada de lore "Estilo terror" solo llega mientras Mode = horror, así que queda fuera
→ La siguiente respuesta de la IA sale en estilo comediaCada estilo es una entrada de lore normal con una condición. No hay que apagar nada a mano, porque solo una de las condiciones puede cumplirse a la vez.
Paso a paso
Paso 1: Crea la variable
En la fila Puedes añadir, abajo en la carta, pulsa + Variable.
| Campo | Valor |
|---|---|
| Nombre | Mode |
| Tipo | Texto |
| Valor inicial | normal |
Abre Qué hace la IA con ella y pon Acceso de la IA en Solo lectura para la IA. El modo lo cambian los botones del jugador; la IA solo tiene que seguirlo. Como el motor ya lo impone, no hace falta poner «no toques esto» en las Reglas de comportamiento.
Para mostrar el modo en el chat, pulsa Mostrar en la pantalla del jugador.
Paso 2: Escribe una entrada de lore por estilo
Añade dos entradas de lore (el + de arriba a la derecha de Personaje y mundo, o Añadir en la barra superior).
Entrada: Estilo comedia
[Estilo de narración: Comedia]
Narra todo en un tono humorístico y cómico. Puedes:
- Usar metáforas exageradas y comparaciones absurdas
- Romper de vez en cuando la cuarta pared con un aparte al lector
- Dar a los PNJ frases dichas en el peor momento
- Describir escenas serias con un tono ligero, por contraste
Haz que la historia siga avanzando. El humor va dentro de la narración; no la sustituye.Entrada: Estilo terror
[Estilo de narración: Terror]
Narra todo con un ambiente oscuro e inquietante. Debes:
- Ralentizar el ritmo en las descripciones y detenerte en sonidos, olores y texturas
- Insinuar que algo observa desde las sombras, sin mostrarlo nunca
- Hacer que el entorno se sienta raro: puertas que se cierran solas, sombras que se mueven hacia donde no deben, un reflejo que va medio segundo tarde
- Dar a los PNJ frases un poco fuera de lugar, como si supieran algo que no deberían
- A veces, describir el cuerpo del personaje en segunda persona: se te eriza la nuca, el corazón se te acelera
Haz que la tensión vaya creciendo, pero no metas un monstruo en cada párrafo. Lo peor, que quede sin saberse.El modo normal no necesita entrada. Cuando no entra ninguna de las dos de estilo, la IA escribe como ya le dicen tus entradas de personaje y mundo.
Ponle una condición a cada entrada
Arrastra la variable Mode sobre la entrada «Estilo comedia». Aparece una línea entre las dos; haz clic en ella y pon la condición Mode es comedy. Haz lo mismo con «Estilo terror» y horror.
Las entradas pasan al bloque de lore condicional: solo se envían mientras se cumple su condición. (También puedes configurarlo abriendo la entrada y pulsando Cuándo lo ve la IA, abajo del todo.)
Dónde va el texto del estilo
Las entradas se colocan en el prompt de la IA junto con el resto de tu lore. Si la IA vuelve una y otra vez a su voz de antes, abre la entrada y pon Inyectar en en Al final: ese texto va después de toda la conversación, justo antes de que responda la IA, que es donde más atención presta.
Paso 3: Añade los botones
Pulsa Interfaz en el centro de la barra superior. En la página de la conversación, añade tres partes Botón (Añadir una parte → Botón), con los textos Normal, Comedia y Terror. En Al pulsar, en orden, dale a cada uno:
- Cambiar una variable: Mode, Poner en,
normal/comedy/horror - Mostrar un aviso:
Modo Comedia activado(o el modo que toque)
Para resaltar el que está activo, duplica un botón, dale a la copia otro aspecto y usa Cuándo mostrar → Cuando una variable cumple para que solo se vea mientras Mode tiene ese valor. Pon encima la versión normal con la condición contraria (Mode no es ese valor).
Desactiva Editar y pulsa los botones. Esta vista previa no llama a la IA, pero puedes ver cómo cambia Mode.
Hacerlo con un comportamiento
Si prefieres tener la lógica del cambio en el lienzo, haz un comportamiento por modo: Cuándo se dispara: El jugador pulsa un botón, Botón mode-comedy; Efectos: Cambiar variable Mode a comedy, Mostrar notificación Modo Comedia activado. Así cada botón solo necesita un paso: Activar un comportamiento. El código de interfaz puede disparar ese mismo comportamiento con api.executeAction("mode-comedy").
Paso 4: Pruébalo
Pulsa Jugar en la barra superior.
- Habla un par de turnos en modo Normal
- Pulsa Comedia. Sale el aviso y Mode pasa a comedy
- Envía un mensaje. La respuesta se vuelve graciosa y puede que rompa la cuarta pared
- Pulsa Terror y envía otro mensaje. La respuesta se vuelve oscura y tensa
- Pulsa Normal y envía uno más. La narración vuelve al estilo propio de tu carta
Este turno, a la derecha de la prueba, enumera las entradas de lore que recibió la IA, así que puedes comprobar que solo entra una de estilo.
Si algo falla:
| Síntoma | Causa probable | Solución |
|---|---|---|
| Pulsar un botón no hace nada | El botón no tiene un paso Cambiar una variable | Selecciona el botón y revisa Al pulsar, en orden |
| Mode cambia pero el estilo no | La condición de la entrada no coincide con el valor | El botón pone comedy; la condición tiene que buscar exactamente comedy |
| A la IA le llegan los dos estilos | Una de las entradas está en el bloque que se envía siempre | Revisa Cuándo lo ve la IA en las dos entradas |
| El estilo se diluye a los pocos turnos | El texto del estilo queda lejos del final del prompt | Pon Inyectar en en Al final |
Ruta con código propio: botones de modo debajo del último mensaje
Si escribes tu propia interfaz, dibuja tú los botones y cambia la misma variable. Las entradas de lore del Paso 2 no cambian.
Paneles → Código de frontend → abre index.tsx y sustituye el return <Chat /> que viene por defecto:
export default function MyWorld() {
const api = useYumina();
const currentMode = String(api.variables["Mode"] || "normal");
const msgs = api.messages || [];
const modes = [
{ id: "normal", label: "Normal", color: "#94a3b8", activeColor: "#e2e8f0",
activeBg: "rgba(148,163,184,0.2)", border: "#475569", activeBorder: "#94a3b8" },
{ id: "comedy", label: "Comedy", color: "#fbbf24", activeColor: "#fef3c7",
activeBg: "rgba(251,191,36,0.2)", border: "#a16207", activeBorder: "#fbbf24" },
{ id: "horror", label: "Horror", color: "#f87171", activeColor: "#fecaca",
activeBg: "rgba(248,113,113,0.2)", border: "#991b1b", activeBorder: "#f87171" },
];
const switchTo = (mode) => {
api.setVariable("Mode", mode.id);
api.showToast("Switched to " + mode.label + " mode", "info");
};
return (
<Chat renderBubble={(msg) => {
const isLastMsg = msg.messageIndex === msgs.length - 1;
return (
<div>
<div
style={{ color: "#e2e8f0", lineHeight: 1.7 }}
dangerouslySetInnerHTML={{ __html: msg.contentHtml }}
/>
{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) switchTo(mode); }}
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>
);
}} />
);
}Qué hace el código:
api.variables["Mode"]lee la variable por su nombreapi.setVariable("Mode", mode.id)la escribe. Las entradas condicionales recogen el valor nuevo en la siguiente respuesta de la IAapi.showToast(text, "info")muestra un aviso ("success","error"e"info"son los tres tipos)- El botón activo lleva un punto y va resaltado, y volver a pulsarlo no hace nada
- Para ejecutar un comportamiento en lugar de cambiar la variable directamente, llama a
api.executeAction("mode-comedy")
El estado que aparece junto al archivo en Paneles → Código de frontend debería ser un OK verde.
¿No quieres escribir el código tú?
Pulsa Asistente IA arriba a la derecha del lienzo y describe los botones que quieres.
Más ideas
Más modos
Añade otra entrada de lore (por ejemplo «Estilo poético») con la condición Mode es poetic, y otro botón que ponga Mode en poetic.
Un arrebato de un solo turno
Para algo que solo debe durar una respuesta, como «al personaje le da hipo durante esta respuesta», usa un comportamiento con el efecto Decirle a la IA. Le pasa a la IA una frase que el jugador no ve, solo para la siguiente respuesta. Para algo que deba durar unos cuantos turnos, usa una variable de Número como cuenta atrás: un botón la pone en 3, un comportamiento de Cada turno le resta 1, y la condición de la entrada de lore es «Cuenta atrás es mayor que 0».
Cambiar de idioma
Con el mismo montaje se cambia el idioma de las respuestas: una entrada «Responde solo en japonés» con la condición Idioma es ja, y así con cada idioma.
Que la IA cambie su propio modo
Deja Acceso de la IA en La IA puede leer y escribir y explica en las Reglas de comportamiento cuándo debe cambiar el modo («pasa a terror cuando el grupo entre en la cripta»). Así la IA pone Mode ella misma, y las mismas entradas la siguen.
Referencia rápida
| Lo que quieres | Cómo hacerlo |
|---|---|
| Cambiar cómo escribe la IA mientras un modo esté puesto | Una entrada de lore con una condición sobre una variable (lore condicional) |
| Cambiar de modo con un botón | Botón de la interfaz del jugador: Cambiar una variable |
| Que la IA no pueda cambiar el modo | Acceso de la IA: Solo lectura para la IA |
| Poner el texto del estilo donde más atiende la IA | En la entrada, Inyectar en: Al final |
| Una indicación solo para la siguiente respuesta | Efecto de comportamiento: Decirle a la IA |
| Resaltar el modo activo | Dos versiones del botón, cada una con Cuándo mostrar → Cuando una variable cumple |
| Cambiar desde el código de interfaz | api.setVariable("Mode", "comedy") o api.executeAction("mode-comedy") |
Esta es la receta n.º 11
El mismo montaje (una variable, más entradas de lore que solo le llegan a la IA con una condición) sirve también para niveles de dificultad, para narrar en primera o tercera persona, o para un personaje cuyo humor cambia a lo largo de la historia.
