v
Skip to content

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 comedia

Cada 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.

CampoValor
NombreMode
TipoTexto
Valor inicialnormal

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:

  1. Cambiar una variable: Mode, Poner en, normal / comedy / horror
  2. 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.

  1. Habla un par de turnos en modo Normal
  2. Pulsa Comedia. Sale el aviso y Mode pasa a comedy
  3. Envía un mensaje. La respuesta se vuelve graciosa y puede que rompa la cuarta pared
  4. Pulsa Terror y envía otro mensaje. La respuesta se vuelve oscura y tensa
  5. 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íntomaCausa probableSolución
Pulsar un botón no hace nadaEl botón no tiene un paso Cambiar una variableSelecciona el botón y revisa Al pulsar, en orden
Mode cambia pero el estilo noLa condición de la entrada no coincide con el valorEl botón pone comedy; la condición tiene que buscar exactamente comedy
A la IA le llegan los dos estilosUna de las entradas está en el bloque que se envía siempreRevisa Cuándo lo ve la IA en las dos entradas
El estilo se diluye a los pocos turnosEl texto del estilo queda lejos del final del promptPon 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:

tsx
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 nombre
  • api.setVariable("Mode", mode.id) la escribe. Las entradas condicionales recogen el valor nuevo en la siguiente respuesta de la IA
  • api.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 quieresCómo hacerlo
Cambiar cómo escribe la IA mientras un modo esté puestoUna entrada de lore con una condición sobre una variable (lore condicional)
Cambiar de modo con un botónBotón de la interfaz del jugador: Cambiar una variable
Que la IA no pueda cambiar el modoAcceso de la IA: Solo lectura para la IA
Poner el texto del estilo donde más atiende la IAEn la entrada, Inyectar en: Al final
Una indicación solo para la siguiente respuestaEfecto de comportamiento: Decirle a la IA
Resaltar el modo activoDos versiones del botón, cada una con Cuándo mostrar → Cuando una variable cumple
Cambiar desde el código de interfazapi.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.