Qué es RAG
RAG (Retrieval-Augmented Generation) es una técnica que extiende la capacidad de un modelo de lenguaje dándole acceso a información externa en el momento de generar una respuesta. En lugar de depender exclusivamente de lo aprendido durante el entrenamiento, el sistema consulta una base de datos antes de responder e inyecta el contexto recuperado junto con la consulta del usuario. El resultado: el modelo puede responder con información específica, actualizada o privada que nunca formó parte de sus datos de entrenamiento.
Las aplicaciones más conocidas son los asistentes virtuales de soporte que conocen el historial de cada cliente, los chatbots que acceden a catálogos actualizados en tiempo real o los tutores que recuerdan qué conceptos ya explicaron. Todos comparten la misma estructura base: recuperar contexto relevante antes de responder.
Cómo funciona RAG: embeddings, vectores y recuperación
El proceso tiene tres pasos. Primero, cada fragmento de información que se quiere almacenar —un párrafo, una conversación, un documento— se convierte en un vector numérico mediante un modelo de embeddings. Ese vector captura el significado semántico del texto: frases con significado similar producen vectores cercanos en el espacio multidimensional.
Segundo, cuando llega una consulta, el sistema genera el vector de esa consulta usando el mismo modelo. Tercero, busca en la base de datos vectorial qué vectores almacenados son más cercanos al de la consulta (similitud coseno, por lo general). Los fragmentos recuperados se inyectan en el contexto del LLM junto con la pregunta original. El modelo responde con acceso a ese contexto adicional.
La base de datos vectorial no guarda texto plano. Guarda representaciones numéricas de significado y las busca por proximidad geométrica. Eso la diferencia de una búsqueda por texto convencional: encuentra lo semánticamente relacionado aunque no comparta palabras exactas con la consulta.
Un asistente de atención al cliente que conoce el historial de tickets de cada usuario es el ejemplo más directo de RAG en producción. Cada ticket es un fragmento vectorizado. Cuando el usuario escribe, el sistema recupera los tickets más relevantes y el LLM responde con ese contexto disponible.
RAG fuera del asistente: el experimento de 2023
En 2023, un equipo de investigadores publicó un paper sobre agentes generativos simulando una comunidad virtual. El experimento situaba a 25 personajes controlados por LLM en un entorno tipo The Sims y los dejaba interactuar de forma autónoma. Los agentes formaban vínculos, organizaban eventos sociales, propagaban información entre ellos y reaccionaban a lo que sabían de sus vecinos, todo sin un guion predefinido.
Generative agents wake up, cook breakfast, and head to work; artists paint, while authors write; they form opinions, notice each other, and initiate conversations; they remember and reflect on days past as they plan the next day. To enable generative agents, we describe an architecture that extends a large language model to store a complete record of the agent’s experiences using natural language, synthesize those memories over time into higher-level reflections, and retrieve them dynamically to plan behavior. We instantiate generative agents to populate an interactive sandbox environment inspired by The Sims, where end users can interact with a small town of twenty five agents using natural language.
Lo que hacía coherente el comportamiento era una forma temprana de memoria: los agentes guardaban resúmenes de sus experiencias y los recuperaban cuando eran relevantes. El paralelismo con RAG era directo. En 2023, sin embargo, las bases de datos vectoriales no eran tan accesibles ni los pipelines de RAG tan maduros como ahora. El ecosistema actual —Qdrant, Weaviate, modelos de embeddings baratos por API, LLMs locales capaces de correr en hardware de consumo— abre ese mismo tipo de experimento a cualquier developer con recursos modestos.
IA-Ville parte de esa pregunta: si se construye RAG real dentro de un videojuego y se deja que los personajes lo usen para recordar, relacionarse y tomar decisiones, ¿qué tipo de comportamiento emerge?
IA-Ville: un pueblo de diez NPCs con memoria real
IA-Ville es un simulador social en pixel art construido sobre Godot 4 con lógica en C#. El juego sitúa a diez personajes autónomos en un pueblo donde el entorno físico es estático pero el mundo social es dinámico. Los NPCs tienen memoria vectorial, personalidad configurable, relaciones que evolucionan con cada interacción y un LLM externo que genera su diálogo y comportamiento en tiempo real.
El jugador no controla a ningún personaje. Interactúa con el sistema: habla con los NPCs, planta rumores, observa cómo las relaciones cambian como consecuencia de sus acciones y de las de los propios personajes entre sí. El objetivo no es ganar, sino orquestar circunstancias sociales.
La arquitectura conecta cinco sistemas centrales: el LLM (que genera el texto de cada respuesta), la memoria vectorial (RAG, que provee contexto pasado), el grafo de relaciones (que define cómo cada par de personajes se lleva), el sistema de rumores (que propaga información de forma orgánica) y el scheduler de simulación (que decide cuándo y con quién interactúan los NPCs de forma autónoma).
Personalidad como configuración: los valores que definen la reacción
Cada NPC se define mediante un archivo JSON que describe su identidad, su historia, su propósito actual y un conjunto de valores escalares entre 0 y 1: felicidad, paz mental, odio, venganza, carisma, curiosidad, sociabilidad, honestidad, desconfianza, entre otros.
Esos valores no son decorativos. El sistema los usa para calcular probabilidades de comportamiento. Un NPC con curiosidad alta tiene más probabilidades de ir a buscar al jugador por iniciativa propia. Uno con sociabilidad alta genera conversaciones con otros NPCs con más frecuencia. Uno con honestidad baja tiene más probabilidades de compartir rumores, incluyendo los que sabe que son falsos o no verificados.
Los valores son mutables durante la partida. Una conversación conflictiva puede reducir la paz mental de un personaje. Un acto de ayuda puede subir su felicidad. La personalidad inicial es el punto de partida; la acumulación de experiencias la va modificando. Sin esta capa, todos los NPCs reaccionarían igual ante el mismo estímulo. La configuración por valores es lo que hace que sembrar un rumor sobre un personaje desconfiado y vengativo tenga un efecto radicalmente distinto al de sembrarlo sobre uno con alta honestidad y baja tensión acumulada.
La memoria vectorial que hace coherente el comportamiento
Sin memoria, cada conversación empieza desde cero. El NPC que recibió un insulto ayer responde hoy como si nada hubiera pasado. El jugador que se presentó con su nombre no existe en el contexto de la siguiente frase. El comportamiento resultante es superficialmente convincente pero incoherente en el tiempo.
Para entender cómo funciona la memoria vectorial, es útil pensar en cómo busca información una persona en una página web. Se escribe una palabra exacta y el motor devuelve coincidencias: resultados que contienen ese término de forma literal. Si se cambia una sola palabra, los resultados cambian. La búsqueda es rígida porque opera sobre texto exacto.
Una base de datos vectorial funciona de forma distinta. No busca palabras exactas sino similitud de significado. Se puede preguntar por “pelea con el jugador” y recuperar un recuerdo etiquetado como “discusión tensa en la plaza” aunque no comparta ninguna palabra con la consulta. Busca por proximidad en un espacio de significados, no por coincidencia literal.
Esa diferencia importa porque es exactamente como funciona la memoria humana. Los seres humanos no almacenan transcripciones. Abstraen el mundo a través de los cinco sentidos: lo que ven, oyen, sienten, huelen y tocan entra al cerebro y se comprime en representaciones. Un recuerdo no es una grabación; es una síntesis cargada de emoción, contexto y relevancia. Cuando algo en el presente activa un recuerdo, no lo hace por coincidencia exacta de palabras sino por similitud de patrón: un olor, un tono de voz, una situación que se parece a algo vivido.
La construcción del sistema de memoria de IA-Ville sigue esa misma lógica porque el objetivo del juego es replicar ese mecanismo, no simularlo superficialmente. Cada interacción significativa —una conversación, un rumor recibido, un evento observado— se convierte en un vector de embedding y se almacena en un almacén por NPC. Antes de generar cada respuesta, el sistema busca en ese almacén las memorias más relevantes al mensaje actual combinando similitud coseno, coincidencia de palabras clave, coincidencia de etiquetas semánticas e importancia asignada a cada memoria. Las memorias recuperadas se inyectan en el prompt del LLM junto con la personalidad, el estado emocional actual y los rumores conocidos.
Cada NPC mantiene hasta 100 memorias. Cuando el límite se supera, se descartan las de menor importancia y más antiguas. Los eventos más significativos y más recientes son los que más pesan en el comportamiento presente. Igual que en las personas.
Relaciones, rumores y socialización autónoma
El grafo de relaciones almacena la conexión entre cada par de entidades en cinco dimensiones independientes: confianza, afinidad, respeto, familiaridad y tensión. No es un número único de “relación buena o mala”. Un NPC puede tener alta afinidad y baja confianza con otro, lo que produce un tipo de vínculo reconocible: se lleva bien con alguien a quien no termina de creerle. Estas dimensiones cambian con cada interacción según el contenido del intercambio.
Los rumores viajan por el sistema de forma orgánica. Cuando dos NPCs se encuentran, existe una probabilidad de que uno comparta información sobre un tercero. Cada vez que un rumor cambia de mano pierde un 20% de credibilidad. El NPC receptor lo almacena en su memoria y puede usarlo en futuras conversaciones. Un rumor negativo sobre el jugador puede deteriorar su relación con personajes que nunca lo han visto directamente.
La socialización autónoma la gestiona un scheduler que evalúa periódicamente, para cada NPC libre, la probabilidad de que busque a otro para conversar. El tema de esa conversación lo genera el LLM en función de la relación entre los dos NPCs, los recuerdos que comparten, los rumores que circulan y la hora del día dentro del juego. Los dos personajes generan un diálogo de hasta seis turnos mientras el jugador puede observarlo desde fuera o acercarse a unirse.
El juego no incluye un modelo de lenguaje. Está diseñado para conectarse a cualquier proveedor compatible con la API de OpenAI: un modelo local corriendo en LM Studio o un proveedor remoto como OpenRouter. Esto mantiene la lógica de inferencia bajo el control del usuario y permite correr el juego sin costos de API si se tiene el hardware suficiente.
Los retos del sistema
Construir un sistema así tiene fricciones concretas. No todas son de arquitectura; varias son de cómo el LLM interpreta lo que se le da.
Que la IA entienda su rol y sus herramientas. El modelo de lenguaje no sabe que existe un mapa, que hay un sistema de pathfinding A* que mueve al personaje, que tiene una base de datos vectorial con sus recuerdos o que sus conversaciones alimentan un grafo de relaciones. Todo eso hay que declarárselo.
Existe un protocolo llamado MCP (Model Context Protocol), desarrollado por Anthropic, que formaliza exactamente este problema en otros contextos: cómo decirle a un LLM qué herramientas tiene disponibles, qué puede invocar y bajo qué condiciones. Un servidor MCP expone capacidades al modelo —leer archivos, ejecutar búsquedas, consultar APIs— y el modelo aprende a usarlas porque el protocolo define su forma, sus parámetros y su propósito de forma estructurada.
En IA-Ville no se usa MCP directamente, pero el problema es el mismo. El prompt de sistema tiene que funcionar como ese contrato: describir al NPC qué herramientas conforman su existencia en el juego. No como un manual técnico, sino como parte de su identidad. El pathfinding A* no es “un algoritmo de navegación”; es la razón por la que el personaje puede ir a buscar a alguien cuando decide hacerlo. La base de datos vectorial no es “un almacén de embeddings”; es su memoria. El árbol de diálogo no es “un sistema de estados”; es la estructura dentro de la que tiene conversaciones. Si el prompt no traduce esos sistemas a términos que el modelo pueda asociar con comportamiento natural, el LLM genera respuestas que ignoran el entorno o contradicen lo que los sistemas ya ejecutaron.
Las hojas de personalidad: cuántas emociones son demasiadas. Es tentador darle a un personaje treinta emociones y sentimientos. El problema es que con treinta valores en el prompt, el LLM pierde cohesión: no sabe cuál priorizar, mezcla señales contradictorias y produce respuestas que suenan genéricas en lugar de específicas. La práctica va mostrando que menos valores con más peso producen personajes más consistentes. No es necesario modelar todas las emociones posibles, sino las que realmente pueden jugar un papel en la dinámica social del juego: las que generan conflicto, las que generan atracción, las que predisponen a guardar rencor o a perdonar. El resto es ruido que el modelo no sabe cómo resolver con coherencia.
El grafo de relaciones y las puntuaciones de convivencia. Abstraer el mundo social en números tiene un costo: hay que decidir qué nivel de detalle inyectar al prompt sin que el contexto se vuelva inmanejable. Si se incluyen todas las dimensiones de todas las relaciones de todos los vecinos, el prompt crece de forma desproporcionada y el gasto en tokens se dispara. La solución es filtrar: el personaje solo recibe información sobre sus relaciones más relevantes al contexto actual, no una descarga completa del grafo. Definir ese filtro es una decisión de diseño que afecta directamente cuánto entiende el modelo de su situación social y cuánto cuesta cada respuesta.
Los bugs que genera el LLM. Cuando el modelo se confunde, los errores no son errores de código sino errores de interpretación. Un NPC puede responder como si fuera el jugador, mezclar el nombre de otro personaje con el de quien habla, ignorar un recuerdo que estaba en el contexto o contradecir su personalidad sin razón aparente. Estos bugs son difíciles de reproducir porque dependen del prompt exacto, del historial acumulado y del modelo que se esté usando. No se corrigen en el código; se corrigen ajustando cómo se construye el prompt, en qué orden llega la información y qué instrucciones se añaden para delimitar el rol del personaje.
El árbol de recuerdos: qué preservar y qué descartar. Con un límite de 100 memorias por NPC, el sistema necesita decidir cuáles conservar cuando se supera ese tope. La métrica actual combina importancia asignada y antigüedad, pero definir importancia no es trivial. Un recuerdo de baja intensidad emocional puede ser crítico para que el personaje mantenga coherencia en una relación a largo plazo. Un recuerdo muy intenso pero puntual puede perder relevancia rápido. Encontrar ese equilibrio es un trabajo continuo: no hay una fórmula universal porque depende de qué tipo de narrativa emerge en cada partida.
Cómo la IA entiende su propia personalidad. El desafío más difícil de los anteriores. Un personaje con alta desconfianza debería responder con recelo incluso cuando el jugador es amable. Uno con alta curiosidad debería hacer preguntas, explorar temas, salirse del hilo principal. Pero el LLM, si no se le instruye con precisión, tiende a comportarse de forma cordial y cooperativa por defecto, que es exactamente lo opuesto a lo que un personaje complejo requiere. Hacer que la personalidad se exprese de forma consistente en el diálogo, sin que suene forzada ni generada, es el problema de prompting más fino del sistema.
Lo que el sistema modela del comportamiento humano
La combinación de personalidad configurable, memoria vectorial, grafo de relaciones multidimensional y propagación de rumores con degradación replica los mecanismos básicos por los que la información y la percepción operan en comunidades reales. La memoria condiciona la reacción: lo que un personaje vivió ayer afecta cómo responde hoy. Las relaciones modulan el tono: no se habla igual con alguien de confianza que con un conocido con tensión acumulada. La información se degrada al pasar de boca en boca: lo que llegó como hecho puede convertirse en suposición. La personalidad determina la probabilidad de acción: no todos reaccionan igual al mismo estímulo.
Esto abre experimentos posibles dentro del juego. Configurar un NPC con venganza alta y sembrar las condiciones para que perciba una traición. Observar si la información negativa sobre el jugador se propaga de forma orgánica sin que este intervenga más. Medir cuántas interacciones positivas se necesitan para revertir una relación deteriorada. Son experimentos pequeños sobre dinámica social en un entorno controlado, no sobre personas reales, pero el modelo subyacente está informado por los mismos principios que estudia la psicología social.
El juego no pretende ser una simulación científica. Es una experiencia: el comportamiento emergente es el contenido. Hay un componente de logros y objetivos de orquestación para incentivar la exploración, pero el núcleo es observar qué produce cada acción en un sistema con memoria y relaciones reales.
Estado del proyecto
IA-Ville está en desarrollo activo. Los sistemas descritos en este artículo operan: la memoria vectorial, el grafo de relaciones, la propagación de rumores, la socialización autónoma entre NPCs y la búsqueda del jugador por iniciativa propia de los personajes. El prototipo funciona de extremo a extremo.
El juego se publicará para descarga próximamente. La primera versión pública no es un producto terminado sino un laboratorio jugable: un entorno donde se puede observar o manipular la dinámica social de diez personajes con memoria y personalidad reales. El desarrollo continuará orientado por conceptos de psicología social y comportamiento de grupos, ajustando los parámetros del sistema conforme avance el trabajo.
El campo que hace posible este proyecto sigue creciendo. Lo que en 2023 era un experimento académico con infraestructura costosa es hoy replicable con un equipo pequeño, modelos locales y bases de datos vectoriales de código abierto. IA-Ville es un experimento más en esa dirección, con la diferencia de que los resultados son jugables.