Compresión de contexto autónoma: el agente decide cuándo olvidar

Compresión de contexto autónoma: el agente decide cuándo olvidar
85 %del límite de contexto: cuándo compacta Deep Agents por defecto
10 %del contexto: los mensajes recientes que se conservan al resumir
5situaciones en las que conviene compactar
0compactaciones autónomas en Terminal Bench 2
Tu agente de IA debería decidir cuándo olvidar: la compresión de contexto autónoma de LangChain
También lo cuento en este vídeo de seis minutos, en mi canal Articulator ES.

Qué es comprimir el contextoenlace

Un agente trabaja con una memoria limitada: su ventana de contexto, donde caben las instrucciones, la conversación, los resultados de las herramientas y todo lo que ha leído. Comprimir el contexto es sustituir los mensajes antiguos por un resumen de lo que lleva hecho, que conserve solo lo relevante para la tarea.

Hace falta por dos motivos. El primero es obvio: las ventanas de contexto son finitas, y en una tarea larga se acaban llenando. El segundo es menos evidente: cuanto más se llena la ventana, peor trabaja el modelo con ella. Es lo que se conoce como deterioro del contexto, o context rot.

Dos motivos: una ventana de contexto llena, marcada como finita, y una curva en la que la calidad del modelo cae a medida que se usa más contexto.
La ventana es finita y, cuanto más se llena, peor trabaja el modelo.

El problema del umbral fijoenlace

Lo habitual es que el arnés, el software que envuelve al modelo, controle la compresión con un umbral fijo de tokens. Deep Agents, por ejemplo, usa perfiles de modelo para compactar al llegar al 85 % del límite de contexto de cada modelo.

Un medidor que llega al 85 % del límite de contexto y el umbral fijo de Deep Agents, con la ventana ya resumida al lado.
Deep Agents compacta al 85 % del límite de cada modelo.

El artículo explica por qué eso no es lo ideal: hay momentos buenos y momentos malos para compactar, y un umbral no distingue unos de otros.

  • Mal momento: en mitad de una refactorización compleja. El agente pierde los detalles justo cuando más los necesita.
  • Buen momento: al empezar una tarea nueva, o cuando el contexto anterior va a dejar de ser útil.

Una herramienta para el agenteenlace

Muchas herramientas de programación con agentes tienen un comando /compact para que el usuario comprima el contexto a mano cuando le parezca oportuno. LangChain va un paso más allá: le da al agente una herramienta para lanzar la compresión él mismo.

La ventaja es que compacta en el momento oportuno sin que los usuarios de tu aplicación tengan que saber que el contexto es finito, ni escribir ningún comando.

Un robot que llama a la herramienta compact_conversation y deja su contexto resumido, frente a un usuario que escribe /compact a mano.
Del /compact a mano a una herramienta que el agente llama solo.

Detrás hay una idea más grande. LangChain cree que el arnés debe apartarse siempre que pueda y aprovechar que los modelos razonan cada vez mejor. Es la famosa lección amarga (the bitter lesson): en lugar de ajustar el arnés a mano con reglas cada vez más finas, darle al agente más control sobre su propio contexto.

Cuándo compactar: cinco situacionesenlace

Si el agente decide, ¿cuándo debería hacerlo? El artículo agrupa los buenos momentos en cinco situaciones:

1. Al cambiar de tarea

El usuario pasa a otra cosa para la que el contexto anterior seguramente no sirve, o el agente termina un entregable y el usuario lo da por bueno.

2. Tras sacar un resultado

El agente ha obtenido un dato, una conclusión o un resumen consumiendo mucho contexto, como en una tarea de investigación.

3. Antes de mucho contexto nuevo

Va a escribir un borrador largo o a leer muchos documentos.

4. Antes de un proceso largo

Va a empezar una refactorización, una migración, una edición de muchos archivos o la respuesta a un incidente; por ejemplo, cuando ya tiene el plan y va a ejecutarlo.

5. Una decisión lo cambia todo

Llegan requisitos nuevos que invalidan el contexto anterior, o hay muchas tangentes y callejones sin salida que caben en un resumen.

Las cinco situaciones en fila y, debajo, la quinta: requisitos nuevos que dejan obsoleta la conversación y tangentes y callejones sin salida.
Las cinco situaciones; abajo, la quinta, cuando una decisión deja obsoleto lo anterior.

