Cómo Stage Whisper resuelve el problema del 'PNJ omnisciente': Arquitectura de aislamiento de contexto

Que los PNJs pudieran citar algo que mi personaje dijo tres sesiones atrás fue bastante impresionante de ver. El sistema de memoria estaba funcionando. Los PNJs referenciaban eventos pasados, citaban cosas que dije. PERO, también inició un problema diferente: los PNJs empezaron a volverse omniscientes.

Aquí hay un extracto de una sesión reciente, la parte relevante está resaltada:

"Entonces —dice ella, con su voz proyectándose fácilmente sobre el susurro de las hojas—, ¿cuál es la verdadera razón por la que viniste a buscarme? ¿Curiosidad, o simplemente estás intentando evitar desempacar el resto de ese caótico escritorio tuyo?"

Eso referenciaba algo que pasó en una escena completamente diferente en la que este personaje no estaba. El personaje no debería haber tenido forma de saberlo.

Pequeñas inconsistencias como esta rompen la inmersión. Pero en otros casos, puede romper el juego. Por ejemplo, tengo una campaña donde mi personaje es un vampiro secreto navegando por un mundo de humanos desprevenidos. Los PNJs empezaron a insinuar casualmente que sabían mi secreto, lo que de repente hizo muy difícil pasar el día sin ser sospechoso. O en otros ejemplos, si robé un artefacto durante un atraco, un personaje no relacionado hace comentarios sospechosos.

La IA básicamente decidió usar todos y cada uno de los secretos disponibles en el contexto para efecto dramático, lo que realmente solo debería ocurrir muy ocasionalmente por razones de trama.

Entonces, ¿por qué no puedo simplemente decirle a la IA que no haga esto?

El problema es que estás intentando lograr una negación. "No uses esta información". Esa es una tarea fundamentalmente diferente y mucho más difícil que el caso positivo: usa la información que está ahí. Para entrenar a un modelo para que ignore el contexto relevante, necesitarías miles de ejemplos de situaciones donde la información estaba claramente disponible pero la salida deliberadamente no la usó. Eso es casi la antítesis de para lo que una IA está diseñada. Para la mayoría de las tareas, ignorar contexto útil sería fallar en el trabajo.

Concebiblemente, se podría entrenar un modelo con más ejemplos de no actuar sobre secretos. Pero la narrativa y el roleplay no han sido un gran foco para los creadores de modelos hasta ahora, así que este problema no ha recibido la atención que merece.


Me di cuenta de que tenía que arreglar esto en esa campaña de vampiro secreto. La campaña estaba configurada para que mi personaje pudiera pasar por un humano normal la mayor parte del tiempo, y el objetivo principal era navegar esa tensión sin ser descubierto. Sería un gran momento narrativo cuando cualquier PNJ descubriera el secreto, porque entonces habría que persuadirlo para que guardara silencio.

Lo que descubrí fue que prácticamente todos los antagonistas potenciales lo sabían de alguna manera. Aunque no había revelado nada. Y eso rompía la trama de inmediato. Se sentía como si hubiera un gran cartel sobre mi cabeza anunciando que era un vampiro. Mi personaje estaba constantemente controlando daños, o sintiendo que cada personaje tenía ventaja sobre el mío.

Experimenté con prompts durante mucho tiempo. Finalmente me di cuenta de que tendría que simplemente no incluir la información en el contexto en absoluto.

La solución, entonces, es el aislamiento de contexto. Si la IA no puede evitar usar todo lo que ve, entonces la información genuinamente no debe estar ahí. Esto es alcanzable en Stage Whisper porque cada escena y recuerdo ya está etiquetado con los PNJs que aparecen en ella, así que podemos filtrar fácilmente para incluir solo los personajes que realmente estaban allí.

Pero aquí está el problema. Algunos secretos son grandes motores de la trama. No puedes simplemente eliminarlos por completo, porque la historia aún necesita tenerlos en cuenta. Ya sea un atraco, o un vampiro secreto, esos secretos son centrales para la narrativa, y no sería la misma historia sin ellos.

