chimera-budget-the-context
Gasta contra un presupuesto por debajo de la ventana real, y cuenta los esquemas de herramientas que reenvías en cada paso — son el suelo al que la compactación no puede llegar.
Conferida por quien revisó y leyó la tarjeta, no reclamada por el propio archivo. Una tarjeta que el agente destila durante una ejecución que consumió contenido no confiable nace contaminada y queda retenida para revisión antes de ser recuperada.
Cuándo viene a la mente
- la ejecución murió por desbordar el contexto
- subiendo max-steps
- el agente olvidó lo que estaba haciendo
- agregando otro servidor MCP
- decidiendo qué sacar del prompt
Evita y Comprueba es donde suele estar el valor. Haz es la sección que todo el mundo escribe.
El cuerpo de la tarjeta de arriba es una traducción. El original en inglés es lo que importa la CLI, lo que lee el agente en ejecución y lo que atestigua el hash de abajo.
Disparador
Estás ejecutando un bucle que añade a una lista de mensajes en cada paso — un agente ReAct, un turno de programación, un asistente que llama herramientas — y la lista solo crece. Síntomas: el proveedor lanza un error por longitud de contexto, o la ejecución sobrevive pero empieza a trabajar sobre el archivo equivocado tras un tramo largo.
No aplica a una llamada única cuyo prompt ensamblaste tú mismo y puedes medir una sola vez. No hay política de desalojo que diseñar cuando nada se acumula.
Haz
- Anota dos números antes de tocar el bucle: la ventana anunciada del modelo, y la fracción de
ella que gastarás en el prompt. Chimera gasta 0.6 (
DEFAULT_BUDGET_FRACTIONenchimera/core/context_budget.py). El resto paga la completion y la diferencia entre tu estimación de tokens y el conteo real del proveedor. - Dispara la compactación sobre una fracción del presupuesto, no de la ventana — Chimera se dispara al 0.8 del presupuesto. La compactación necesita espacio hacia el cual compactar; un disparador puesto en la ventana se activa cuando ya no queda ninguno.
- Mide el suelo fijo por separado de la parte que crece. El mensaje de sistema más el payload
tools=se reenvían en cada paso y ninguna cantidad de compactación de mensajes los toca. Ejecutachimera schema-bench(o cuenta el JSON tú mismo) antes de suponer que el historial es lo caro. Una importación MCP u OpenAPI verbosa puede poner decenas de miles de tokens bajo cada uno de los pasos de la ejecución. - Si el suelo es el problema, reduce el suelo: elimina las claves de esquema que son solo anotación
(
examples,title,default,$comment) y recorta la prosa de los parámetros a la primera frase, dejando intactostype,properties,requiredyenumpara que la selección de herramientas y la validez de los argumentos no cambien. Eso es lo que hacechimera/tools/schema_compact.py. Anuncia menos herramientas si aún así sigue siendo demasiado grande. - Fija el orden de desalojo explícitamente: el mensaje de sistema nunca, los turnos recientes literales (Chimera conserva 6), el tramo más antiguo reemplazado por un resumen o una nota factual. Nunca reescribas el mensaje de sistema — es el prefijo estable sobre el que se indexa la caché de prompts, y editarlo invalida cada turno cacheado detrás de él.
- Después de compactar, reinyecta lo que la ejecución necesita para seguir siendo ella misma: la tarea literal, el plan, la lista de tareas con su estado, y el archivo que se está editando. Vuelve a leer el archivo desde el disco en lugar de restaurar una copia recordada.
- Cuando estimes el tamaño en tokens tú mismo, cuenta el payload
tool_callsademás decontent. Los argumentos de las herramientas viajan en el mensaje del asistente y no están encontent; una estimación de tamaño que solo leecontentsubestima exactamente los mensajes que crecieron.
Evita
Subir --max-steps porque una tarea no terminó. Es el movimiento obvio y es el que mata la
ejecución: más pasos significan una lista de mensajes más larga contra la misma ventana.
Descartar el enunciado de la tarea. Llega como mensaje de usuario al principio, así que es lo primero que desaloja un compactador ingenuo y lo último sin lo que el agente puede trabajar. El resultado es un agente ejecutando un plan cuyo propósito fue borrado — igual de seguro, igual de productivo en ediciones, sin error en ninguna parte. Un archivo puede releerlo; una instrucción no.
Dejar un mensaje tool a la cabeza de la cola conservada:
older, recent = body[:-keep_recent], body[-keep_recent:] # can orphan a tool result
frente a
older, recent = body[:-keep_recent], body[-keep_recent:]
while recent and recent[0].get("role") == "tool":
older.append(recent.pop(0)) # tail starts on a legal turn
La mayoría de los proveedores rechazan un mensaje tool cuyo tool_call correspondiente del
asistente ya no está, así que la compactación que debía salvar la ejecución es la que la termina.
Evita también ajustar primero para la compresión máxima. Calibra priorizando el recall: conservar de más cuesta tokens, que es una factura; eliminar de más pierde contexto que hacía falta después, y esos mensajes ya no están. Uno es un costo, el otro es irrecuperable.
Comprueba
Baja la ventana a propósito — apunta el presupuesto a una ventana falsa de 4K, o ejecuta una tarea que sabes que es larga — y confirma tres cosas: que la compactación se disparó, que la ejecución continuó después de ella, y que el mensaje siguiente contenía la cadena de la tarea original. Busca con grep en el prompt compuesto una frase distintiva de la tarea después de la compactación. Si no está ahí, la restauración no funciona, digan lo que digan los logs.
Luego comprueba el suelo con una pregunta binaria: ¿el prompt de un solo paso, con historial vacío,
ya está por encima de tu umbral? Si es así, la compactación nunca puede ayudar — compact()
devuelve changed=False sobre una lista que no puede reducir, y la lectura honesta de una operación
nula es «esto no ayudó», no «reintenta contra el mismo muro».
Riesgo
Un presupuesto demasiado bajo compacta ejecuciones que nunca lo necesitaron, y cada compactación reescribe el sufijo del prompt y tira los aciertos de caché que había detrás. En una sesión larga de programación eso es una factura real, pagada para evitar un desbordamiento que no habría ocurrido.
La compactación de esquemas tiene su propio filo: recortar la descripción de un parámetro a una frase es seguro para la validez de los argumentos, pero puede eliminar la frase que le decía al modelo cuándo usar la herramienta. Cambia el comportamiento de selección sin cambiar ningún esquema que el validador revise, así que falla como una elección de herramienta ligeramente peor y no como un error. Mídelo como un A/B; no lo actives porque ahorra tokens.
Y todo el patrón no compra nada si la tarea es genuinamente demasiado grande para el modelo. Presupuestar convierte un techo duro en uno blando; no crea espacio que no existe.
Cómo usarla
La tarjeta es un dato. Clona el repositorio e impórtala por ruta: lo que llega por la red se trata como contaminado y queda retenido a la espera de aprobación, que es el comportamiento deseable y la razón por la que aquí no hay un instalador de una línea.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-budget-the-context/SKILL.mdIntegridad
SHA-256 del archivo tal como se publicó. Quien lo importe puede comprobar que lo que recibió es lo que mostró esta página.
63f202117c1ffb79dcc016edf37d12760ef2edd00274900bf5177dc1ee6b33f2