← Diario
Técnica·19 may 2026

¿De qué hablábamos la última vez?

Un cuaderno cerrado y un smartphone con la pantalla apagada uno junto al otro sobre una mesa de madera clara, un marcapáginas de tela asomando del cuaderno, una taza de té y una planta verde, luz suave que entra por una ventana

Hasta el 19 de mayo, el asistente lo retenía todo salvo la conversación en curso. Una pantalla que se apaga, una red que se corta, un desvío por otra aplicación, y los últimos minutos desaparecían: «sí» ya no significaba nada, y «¿de qué hablábamos la última vez?» recibía «no encuentro ninguna conversación reciente». Los recuerdos estaban intactos. Ese día se reparó la memoria corta: una sola conversación por persona que sobrevive a los cortes, los intercambios pasados leídos tal cual y fechados, y un contexto que ya no se vacía cuando una de sus fuentes tose.

Dos memorias, y solo una que aguantaba

Cuando se habla de memoria a propósito de esta aplicación, se piensa en la memoria neuronal: las fichas, los enlaces entre ellas, lo que se retiene durante meses. Es la memoria larga, y el 19 de mayo funcionaba bien. Una semana antes, la búsqueda incluso había aprendido a seguir los enlaces entre los recuerdos en vez de fiarse solo del parecido de las palabras.

Pero existe una segunda memoria, de la que nadie habla porque entre humanos se da por hecha. Es la de los últimos diez minutos. Cuando le dices «sí» a alguien, sabe a qué pregunta. Cuando dices «y él también», sabe de quién se trata. Esa memoria no está guardada en una ficha: vive en el hilo de la conversación, del lado del servidor, en forma de los últimos intercambios que el modelo relee en cada turno.

Y esa memoria corta se perdía. No al cabo de una hora: al cabo de unos segundos, en cuanto se rompía el enlace entre el teléfono y el servidor, por la razón que fuera. El resultado era extraño de vivir. El asistente recordaba el nombre del dentista y la fecha de renovación de un pasaporte, pero no la frase que acababa de pronunciar. Daba la impresión de una persona con memoria enciclopédica y atención fallida, y esa impresión era peor que si la memoria larga hubiera estado vacía, porque contradecía lo que se acababa de oír.

Primera hora de la tarde: un director de orquesta por conexión

El teléfono y el servidor se hablan por un enlace permanente, abierto al arrancar la aplicación. Del lado del servidor, un director de orquesta recibe lo que dice el usuario, hace funcionar el modelo, ejecuta sus herramientas y devuelve la respuesta. Es él quien guarda el historial de la conversación.

El defecto cabía en una línea: ese director se construía para cada enlace. Un enlace, un director, un historial propio. Mientras el enlace vive, todo va bien. Pero un enlace muere mucho más a menudo de lo que uno imagina. La pantalla se apaga en el bolsillo: el sistema corta el enlace para ahorrar batería. Sales de casa: el wifi se suelta, los datos móviles toman el relevo, y el enlace se rehace. Contestas un mensaje en otra aplicación y vuelves: enlace rehecho. Cada vez, la aplicación se reconecta sola, en silencio, sin mostrar nada. Y cada vez, el servidor fabricaba un nuevo director, con un historial vacío, como si acabara de entrar un desconocido.

El modelo recibía entonces la memoria larga, y nada más. Un «sí» lanzado tras una pantalla apagada se convertía en «¿sí a qué?». Una petición formulada en dos tiempos, la primera mitad antes del corte y la segunda después, ya no tenía primera mitad. Y esa misma mañana, el asistente acababa de aprender que se le podía decir quién habla cuando el teléfono se presta a otra persona, sin que cambie el propietario; esa declaración vivía en el mismo historial, y se evaporaba con él, con el riesgo de archivar bajo el nombre equivocado lo que la persona de paso acababa de decir.

