La Dieta de Contexto de Hermes: Recorta el Gasto de Tokens por Turno, a la Manera Oficial


Llevas tres horas con una tarea larga: una migración, un bug que cruza veinte archivos, una limpieza de datos que no para de crecer. Entonces lo notas: cada mensaje tarda más en responderse, y el panel del proveedor muestra que esta sesión se ha comido más tokens que todo lo demás del mes junto. No es casualidad. En cada turno, el modelo tiene que releer toda la conversación — incluidos los resultados de herramientas y pasos intermedios que dejaron de importar hace dos horas. Cuanto más grande es esa pila, más caro sale cada frase. Hermes llama a esto “reducción de contexto”, y desde que v0.20 llegó a principios de agosto, las herramientas oficiales para ello se han vuelto, discretamente, muy buenas. Esta guía recorre todas las capas verificables: lo que consigues gratis al actualizar, qué interruptores de configuración importan de verdad y los comandos de barra que mantienen en forma una sesión larga.

Por qué cada turno lo reenvía todo

Un modelo mental rápido: un LLM no tiene memoria propia. Cada vez que envías un mensaje, recibe el contexto completo — prompt del sistema, skills cargadas, definiciones de herramientas, tus archivos de memoria, el historial de la conversación y cada resultado de herramienta — y lo vuelve a leer. Los “tokens” son solo cómo se mide ese texto, y pagas por cada token que envías, en cada turno.

Así que el coste total de una sesión es, aproximadamente, tamaño del contexto × número de turnos. Reduce cualquiera de los dos y la factura cae al instante. Ese es el juego de la reducción de contexto: conservar la información que mejora la respuesta, descartar lo duplicado, obsoleto o irrelevante — sin volver más tonto al agente.

Capa 1: Compresión automática — ya trabaja por ti

Hermes incluye un sistema de compresión dual que funciona solo, sin configuración:

  • ContextCompressor del agente — el sistema principal, dentro del bucle de herramientas del agente, con recuentos de tokens reales reportados por la API. Se activa cuando la sesión cruza el 50% de la ventana de contexto del modelo (configurable).
  • Higiene de sesión del gateway — una red de seguridad al 85% del contexto, que corre antes de cada turno. Atrapa sesiones que crecieron demasiado entre turnos (por ejemplo, una acumulación nocturna en Telegram o Discord) para que la API nunca falle con una petición gigante.

Cuando se dispara la compresión, trabaja en cuatro fases:

  1. Podar resultados de herramientas antiguos — se descartan primero los más viejos. Este paso no cuesta nada: no hay llamada al LLM.
  2. Alinear límites — el compresor retrocede para no partir nunca un par “llamada de herramienta → resultado”.
  3. Generar un resumen estructurado — el medio de la conversación se envía a un modelo auxiliar, que escribe un resumen con objetivos, decisiones, progreso y siguientes pasos. El presupuesto del resumen escala con el contenido (≈20%), con un mínimo de 2.000 tokens y un tope del 5% de la ventana de contexto.
  4. Ensamblar — la sesión comprimida queda: cabecera (prompt del sistema + contexto inicial) + resumen + cola verbatim reciente.

La documentación oficial muestra un ejemplo real: una sesión de 45 mensajes (~95K tokens) se comprime a 25 mensajes (~45K tokens) — una reducción de ~53%, con el resumen y la cola reciente manteniendo la continuidad.

Capa 2: Actualiza y la renovación de v0.20 se activa sola

La versión v0.20.0 (3 de agosto) renovó la compresión a fondo — “Compression that respects your conversation”. Los cambios principales, todos fusionados en upstream y verificables en las notas de versión:

  • Micro-compactación por turno — en lugar de una pausa gigante al llegar al umbral, el coste se reparte entre turnos en pequeños incrementos.
  • Garantía de cola de N mensajes de usuariocompression.min_tail_user_messages (por defecto 1) asegura que los mensajes de usuario recientes siempre sobreviven a la compactación. Nunca pierdes el hilo de lo que pediste.
  • Podado proactivo de resultados de herramientas — los modelos de ventana grande podan resultados obsoletos antes incluso del umbral.
  • Defensa ghost-skill — una skill eliminada a mitad de sesión ya no puede rondar el contexto en silencio (los marcadores [SKILL_PRUNED] hacen el podado determinista).
  • Umbrales por modelo y umbrales absolutos de tokens — puedes disparar la compresión a porcentajes distintos por modelo, o a un número fijo de tokens (compression.threshold_tokens), lo que importa cuando tus modelos tienen ventanas muy diferentes.