No se pueden enumerar todos los casos, pero según LangChain las personas y los modelos de lenguaje saben reconocerlos. Por eso le explican al modelo estos criterios en las instrucciones de la herramienta. Y compactar a tiempo tiene una ventaja añadida: evita tener que hacerlo a la fuerza más tarde, cuando la ventana está a punto de llenarse.

Qué pasa al llamar a la herramientaenlace

La herramienta funciona igual que el resumen automático que ya tenía Deep Agents, con los mismos parámetros:

  • Se conservan los mensajes recientes: un 10 % del contexto disponible. Entre ellos queda la propia llamada a la herramienta, con su respuesta.
  • Lo anterior se resume: todo lo que viene antes pasa a ser un único mensaje de resumen.
  • No se pierde nada: los mensajes originales se guardan en un archivo, /conversation_history/{thread_id}.md, en el sistema de archivos virtual del agente.
  • El resumen lleva un puntero: en el contexto queda el resumen con una referencia a ese archivo, por si el agente necesita volver a los detalles.
El rombo de compactación guarda los originales en una carpeta y en el contexto quedan el resumen con un puntero, la pregunta, la llamada a la herramienta, su resultado y la respuesta.
Resumen con puntero arriba, mensajes recientes debajo y los originales en el sistema de archivos.

Es la idea que más me gusta del diseño: resumir no es olvidar, es guardar en otro sitio.

Cómo usarlaenlace

En la herramienta de terminal de Deep Agents (Deep Agents CLI) ya viene activada. En la librería de Python es opcional: es un middleware aparte que se añade a la lista middleware al crear el agente. Este es el ejemplo del artículo:

from deepagents import create_deep_agent
from deepagents.backends import StateBackend
from deepagents.middleware.summarization import (
    create_summarization_tool_middleware,
)

backend = StateBackend  # si usas el backend por defecto
model = "openai:gpt-5.4"
agent = create_deep_agent(
    model=model,
    middleware=[
        create_summarization_tool_middleware(model, backend),
    ],
)

Y en la terminal también puedes escribir tú /compact cuando quieras recortar el contexto o cambiar de tarea.

A la izquierda, la terminal de Deep Agents con compact_conversation activada; a la derecha, el código de Python con el middleware opcional.
Activada en la terminal y opcional en la librería.

Cómo la probaronenlace

LangChain ajustó la herramienta para que fuera conservadora. Deep Agents guarda todo el historial, así que el contexto se puede recuperar después de resumir, pero una compresión a destiempo interrumpe el trabajo. La probaron de tres formas:

  1. Una batería de evaluación propia: sobre conversaciones reales, sacadas de sus trazas de LangSmith, inyectaban preguntas de seguimiento; unas merecían compactar y otras no.
  2. Terminal Bench 2: un banco de pruebas de tareas en la terminal, donde el agente no compactó por su cuenta ni una sola vez.
  3. Sus propias tareas de programación con la herramienta de terminal de Deep Agents.
Tres tarjetas: la evaluación propia con conversaciones que sí y no merecían compactar, Terminal Bench 2 con cero compactaciones autónomas y las tareas de programación.
Tres pruebas; en Terminal Bench 2, cero compactaciones autónomas.

¿El resultado? Los agentes son prudentes y compactan poco. Pero, cuando lo hacen, suelen elegir momentos en los que el flujo de trabajo mejora claramente.

¿Es mala señal que no compactara nunca?enlace

Ese cero en Terminal Bench me llamó la atención. Si dejas que el modelo decida cuándo compactar y no lo hace nunca, a primera vista parece una mala noticia. El artículo no lo explica, así que lo he contrastado con el código de Deep Agents, y creo que no es necesariamente mala señal, por dos razones.

La primera: esos momentos no llegan. A la herramienta se le pide usarla en momentos claros, como cuando el usuario cambia de tarea o cuando el agente ya ha sacado el resultado que buscaba. En Terminal Bench, cada prueba es una sola tarea, de principio a fin, sin cambios de tema. Y comprimir a mitad de una tarea es justo el error que querían evitar.

Los dos momentos claros arriba y, debajo, la barra de una prueba de Terminal Bench rota en rojo por una compresión a mitad de tarea.
Cada prueba es una sola tarea: comprimir a mitad sería el error que querían evitar.

La segunda: no compactar no significa desbordarse. En el código, la herramienta ni siquiera acepta comprimir hasta que la conversación llega a la mitad del umbral; antes responde «Nothing to compact yet». Y la herramienta se añade al resumen automático, no lo sustituye: create_deep_agent lo incluye siempre, así que cuando la ventana se llena el resumen automático del 85 % sigue actuando como red de seguridad.