Así que tuvimos que dividir nuestra generación de texto en dos.

La primera parte la llamo el Director de Historia. Dirige la historia general: la trama, los ritmos narrativos. Tiene todos los secretos, y puede decidir cómo desarrollar mejor la historia dados esos secretos. Entiende el panorama completo, incluyendo las cosas que ningún personaje debería saber todavía.

La segunda parte la llamo el Director de Escena. "Interpreta" la escena que le entrega el Director de Historia. Tiene acceso a todos los recuerdos y personalidades relevantes de los PNJs, así que tiene suficiente información para interpretar a todos los PNJs y proporcionar algo de narración intersticial, pero genuinamente no conoce los secretos.

Alguna información necesita pasar de uno a otro, para que puedan trabajar en la misma historia sin trabajar uno contra el otro.


El Director de Historia produce una sinopsis que le dice al Director de Escena todo lo que necesita saber. Se parece a esto:

<synopsis>
  Elian regresa a la Habitación 314 con Maeve, los familiares sellos de privacidad ofrecen un breve respiro de la atención reunida durante su espectacular exhibición. Sintiendo la necesidad de Maeve de estudiar después de un día inusual, Elian decide dejar su habitación para explorar en solitario
  <npc_list>maeve-corwin</npc_list>
  <location>habitacion-314</location>
  <new_scene/>
</synopsis>

Esto le dice al Director de Escena qué está pasando en la escena, dónde está, quién está en ella y si es una escena nueva. Se asume la presencia del personaje jugador. El Director de Historia también puede opcionalmente emitir diálogo fuera de personaje al jugador, y hacer notas de interpretación detalladas para su propio uso futuro.

Los dos directores no ven el mismo contexto. Aquí está la división:

El Director de Historia ve:

Esto es todo lo que el Director de Historia necesita para tomar decisiones de trama interesantes y coherentes. Son muchos datos, pero la caché KV mantiene los costes manejables.

El Director de Escena ve:

Esta es una vista deliberadamente reducida. El Director de Escena tiene todo lo que necesita para ejecutar la escena, y nada que no debería tener.

Dos hojas de personaje

La distinción entre la hoja de personaje jugador pública y la completa es clave. El Director de Historia necesita conocer los detalles completos y todos los secretos para producir la historia. Pero el Director de Escena no debería conocer esos detalles. Aún necesita saber quién es el personaje jugador físicamente, cómo es, su reputación pública, las cosas que cualquier PNJ captaría razonablemente solo por estar cerca de él. Mantener una hoja pública separada significa que el Director de Escena siempre tiene ese contexto sin necesitar acceso a los secretos.

Filtrando recuerdos por escena

Cada escena está etiquetada con qué PNJs están presentes. Esto significa que sabemos exactamente qué escenas recientes son relevantes para cada PNJ, y las añadimos al contexto del Director de Escena. Se asume que las escenas dentro de la sesión actual son altamente relevantes. Para recuerdos más antiguos, la búsqueda semántica recupera los que podrían importar.

El resultado es un Director de Escena que genuinamente no puede saber cosas que los personajes en la escena no saben. No porque se le dijera que no, sino porque esa información físicamente no está ahí.


He estado dirigiendo una campaña donde mi personaje es una mujer humana que tiene que vestirse como un hombre para asegurar el título de su familia como nobleza menor, debido a las leyes de herencia. Es una campaña de comedia ligera, y presenta algunos escenarios cómicos que surgen de esa confusión de género.

Sin este sistema implementado, generalmente no hay forma de sorprender a los PNJs. Todos se comportan como si sospecharan algo. Quizás no directamente, pero la forma en que te hablan siempre tiene ese deje de saber. Es difícil de describir, pero puedes sentirlo. La tensión dramática de una identidad secreta simplemente no está ahí.