La pieza más reciente llegó el 26 de agosto: el modo lean tail (PR #87326). La fórmula antigua mantenía una cola verbatim proporcional al tamaño de la ventana — en un modelo de 1M de contexto eso significaba acaparar 170K tokens de historial bruto tras cada compresión, dejando /compress casi inútil y reenviando esos tokens en cada turno. El modo lean limita la cola al 2,5% de la ventana (10K–25K tokens) y mueve la continuidad a un resumen mejorado con punteros de recuperación. Un cambio de ajuste, decenas de miles de tokens ahorrados por turno. Si hermes config get compression.tail_mode todavía dice legacy, ejecuta hermes update — el nuevo valor por defecto es lean.

Capa 3: Interruptores que puedes girar

Los valores por defecto son sensatos, pero un poco de ajuste rinde rápido. Primero mira lo que tienes:

hermes config get compression.enabled             # true
hermes config get compression.threshold           # 0.50 (se activa al 50% del contexto)
hermes config get compression.target_ratio        # 0.20
hermes config get compression.tail_mode           # lean en las últimas versiones
hermes config get compression.protect_last_n      # 20 (mensajes mínimos protegidos en la cola)
hermes config get compression.min_tail_user_messages  # 1

Tres ajustes que importan de verdad:

1. Activa antes en modelos de ventana grande. Si usas un modelo de 200K+, esperar al 50% significa que cada turno ya envía ~100K tokens. Pon compression.threshold en 0.4, o mejor, usa un umbral absoluto:

compression:
  enabled: true
  threshold_tokens: 80000    # comprime al pasar de 80K tokens

2. Umbrales por modelo. Distintas ventanas, distintos precios:

compression:
  model_thresholds:
    "claude-sonnet": 0.35
    "glm-5.2": 0.40

3. Haz el resumen más barato. El resumidor también es una llamada al LLM — por defecto usa un modelo auto-detectado sensato, pero puedes apuntarlo a un modelo barato y rápido:

auxiliary:
  compression:
    model: <un modelo barato y rápido>

Los resúmenes de compresión no son el lugar para tu modelo más caro.

Capa 4: Higiene diaria

Los cuatro comandos de barra que te dicen qué pasa y te dejan actuar:

Comando Qué hace
/context Desglosa exactamente qué llena tu ventana de contexto — skills, herramientas, memoria, historial, archivos
/usage Muestra uso y coste de tokens de la sesión (hermes insights cubre los últimos 30 días)
/compress Dispara la compresión manualmente a mitad de sesión
/focus Vista de salida reducida que oculta líneas de herramientas ruidosas sin perderlas

Además de los comandos, unos hábitos recortan el gasto fijo que viaja en cada turno:

  • Desactiva las skills que no usas. Cada skill activa inyecta su cabecera en el contexto de cada turno. hermes skills list y luego hermes skills disable <nombre> para las que nunca tocas.
  • Pon tool_search en auto. Las herramientas se cargan solo cuando se necesitan, en lugar de enviar todos los esquemas en cada turno.
  • Mantén la memoria y AGENTS.md ligeros. Cada carácter de memoria inyectada y de instrucciones del proyecto se reenvía en cada mensaje. Guarda hechos duraderos, no progreso de tareas.
  • No cambies de modelo a mitad de sesión. La mayoría de proveedores cachean el prefijo del prompt — con un prompt de sistema estable, los turnos siguientes aciertan en la caché y cuestan una fracción. Cambiar de modelo la invalida.
  • Delega o agrupa. Las investigaciones largas con delegate_task o las operaciones de archivos en un solo script execute_code mantienen la salida voluminosa fuera de la conversación principal.

Poniéndolo todo junto

Nada de esto sacrifica capacidad. El ejemplo oficial ya muestra ~95K → ~45K en una sesión larga típica, y en modelos de ventana grande el cambio lean tail elimina más de cien mil tokens por turno que eran puro gasto. La compresión automática gestiona el historial; la renovación de v0.20 la hace más suave y barata; unas líneas de configuración la adaptan a tus modelos; la higiene diaria impide que la pila crezca.

Dos advertencias. Primera, no pongas el umbral tan agresivo que el agente comprima constantemente — cada resumen es una llamada al LLM, y comprimir una sesión corta una y otra vez gasta dinero en resúmenes en lugar de respuestas. Segunda, la reducción de contexto es para contenido duplicado, obsoleto o irrelevante — si la sesión es de verdad enorme y lo necesita todo, prefiere max_turns ilimitados con exportación de sesión a exprimir la compresión.

Para la historia del nuevo valor por defecto lean tail y cifras reales en modelos de ventana grande, mira Hermes Compaction Gets a Lean Default. Si tu factura subió porque la ventana de contexto estaba fijada más grande de lo que anuncia tu proveedor, lee Why Your Subscription Drained in Hours. Y para el desglose campo a campo del presupuesto de contexto, la guía de configuración de tareas largas es la lectura profunda a marcar.