Un medidor de la ventana con la marca de la mitad del umbral, la llamada a compact_conversation disponible y el resumen automático al 85 % como red de seguridad.
La herramienta exige la mitad del umbral; el resumen automático del 85 % sigue ahí.

Lo que el artículo no da son cifras: no sabemos cuántas veces debería haber compactado el agente y no lo hizo. Así que el cero no demuestra que la herramienta funcione, pero tampoco que falle.

Una dirección más ampliaenlace

La compresión autónoma del contexto es una función pequeña, pero apunta a una dirección más amplia en el diseño de agentes: dar a los modelos más control sobre su propia memoria de trabajo y menos reglas rígidas ajustadas a mano en el arnés.

Un cerebro con más control sobre su memoria de trabajo frente a un anillo con reglas escritas a mano tachadas.
Más control para el modelo y menos reglas a mano en el arnés.
En una frase

En lugar de compactar siempre al 85 %, el agente decide cuándo resumir su contexto y elige los momentos en los que le ayuda.

¿Dejarías que tu agente decidiera cuándo olvidar?

Fuentesenlace

Seguir leyendo

Últimos posts -->

¿Has visto estos proyectos?

Gymnasia

Gymnasia Gymnasia
Expo
React Native
TypeScript
OpenAI
Anthropic

App de fitness con dos agentes que se ejecutan íntegramente en el dispositivo, sin backend, de forma que los datos del usuario nunca salen del móvil. Un coach conversacional BYOK con tools locales y system prompt remoto con fallback offline, y un estimador de comidas que saca los macronutrientes de una foto del plato, con lectura de códigos de barras contra OpenFoodFacts.

LangGraph Deep Researcher

LangGraph Deep Researcher LangGraph Deep Researcher
Python
LangGraph
FastAPI
React
TypeScript
Docker

Sistema multiagente de investigación construido con LangGraph. Un supervisor descompone tu pregunta en temas y lanza subagentes de búsqueda en paralelo; cada uno comprime sus hallazgos antes de pasarlos a un agente redactor que escribe el informe final en markdown con sus fuentes. Streaming en vivo por WebSockets, modelo configurable por rol y claves de API propias que nunca se guardan en el servidor.

Tau

Tau Tau
Python
LangChain

Sistema multiagente de tutoría para estudiantes de secundaria, con un agente por asignatura y material de curso elaborado y validado por un equipo de profesores. Llegó a usarse con alumnos reales en un colegio privado en España y en un instituto en Colombia.

Ver todos los proyectos -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres ver alguna charla?

Últimas charlas -->

¿Quieres mejorar con estos tips?

Últimos tips -->

Usa esto en local

Los espacios de Hugging Face nos permite ejecutar modelos con demos muy sencillas, pero ¿qué pasa si la demo se rompe? O si el usuario la elimina? Por ello he creado contenedores docker con algunos espacios interesantes, para poder usarlos de manera local, pase lo que pase. De hecho, es posible que si pinchas en alún botón de ver proyecto te lleve a un espacio que no funciona.

Flow edit

Flow edit Flow edit

Edita imágenes con este modelo de Flow. Basándose en SD3 o FLUX puedes editar cualquier imagen y generar nuevas

FLUX.1-RealismLora

FLUX.1-RealismLora FLUX.1-RealismLora
Ver todos los contenedores -->
>_ Disponible para proyectos

¿Tienes un proyecto con IA?

Hablemos.

maximofn@gmail.com

Especialista en Machine Learning e Inteligencia Artificial. Desarrollo soluciones con IA generativa, agentes inteligentes y modelos personalizados.

¿Quieres entrenar tu modelo con estos datasets?

short-jokes-dataset

HuggingFace

Dataset de chistes en inglés

Uso: Fine-tuning de modelos de generación de texto humorístico

231K filas 2 columnas 45 MB
Ver en HuggingFace →

opus100

HuggingFace

Dataset con traducciones de inglés a español

Uso: Entrenamiento de modelos de traducción inglés-español

1M filas 2 columnas 210 MB
Ver en HuggingFace →

netflix_titles

HuggingFace

Dataset con películas y series de Netflix

Uso: Análisis de catálogo de Netflix y sistemas de recomendación

8.8K filas 12 columnas 3.5 MB
Ver en HuggingFace →
Ver más datasets -->