Memoria de sesión sin arrastrar el historial entero
La forma obvia de darle memoria a un agente es volver a pegarle la conversación en cada turno. Funciona hasta que deja de hacerlo, y falla el día que menos te conviene. Esto es lo que hacer en su lugar.
Casi todos los agentes empiezan igual: guardar los mensajes en una lista y mandar la lista en cada turno. Es lo correcto para empezar — son tres líneas y funciona.
Lo que no es, es un diseño. Tiene una curva de coste que nadie eligió, un modo de fallo que llega sin avisar, y una propiedad de privacidad que va a ser un problema la primera vez que alguien pregunte.
1. Qué cuesta de verdad concatenar
Crecen tres cosas a la vez, y no se suman: se multiplican entre ellas.
- Tokens por turno. El turno veinte no cuesta lo que costó el primero: carga con los diecinueve anteriores. El coste por conversación crece con el CUADRADO de su longitud, no con su longitud.
- Latencia. El tiempo hasta la primera palabra sube con el tamaño del prompt. La conversación se vuelve más lenta justo según se vuelve más valiosa, o sea según se acerca a una decisión.
- Memoria en el proceso. Cada turno sostenido dentro de la ejecución es memoria que el proceso no puede soltar mientras la conversación siga abierta.
La versión que más duele es la que se queda sin memoria de proceso antes que sin contexto. Si has visto morir un worker a mitad de conversación, es el mismo diseño enseñando otro síntoma — eso lo contamos aparte.
2. Tres capas, porque responden preguntas distintas
«Memoria» es una palabra para tres trabajos. Separarlos es casi todo el asunto, porque cada uno tiene una duración distinta, un tamaño distinto y un motivo distinto para existir:
| Capa | Qué guarda | Cuánto dura | Qué responde |
|---|---|---|---|
| De trabajo | El turno actual y los pocos anteriores | El turno | ¿De qué estamos hablando ahora mismo? |
| Operativa | Los hechos que la conversación ya fijó: producto, cantidad, destino, forma de pago | La sesión | ¿Qué habíamos acordado ya, para no preguntarlo dos veces? |
| De largo plazo | Los documentos, el catálogo, lo que existía antes de esta conversación | Permanente | ¿Qué sabemos que esta conversación no ha dicho? |
La capa operativa es la que se gana el sitio. Es pequeña, está estructurada, y es lo que permite que en el turno quince el sistema diga «entonces, las dos que querías, ¿a la misma dirección?» sin releer los catorce anteriores.
3. Un resumen que sobrevive a la ventana
Entre la transcripción y los hechos hay una tercera cosa que merece guardarse: un resumen vivo del hilo. Ni los mensajes ni una lista de campos — el estado de la conversación en unas frases.
Importa por lo que pasa cuando la ventana recorta. Si lo único que hay es la transcripción, recortar pierde lo que se cayó por delante. Si hay un resumen consolidado fuera de la transcripción, recortar te cuesta la redacción y no el significado. Ese resumen es además lo que debería ir a una consulta de búsqueda: buscar en tus documentos con la conversación entera pegada recupera ruido.
4. Dónde debería vivir la sesión
Si el estado de sesión vive dentro del proceso que atiende el turno, muere con un reinicio y crece con el tráfico. Fuera del proceso necesita tres cosas, y no son opcionales:
- Una caducidad que se desliza. Una conversación parada una hora está terminada. Una activa no puede caducar a media frase porque empezó hace una hora.
- Una regla de desalojo. La memoria es finita aunque esté en disco. Tirar la sesión menos usada recientemente es aburrido y es lo correcto.
- Una frontera por cliente. Los datos de sesión de un cliente no se alcanzan desde otro, y eso se impone donde se leen los datos, no por costumbre.
Hay una cuarta que es fácil de aplazar y cara de meter después: lo que persistes no es lo que tienes en memoria. Una sesión viva puede sostener un teléfono; una guardada debería sostener una etiqueta que apunte a él. Conserva los hechos operativos —el producto, la cantidad, el destino— porque son los que permiten rehacer una cotización. Lo demás, pseudonimizado camino del disco.
5. Anti-patrones
- Resumir en cada turno. Pagas una llamada al modelo por turno para ahorrar tokens en el siguiente. Haz la cuenta antes de dar por hecho que sale a cuenta.
- Buscar usando la conversación entera como consulta. Las consultas largas recuperan vagamente. Usa el resumen, o el turno, no la transcripción.
- Un solo índice vectorial para todos los clientes, filtrado después de buscar. El filtro no es la frontera; la frontera debería ser el índice.
- Guardar la transcripción para siempre por si acaso. Le va a servir a quien te entre. Decide la retención antes de necesitarla.
- Tratar el resumen como autoridad. Es una compresión de lo que se dijo, no un registro de lo que se acordó. El registro son los hechos operativos.
6. Por dónde empezar
Si tienes en marcha la versión que concatena, no hace falta rehacerla. El orden que más da por menos esfuerzo es este:
- Saca los hechos ya fijados de la transcripción a un objeto pequeño y estructurado. Vas a notar que el agente deja de preguntar dos veces.
- Deja de mandar el historial completo: manda los hechos más los últimos turnos.
- Añade el resumen vivo, escrito fuera del camino crítico.
- Saca la sesión del proceso, con caducidad y desalojo.
- Decide qué se pseudonimiza camino del almacenamiento, y hazlo antes de tener un año de transcripciones.
Preguntas frecuentes
¿Y por qué no usar una ventana de contexto más grande?
Mueve el muro sin cambiar la pendiente. El coste y la latencia siguen creciendo con cada turno, y sigues perdiendo el principio de la conversación cuando acabas cruzando la línea — solo que más tarde y con una factura mayor.
¿El resumen no pierde información?
Sí, y por eso no es el registro. Guarda los hechos fijados como datos estructurados —esos son la autoridad— y deja que el resumen cargue con el tono y el contexto que los rodea.
¿Cuánto debería durar una sesión?
Lo bastante para que quien se levanta un momento vuelva a la misma conversación, y lo bastante poco para que las paradas no se acumulen. Una caducidad deslizante de decenas de minutos, con desalojo de la menos usada, cubre las dos cosas.
¿Dónde encaja el RAG en esto?
Es la capa de largo plazo, y hay que consultarla con el resumen o con el turno actual, no con la transcripción. La calidad de la recuperación baja según la consulta se alarga y se vuelve vaga.