Ingeniería de contexto: tu agente no es tonto, se ahoga

Ingeniería de contexto: tu agente no es tonto, se ahoga
30.000tokens: lo que puede ocupar una sola salida de tests
5etapas de compactación, del 70 % al 99 % de presión
~15tokens: lo que queda de cada observación enmascarada
~15llamadas a herramientas: ahí se apaga el prompt de sistema
Tu agente de IA no es tonto, se ahoga en contexto: la ingeniería de contexto es el producto
También lo cuento en este vídeo de siete minutos, en mi canal Articulator ES.

La capa que importaenlace

Cobus parte de una lectura: el informe técnico de OpenDev, que se presenta como el primer trabajo completo sobre un agente de programación de código abierto que vive en la terminal. Lo que más le llamó la atención no fue el modelo ni las herramientas, sino la ingeniería de contexto: la capa que decide qué información tiene delante el agente en cada turno.

OpenDev trata la ventana de contexto como un recurso finito que se agota, igual que la memoria en un sistema operativo.

La ventana de contexto y la memoria RAM, dos cuadrículas iguales: un recurso finito que se llena.
La ventana de contexto, tratada como la memoria de un sistema operativo.

Y de ahí sale su idea central: cuando un agente falla, la mayoría de las veces no es porque razone mal, sino por su contexto. Seguro que te suenan estos tres síntomas: el modelo olvidó sus instrucciones, la ventana se llenó de salidas larguísimas de comandos o el agente dejó de seguir su prompt de sistema tras veinte llamadas a herramientas.

Dos cubos con bolas rojas de fallos: casi vacío el del razonamiento y lleno el del contexto.
Un esquema, sin cifras: el artículo solo dice «la mayoría».

Para el autor, esta es la capa que separa una demo de algo que aguanta en producción.

Lo que ve un agenteenlace

La verdad incómoda es esta: un modelo de lenguaje ve exactamente lo que le pones delante, y nada más. Y un agente lee archivos, busca y ejecuta comandos. Todos esos resultados acaban en la misma ventana, de tamaño fijo.

Si le pones cifras, se llena enseguida. Una sola tanda de tests puede devolver una salida de 30.000 tokens. Suma unas cuantas lecturas de archivos grandes y el contexto ya está lleno.

Una terminal con la salida de los tests, 30.000 tokens y la barra de contexto llena.
Una sola salida de tests puede ocupar 30.000 tokens.

A partir de ahí, el agente deja de ser eficaz. No porque se haya vuelto más tonto: lo importante ha quedado enterrado bajo el ruido.

Una gema brillante, lo importante, enterrada bajo una lluvia de piedras y caracteres.
Lo importante, enterrado bajo el ruido.

Un presupuesto, no un registroenlace

Cobus lo resume en una frase: el contexto es un presupuesto, no un registro (a budget, not a log). Los tokens que se van en una salida vieja ya no están disponibles para la pregunta real del usuario.

Un apunte: el artículo se la atribuye al paper, pero lo que el paper dice es «Treat context as a budget, not a buffer». La idea es la misma; la frase con «registro» es de Cobus.

Cinco etapas en vez de todo o nadaenlace

Esta es la pieza central. Lo habitual es un sistema de todo o nada: cuando el contexto se llena, se hace un resumen de emergencia. OpenDev, en cambio, vigila la presión sin parar y aplica estrategias cada vez más agresivas: un flujo de compactación adaptativa con cinco escalones.

Un manómetro de presión del contexto al 99 % y cinco barras crecientes: 70, 80, 85, 90 y 99.
Cada escalón se activa a un nivel de presión.
  1. 70 %, aviso. Todavía no se toca nada. El sistema apunta la presión y empieza a seguir la tendencia.
  2. 80 %, enmascarar observaciones. Los resultados antiguos de las herramientas se sustituyen por punteros de referencia muy compactos, de unos 15 tokens cada uno, como [output offloaded to scratch file]. La conversación mantiene su estructura, pero pesa muchísimo menos.
  3. 85 %, poda rápida. Se borran las salidas viejas que quedan fuera de la ventana de lo reciente, sin resumir nada. Por eso sale más barato que pedirle un resumen al modelo.
  4. 90 %, enmascarado agresivo. La ventana de lo que se conserva se encoge, hasta quedarse solo con las salidas más recientes.
  5. 99 %, compactación completa. Según el paper, primero guarda todo el historial en un archivo. Ahora sí, el modelo resume la parte central de la conversación, y lo último se conserva palabra por palabra.
La conversación con los resultados antiguos convertidos en punteros de 15 tokens, y espacio libre debajo.
Segunda etapa: cada observación antigua se queda en un puntero, y aparece espacio libre.
La poda rápida: las salidas viejas se borran y solo se quedan las recientes.
Tercera etapa: podar no resume nada, así que cuesta menos.
La compactación: un resumen de la conversación, lo último palabra por palabra y el historial completo guardado en un archivo.
Quinta etapa: el historial, a salvo en un archivo; lo reciente, palabra por palabra.