Pero con este sistema implementado, los PNJs lo interpretan completamente en serio. No tienen ni idea. Y las escenas donde ocurre la gran revelación realmente impactan, porque hasta ese punto no hay absolutamente ninguna alusión a ello. La comedia funciona porque el público, los PNJs, genuinamente no lo ven venir.

Hay un caso límite. Como el Director de Escena no conoce el secreto exacto, ocasionalmente produce detalles anatómicamente incorrectos. Esto es difícil de evitar, ya que el Director de Escena trabaja con una hoja de personaje pública que no incluye esos detalles. La solución sería añadir un tercer paso: que el Director de Historia revise la escena generada antes de que se publique, para detectar cualquier discrepancia como esta. Eso añade coste y latencia, así que está en la hoja de ruta pero aún no implementado.

Una cosa que sí me sorprendió: cuando un secreto se revela dentro del juego, se propaga de forma natural. El Director de Escena retiene las escenas generadas previamente, así que una vez que un PNJ aprende algo en una escena, eso se convierte en parte de su contexto para el siguiente turno. Al final de las escenas, esas escenas forman recuerdos para el PNJ. Al final de las sesiones, las hojas de PNJ se actualizan. Ambos procesos significan que el conocimiento individual de un secreto por parte de un PNJ queda registrado, y la historia puede continuar con ese PNJ ahora genuinamente al tanto.


El intercambio

Este enfoque no es gratuito. El coste aumenta, aunque no llega al doble, ya que el contexto del Director de Escena es relativamente ligero. La caché de prompts también ayuda significativamente. A medida que la escena se desarrolla, se añaden nuevos turnos al final del contexto, lo que significa que el 90% del prompt puede venir de la caché en lugar de regenerarse desde cero cada vez.

Actualmente está habilitado para todas las campañas. Los cambios arquitectónicos son lo suficientemente significativos como para que no tenga sentido proporcionar un camino que evite esta configuración. Para la mayoría de las campañas, el intercambio vale la pena, incluso si tu historia no tiene grandes secretos, porque la consistencia de los PNJs importa en cualquier caso.

Lo que esto desbloquea: el Director de Juego

El pipeline de dos etapas demuestra algo útil: dividir tareas entre IAs más especializadas con contextos optimizados da mejores resultados que una IA haciendo todo. Eso está llevando a una tercera etapa natural.

La llamo el Director de Juego. Su trabajo es manejar las mecánicas de TTRPG: tiradas, pruebas de habilidad, seguimiento de estado. Su contexto puede optimizarse de manera diferente a los demás, ya que se preocupa menos por el historial narrativo y más por las reglas y el estado del juego.

Añadir un Director de Juego tiene un beneficio inesperado. Como se ejecuta en cada turno por si el jugador intenta algo que requiera una prueba de habilidad, también puede decidir si la entrada del jugador es una continuación de la última escena o algo nuevo. Si el jugador solo está charlando con un PNJ sin mover la trama, el Director de Juego puede saltarse el Director de Historia por completo y dejar que el Director de Escena continúe la escena por sí mismo. El Director de Escena tiene las hojas de PNJ y puede hacer búsquedas de memoria, así que puede continuar el diálogo así sin el coste adicional de una llamada completa al Director de Historia.

Esta es la dirección hacia la que va la arquitectura: un pipeline de tres etapas que se vuelve progresivamente más especializado, con optimizaciones de ahorro de costes incorporadas en cada capa.


Stage Whisper está diseñado para personas que quieren jugar TTRPGs en solitario con la profundidad y consistencia de una campaña de larga duración. El sistema de memoria, incluyendo esta arquitectura de aislamiento de contexto, es lo que lo hace posible. Empieza o únete a nuestro Discord para ver cómo funciona en la práctica.

Para más sobre el sistema de memoria de Stage Whisper, consulta Parte 1: Consistencia Narrativa y Parte 3: Sueños de PNJs.