La corrección tomó la forma de un traslado. Ya solo hay un director de orquesta para todo el servidor, y es él quien guarda todas las conversaciones en curso, una por persona. Todo lo que dependía del enlace, la pantalla a la que enviar una ficha para mostrarla, la forma de programar un recordatorio para ese teléfono concreto, se le entrega en cada turno en vez de quedar sellado en su construcción. Así, cuando un enlace se rehace, reencuentra la conversación que había dejado: mismo historial, mismo hablante declarado, mismo hilo. La regla es sencilla de enunciar: una reconexión en la media hora siguiente al último intercambio retoma la misma conversación; más allá, se abre una nueva.

Ese traslado imponía otro. Hasta entonces, el cierre del enlace servía de señal de fin: era el momento en que la conversación se resumía y se archivaba en la memoria larga. Si la conversación debe sobrevivir al cierre, esa señal ya no vale nada. El servidor repasa, por tanto, cada cinco minutos, las conversaciones cuyo propietario lleva más de media hora en silencio, las archiva y las retira de su memoria viva. Nada se acumula, y una conversación abandonada a medias acaba igualmente en la base de datos, en vez de perderse en el siguiente reinicio.

Última hora de la tarde: «no encuentro ninguna conversación reciente»

El hilo ya no se rompía. Quedaba una pregunta, hecha ese mismo día en voz alta, que recibía una mala respuesta: «¿de qué hablábamos la última vez?».

El material existía, sin embargo. Cuando una conversación se archiva, se escribe un resumen en la memoria larga, como un recuerdo entre otros. El problema estaba en ese «entre otros». Antes de cada turno, el servidor arma para el modelo un panorama de lo que sabe la memoria: los recuerdos de trabajo, lo mencionado en los últimos días, una muestra del resto. Los resúmenes de conversaciones pasadas se colaban ahí en la lista de hechos, sin etiqueta. El modelo veía «fin de semana en Sicilia, Claire, fechas por confirmar» entre el código del portal y el cumpleaños de Paul, y no tenía forma de saber que esa línea contaba la conversación de hacía doce minutos y no un plan anotado un día cualquiera. A la pregunta «de qué hablábamos», buscaba una conversación, no reconocía ninguna, y respondía que no encontraba ninguna reciente. La respuesta estaba delante de sus ojos, disfrazada de hecho.

La primera corrección dio a esos resúmenes su propia sección, al principio del panorama, con lo que los distingue de un hecho: una fecha relativa, «hace 12 min», y la longitud del intercambio, «4 turnos». Y una consigna, en la misma sección: cuando el usuario pregunte de qué hablábamos, si se acuerda, o diga que ha olvidado lo que decíamos, apoyarse primero en esos resúmenes, antes de cualquier búsqueda en las fichas. Los mismos resúmenes se retiraron de las demás listas, para no aparecer dos veces bajo dos etiquetas.

Tres minutos después: leer la conversación misma

La sección aguantó tres minutos antes de rehacerse, porque descansaba sobre un compromiso que no tenía razón de ser.

El resumen escrito al archivar se pensó para la búsqueda por parecido de sentido: corto, denso, calculado para encontrarse más tarde a partir de una pista. Es un índice, no un acta. Pero las conversaciones mismas se conservan, turno a turno, en una tabla de la base de datos. Para responder a «de qué hablábamos», el índice es un rodeo: la materia está al lado, entera.

El panorama lee ahora, por tanto, esa tabla directamente. Presenta las últimas conversaciones, de la más reciente a la más antigua, cada una con su resumen, su antigüedad y su número de turnos. Y para la más reciente, despliega los últimos intercambios tal como ocurrieron, «Tú: ¿me haces una lista para el fin de semana?», «Yo: listo, lo he apuntado todo», con los fragmentos largos recortados. El modelo ya no tiene que adivinar de qué iba la sesión anterior: la tiene delante, palabra por palabra, y puede responder con su contenido en vez de con una paráfrasis.

