Estrategia de compresión de contexto en 5 capas
Descripción general
En escenarios de conversaciones largas, la cantidad de tokens del contexto se acerca progresivamente al límite de la ventana de contexto del modelo. El sistema adopta un esquema en cascada de tres capas de arquitectura y cinco estrategias de compresión, que gestiona de forma inteligente la longitud del contexto sin comprometer la calidad de la conversación.
Resumen de estrategias

| Número | Capa | Nombre de la estrategia | Condición de activación | Modo de procesamiento |
|---|---|---|---|---|
| ① | Layer 1 | Truncamiento del resultado de una sola herramienta | El resultado de una sola herramienta supera el 50 % del contexto | Truncar hasta el presupuesto, cortando en un límite de salto de línea |
| ② | Layer 1 | Compactación de resultados de herramientas antiguos | La entrada total supera el 75 % del contexto | Sustituir los resultados de herramientas de la lista blanca por marcadores de posición |
| ③ | Layer 2 | Poda del historial de mensajes | El LLM devuelve un error de desbordamiento de contexto | Conservar los mensajes clave y podar el historial intermedio |
| ④ | Layer 3 | Resumen completo con LLM | La Layer 2 no basta para aliviar la presión | Resumen por bloques + fusión, formato estructurado de 9 secciones |
| ⑤ | Layer 3 | Degradación con resumen parcial | El resumen con LLM falla | Reintentar tras excluir los mensajes muy grandes y, finalmente, degradar a una notificación en texto plano |
Layer 1: Truncamiento preventivo de resultados de herramientas
Momento de activación: se ejecuta automáticamente antes de cada llamada al LLM (de forma preventiva, sin esperar a que se produzca el desbordamiento).
Estrategia ① — Truncamiento del resultado de una sola herramienta
Cuando el resultado de una sola herramienta supera el 50 % de la ventana de contexto, se trunca hasta el presupuesto:
Salida original de la herramienta (demasiado larga)
│
├── Conservar los primeros N caracteres (cortando en un límite de salto de línea)
└── Añadir la marca: [truncated: output exceeded context limit]
Constante clave:
SINGLE_TOOL_RESULT_CONTEXT_SHARE = 0.5(proporción máxima de una sola herramienta)
Estrategia ② — Compactación de resultados de herramientas antiguos
Cuando la entrada total supera el 75 % de la ventana de contexto, se compactan los resultados empezando por la herramienta más antigua:
Historial de llamadas a herramientas (secuencia temporal)
│
├── Resultado de herramienta más reciente → conservar el contenido completo
├── Resultado de herramienta más nuevo → conservar el contenido completo
├── Resultado de herramienta más antiguo → [compacted: tool output removed to free context]
└── Resultado de herramienta más viejo → [compacted: tool output removed to free context]
Mecanismo de lista blanca: la compactación solo se aplica a las siguientes herramientas de salida elevada:
- Read File, Bash, Grep, Glob, Search Files, Web Fetch, Edit
La salida de herramientas del tipo Write/Create se conserva siempre, porque su salida es la base de operaciones posteriores.
Constante clave:
CONTEXT_INPUT_HEADROOM_RATIO = 0.75(proporción máxima de la entrada total)
Layer 2: Detección de desbordamiento y poda del historial de mensajes
Momento de activación: se activa de forma pasiva cuando el LLM devuelve un error de desbordamiento de contexto.
Estrategia ③ — Poda del historial de mensajes
Se podan los mensajes intermedios del historial y se conservan los mensajes clave:
Historial de mensajes
│
├── System Prompt ← se conserva siempre
├── Primer mensaje del usuario ← se conserva siempre
├── Mensajes con _pin: true ← se conserva siempre
├── ........ historial intermedio ........ ← se poda (se sustituye por una notificación)
├── [context compacted: X earlier messages removed]
├── Últimos N mensajes ← se conservan (N = min(6, ⌊total/3⌋))
└── Mensaje actual ← se conserva
Tras la poda se reparan automáticamente los pares de herramientas huérfanos (un tool_use sin su tool_result correspondiente, o viceversa) para garantizar que el formato de los mensajes sea válido.
Layer 3: Resumen inteligente con LLM
Momento de activación: se activa cuando, tras la poda de la Layer 2, sigue sin bastar para aliviar la presión del contexto.
Estrategia ④ — Resumen completo
Se utiliza una llamada independiente al LLM para resumir de forma estructurada los mensajes del historial:
Formato de resumen de 9 secciones:
- Intención y objetivos del usuario
- Conceptos y términos clave
- Archivos y rutas implicados
- Errores encontrados y sus soluciones
- Enfoque de resolución de problemas
- Mensajes clave del usuario
- Tareas pendientes
- Progreso actual del trabajo
- Plan para el siguiente paso
Estrategia de fragmentación: cuando los mensajes superan los 50 000 caracteres, se dividen en un máximo de 4 bloques que se resumen por separado y luego se fusionan en el resumen final.
Estrategia ⑤ — Degradación con resumen parcial
Cuando el resumen completo falla, se ejecuta una degradación en tres niveles:
| Nivel de degradación | Modo de procesamiento |
|---|---|
| Level 1 | Excluir los mensajes muy grandes (>50 000 caracteres) y reintentar el resumen con los mensajes restantes |
| Level 2 | Añadir la nota [Note: X oversized message(s) were excluded] |
| Level 3 | Devolver una notificación en texto plano [Summary unavailable — X messages could not be summarized] |
Resumen de constantes clave
| Constante | Valor | Descripción |
|---|---|---|
CONTEXT_INPUT_HEADROOM_RATIO |
0.75 | Proporción máxima de la entrada total de la Layer 1 |
SINGLE_TOOL_RESULT_CONTEXT_SHARE |
0.5 | Proporción máxima de una sola herramienta de la Layer 1 |
MAX_OVERFLOW_COMPACTION_ATTEMPTS |
5 | Número máximo de reintentos de compresión |
COMPACT_MAX_OUTPUT_TOKENS |
20,000 | Límite de salida de la llamada al LLM de resumen |
COMPACT_BUFFER_TOKENS |
13,000 | Búfer del umbral de compactación |
CHARS_PER_TOKEN |
4 | Caracteres por token del texto normal |
TOOL_RESULT_CHARS_PER_TOKEN |
2 | Caracteres por token de los resultados de herramientas (más densos) |
Calibración de tokens con EMA
El sistema utiliza una media móvil exponencial para calibrar dinámicamente la estimación de chars-per-token:
| Fase | Método de calibración |
|---|---|
| Inicial | 3.0 chars/token (conservador, adaptado al chino + código) |
| Primeras 3 llamadas al LLM | Convergencia por media |
| Posteriores | Seguimiento suavizado con EMA α=0.15 |
| Filtrado de anomalías | Se ignora todo lo que quede fuera del rango 0.5 < observed < 8 |
Diagrama de flujo de compresión
Antes de cada llamada al LLM
│
├── Layer 1: enforceToolResultBudget()
│ ├── Truncamiento de una sola herramienta (>50 % del contexto)
│ └── Compactación de herramientas antiguas (entrada total >75 % del contexto)
│
├── shouldPreemptiveCompact() ?
│ └── Sí → compact() (poda de la Layer 2)
│
└── Llamada al LLM
│
├── Éxito → continuar
└── Error de desbordamiento → getRetryStrategy()
│
├── compact() (Layer 2)
│ │
│ └── Sigue sin bastar → compactWithSummary() (Layer 3)
│ ├── summarizeMessagesFull() (estrategia ④)
│ ├── Fallo → summarizeMessagesPartial() (estrategia ⑤ Level 1-2)
│ └── Fallo total → bare notice (estrategia ⑤ Level 3)
│
└── Reintentar la llamada al LLM (hasta 5 veces)
Qué significa para ti
La compresión de contexto es la razón del fenómeno de que "el Agente olvida lo anterior" que puedes percibir en conversaciones largas. No es un bug, sino el mecanismo mediante el cual el sistema gestiona la información de forma inteligente dentro de una ventana de contexto limitada.
Fenómenos que podrías observar:
- En una conversación larga, el Agente de repente "no recuerda" el requisito que mencionaste al principio → esto se debe a que la Layer 2/3 ha comprimido los mensajes iniciales
- El Agente dice "según lo comentado antes...", pero los detalles pueden no ser del todo exactos → tras la compresión solo se conservó el resumen
- Los resultados históricos de las llamadas a herramientas se convirtieron en
[compacted]→ esto se debe a que la Layer 1 ha compactado las salidas de herramientas antiguas
Cómo puedes afrontarlo:
- Di "recuerda esto" para la información clave: activa el sistema de memoria para almacenarla, sin verse afectada por la compresión de contexto
- Reformula los requisitos clave: en conversaciones largas, reformula periódicamente tus requisitos esenciales
- Elige modelos con contexto grande: GPT-4.1 (1M) o Claude (200K) pueden conservar más contexto que DeepSeek (64K)
- Abre una conversación nueva: si la conversación ya es muy larga y caótica, abrir una nueva puede ser más eficiente que continuar
Documentos relacionados
- Motor de bucle del Agente — la posición de la gestión de contexto dentro del bucle
- Configuración del modelo — el tamaño de la ventana de contexto de cada modelo
- Lista de modelos compatibles — matriz de capacidades de los modelos
