Saltar al contenido
← Volver a Novedades

Ingeniería11 min de lectura

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:

CapaQué guardaCuánto duraQué responde
De trabajoEl turno actual y los pocos anterioresEl turno¿De qué estamos hablando ahora mismo?
OperativaLos hechos que la conversación ya fijó: producto, cantidad, destino, forma de pagoLa sesión¿Qué habíamos acordado ya, para no preguntarlo dos veces?
De largo plazoLos documentos, el catálogo, lo que existía antes de esta conversaciónPermanente¿Qué sabemos que esta conversación no ha dicho?
Casi todos los sistemas que parecen tener mala memoria han fundido la capa de en medio con la primera.

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:

  1. 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.
  2. 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.
  3. 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:

  1. 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.
  2. Deja de mandar el historial completo: manda los hechos más los últimos turnos.
  3. Añade el resumen vivo, escrito fuera del camino crítico.
  4. Saca la sesión del proceso, con caducidad y desalojo.
  5. 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.

Seguir leyendo