Una aclaración si vas al original: uso la numeración del artículo, del 1 al 5. El paper numera esas mismas etapas como 1, 2, 2.5, 3 y 4.

Lo barato, primeroenlace

La clave es esta: las estrategias baratas suelen recuperar espacio suficiente. Así te ahorras el coste de un resumen y la información que siempre se pierde con él.

Enmascarar y podar recuperan espacio suficiente; el resumen, que cuesta tokens y pierde información, queda tachado.
Si enmascarar y podar bastan, te ahorras el resumen.

Solo con la segunda etapa, cada observación baja de miles de tokens a unos quince. Y el artículo da este resultado: antes, las sesiones se desbordaban a los 15 o 20 turnos; ahora aguantan de 30 a 40, sin que la compactación llegue ni a activarse.

Un matiz del paperenlace

Aquí el artículo y su fuente no dicen exactamente lo mismo, así que lo fui a comprobar. El paper atribuye ese salto de turnos, sobre todo, a resumir las salidas de las herramientas y sacar a archivos las más grandes (las de más de 8.000 caracteres), no al flujo de cinco etapas.

De las cinco etapas da otra cifra: reducen un 54 % el pico de contexto que ocupan las observaciones. Y son datos de su propia experiencia, sin compararse con otros agentes, así que conviene leerlos con esa cautela.

Dos paneles: el salto de 15-20 a 30-40 turnos viene de resumir y sacar a archivos; las cinco etapas dan un −54 %.
Dos cifras distintas, con dos causas distintas.

También verás en el artículo «más de 40 turnos» en el resumen inicial. En su cuerpo y en el paper son de 30 a 40.

El prompt de sistema se apagaenlace

Esta es la parte que más sorprendió al autor. A partir de unas 15 llamadas a herramientas, el modelo deja de seguir su prompt de sistema, y ocurre una y otra vez. Las instrucciones siguen ahí, en la ventana. Simplemente, ya no les hace caso.

El ejemplo del paper: le dices que ejecute siempre los tests después de editar. Al principio lo hace. Pero pasadas unas veinte llamadas, lo deja de hacer sin avisar.

Cobus lo explica como un problema de distancia: el prompt de sistema está en la posición cero, y la atención del modelo se ha ido a los mensajes recientes, más allá de la 50.000. Esas dos posiciones son suyas, no salen en el paper.

Una cinta de mensajes con el foco de la atención del modelo sobre los últimos, en la posición 50.000 o más.
La atención del modelo está en lo reciente, lejos del prompt de sistema.

Recordatorios con rol de usuarioenlace

¿Cómo se arregla? Con recordatorios que se disparan por eventos: mensajes cortos que se inyectan justo en el punto de decisión, donde el agente se equivocaría. Según el paper, tiene ocho detectores de eventos; por ejemplo, cuando falla una herramienta y no reintenta, o tras cinco lecturas seguidas sin avanzar. Y unos contadores limitan cuántas veces salta cada recordatorio.

Y aquí está el truco: no van como mensajes de sistema, sino con role: user. Tras cuarenta turnos, otro aviso del sistema se confunde con ese fondo que el modelo ya ha olvidado a medias. En cambio, lo que escribe el usuario aparece como lo más reciente de todo, y el modelo lo trata como algo que exige una respuesta.

El foco de atención del modelo apunta al recordatorio con rol de usuario, al final de la conversación.
Con rol de usuario, el recordatorio es lo más reciente y exige una respuesta.

Tres leccionesenlace

De todas las lecciones del paper, el autor se queda con tres:

1. Presupuesto, no registro

Cada mensaje compite por un espacio finito. Añadir es gastar, no apuntar. Vigila qué está consumiendo y si todavía compensa.

2. Dirige al decidir, no al arrancar

Un prompt de sistema largo se va apagando. Un recordatorio corto, justo antes de decidir, se queda.

3. Pon tope a lo que crece

El historial de deshacer, las llamadas simultáneas, los avisos de comportamiento. Sin un límite, las sesiones largas acaban fallando.

Esquema de la influencia en el modelo: el prompt de sistema se apaga con el tiempo y el recordatorio, justo antes de decidir, se queda.
Un esquema, no una medición: el prompt se apaga y el recordatorio se queda.
Tres barras frenadas por un tope, y una sesión sin tope que acaba fallando.
Todo lo que crece con la sesión necesita un tope.

En resumenenlace

Trata el contexto como un presupuesto, comprime primero lo barato, recuerda las reglas justo cuando hacen falta y ponle tope a lo que crece.

En una frase

Tu agente es tan bueno como su contexto.

¿Qué es lo que más memoria le come a tu agente?

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 -->