Hay una lección de método en esos tres minutos. Cuando el dato existe en bruto, más vale mostrarlo que mostrar lo que se ha derivado de él. El resumen conserva su papel, el de encontrarse por parecido dentro de unas semanas; para la pregunta de hoy, la transcripción es la respuesta correcta.

Primera hora de la noche: una fuente que cae ya no lo vacía todo

El último defecto del día solo se veía de vez en cuando, y eso era lo que lo hacía difícil de atrapar.

El panorama de memoria entregado al modelo se arma a partir de varias fuentes: las conversaciones recientes, los recuerdos de trabajo, lo mencionado en los últimos días, la muestra del resto y las reglas personales. Se consultan en paralelo, para no sumar sus tiempos de espera. Pero se consultaban con una regla de todo o nada: si una sola de las peticiones fallaba, una demora del lado de la base de datos, un rechazo pasajero, el conjunto se descartaba y el modelo recibía un panorama vacío. Respondía entonces, de buena fe, que no se acordaba. No tenía literalmente nada.

La regla pasó a ser «todo lo que responde se conserva». Cada fuente se espera por separado; la que falla se anota en los registros y se sustituye por una lista vacía, las demás pasan. Un contexto amputado de una fuente vale más que un contexto ausente, y con mucho: el modelo que tiene las conversaciones recientes pero no la muestra del resto responde casi como de costumbre; el que no tiene nada responde como un desconocido.

Dos medidas acompañaron este cambio. La primera concierne al propio modelo: ocurría que el servicio remoto devolvía una respuesta vacía en la primera llamada de un turno, una sobrecarga disfrazada de éxito. El usuario oía entonces la frase de socorro, la que anuncia un problema técnico, prevista una semana antes para las averías de verdad. Esa primera llamada ahora se reintenta una vez, tras una breve pausa, antes de renunciar. Una sola vez, y solo la primera: en medio de una cadena de herramientas, repetir una llamada equivaldría a ejecutar dos veces lo ya hecho, crear dos fichas, programar dos recordatorios.

La segunda medida es un rastro. En cada turno, el servidor escribe en sus registros lo que realmente ha entregado al modelo: cuántas conversaciones recientes, cuántos recuerdos de cada nivel, cuántas reglas, y el tamaño del conjunto. Antes, cuando alguien informaba de que «se le ha olvidado», no había forma de saber si el modelo había leído mal una memoria llena o había leído bien una memoria vacía. Son dos defectos sin relación que producen el mismo síntoma, y no se corrige lo que no se puede distinguir.

Lo que enseñó el día

Tres defectos que no tenían nada en común produjeron, durante semanas, una sola y misma queja: «no se acuerda de lo que acabamos de decir». Un historial atado a un enlace frágil. Actas de conversación disfrazadas de hechos. Una memoria que se vaciaba entera por una fuente con retraso. Ninguno de esos defectos tocaba los recuerdos en sí; todos tocaban la forma de entregárselos al modelo en el momento justo.

Eso es lo que hace tan particular a la memoria corta. Un hueco en la memoria larga suele pasar desapercibido: no se nota lo que no se pregunta. Un hueco en la memoria corta se ve al segundo, porque contradice lo que se acaba de vivir. Una persona que olvida una cita de hace tres meses es despistada; una persona que olvida la frase anterior no estaba escuchando. El asistente daba la segunda impresión cuando tenía el primer defecto, y ni siquiera del todo.

Desde el 19 de mayo, una conversación retomada tras una pantalla apagada, un trayecto o un desvío por otra aplicación es la misma conversación. «¿De qué hablábamos la última vez?» recibe la respuesta, con las palabras de la última vez. Y cuando algo falta, se puede saber por qué. La memoria larga hace que se pueda volver dentro de meses; la memoria corta, que se pueda volver dentro de un minuto. Hacían falta las dos para que hablar con la aplicación se pareciera a hablar con alguien.

Leer a continuación
XNeuronal ya está disponible en AndroidUna memoria que deduce está por llegar