chimera-budget-the-context
Dépensez sur un budget inférieur à la fenêtre réelle, et comptez les schémas d'outils que vous renvoyez à chaque étape — ils sont le plancher que la compaction ne peut pas atteindre.
Conférée par la personne qui a relu la fiche, et non revendiquée par le fichier lui-même. Une fiche que l'agent distille au cours d'une exécution ayant consommé du contenu non fiable naît contaminée et reste en attente de relecture avant d'être un jour récupérée.
Quand elle vient à l'esprit
- l'exécution a saturé le contexte
- augmenter max-steps
- l'agent a oublié ce qu'il faisait
- ajout d'un autre serveur MCP
- décider quoi retirer du prompt
C'est dans À éviter et Vérifier que se trouve d'ordinaire la valeur. À faire est la section que tout le monde écrit.
Le corps de la fiche ci-dessus est une traduction. L'original anglais est ce que la CLI importe, ce que l'agent lit à l'exécution et ce que l'empreinte ci-dessous atteste.
Déclencheur
Vous exécutez une boucle qui ajoute à une liste de messages à chaque étape — un agent ReAct, un tour de codage, un assistant qui appelle des outils — et la liste ne fait que grossir. Symptômes : le fournisseur lève une erreur de longueur de contexte, ou l'exécution survit mais se met à travailler sur le mauvais fichier après une longue série.
Cela ne s'applique pas à un appel unique dont vous avez assemblé le prompt vous-même et que vous pouvez mesurer une fois. Il n'y a pas de politique d'éviction à concevoir quand rien ne s'accumule.
À faire
- Notez deux chiffres avant de toucher à la boucle : la fenêtre annoncée du modèle, et la fraction
de celle-ci que vous consacrerez au prompt. Chimera consacre 0,6 (
DEFAULT_BUDGET_FRACTIONdanschimera/core/context_budget.py). Le reste paie la complétion et l'écart entre votre estimation de tokens et le compte réel du fournisseur. - Déclenchez la compaction sur une part du budget, pas de la fenêtre — Chimera se déclenche à 0,8 du budget. La compaction a besoin de place où compacter ; un déclencheur réglé sur la fenêtre se déclenche quand il n'en reste plus.
- Mesurez le plancher fixe séparément de la partie qui grossit. Le message système et la charge
tools=sont renvoyés à chaque étape et aucune compaction de messages n'y touche. Lancezchimera schema-bench(ou comptez le JSON vous-même) avant de supposer que c'est l'historique qui coûte cher. Un import MCP ou OpenAPI verbeux peut placer des dizaines de milliers de tokens sous chaque étape de l'exécution. - Si le plancher pose problème, réduisez le plancher : retirez les clés de schéma purement annotatives (
examples,title,default,$comment) et ramenez la prose des paramètres à la première phrase, en gardanttype,properties,requiredetenumintacts pour que la sélection d'outils et la validité des arguments restent inchangées. C'est ce que faitchimera/tools/schema_compact.py. Annoncez moins d'outils si c'est encore trop gros. - Fixez explicitement l'ordre d'éviction : le message système jamais, les tours récents mot pour mot (Chimera en garde 6), la portion plus ancienne remplacée par un résumé ou une note factuelle. Ne réécrivez jamais le message système — c'est le préfixe stable sur lequel le cache de prompt est indexé, et le modifier invalide tous les tours mis en cache derrière lui.
- Après compaction, réinjectez ce dont l'exécution a besoin pour rester elle-même : la tâche mot pour mot, le plan, la liste des tâches avec leur statut, et le fichier en cours d'édition. Relisez le fichier depuis le disque plutôt que de restaurer une copie mémorisée.
- Quand vous estimez vous-même la taille en tokens, comptez la charge
tool_callsen plus decontent. Les arguments d'outils voyagent sur le message de l'assistant et ne sont pas danscontent; une estimation de taille qui ne lit quecontentsous-évalue précisément les messages qui ont grossi.
À éviter
Augmenter --max-steps parce qu'une tâche n'a pas abouti. C'est le geste évident et c'est celui qui
tue l'exécution : plus d'étapes signifie une liste de messages plus longue face à la même fenêtre.
Supprimer l'énoncé de la tâche. Il arrive comme message utilisateur en tête, c'est donc la première chose qu'un compacteur naïf évince et la dernière dont l'agent peut se passer. Le résultat est un agent qui exécute un plan dont la finalité a été supprimée — toujours confiant, produisant toujours des modifications, sans la moindre erreur. Un fichier, il peut le relire ; une instruction, non.
Laisser un message tool en tête de la queue conservée :
older, recent = body[:-keep_recent], body[-keep_recent:] # can orphan a tool result
face à
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 plupart des fournisseurs rejettent un message tool dont le tool_call assistant correspondant a disparu ; la
compaction censée sauver l'exécution est donc ce qui y met fin.
Évitez aussi de régler d'abord pour la compression maximale. Calibrez en privilégiant le rappel : garder trop coûte des tokens, ce qui est une facture ; retirer trop perd du contexte qui servait plus tard, et ces messages sont perdus. L'un est un coût, l'autre est irrécupérable.
Vérifier
Réglez la fenêtre volontairement bas — pointez le budget sur une fausse fenêtre de 4K, ou lancez une tâche que vous savez longue — et confirmez trois choses : la compaction s'est déclenchée, l'exécution s'est poursuivie ensuite, et le message qui a suivi contenait la chaîne de la tâche d'origine. Cherchez dans le prompt composé une phrase distinctive de la tâche après compaction. Si elle n'y est pas, la restauration ne fonctionne pas, quoi que disent les journaux.
Vérifiez ensuite le plancher par une question binaire : le prompt d'une seule étape, avec un historique vide, dépasse-t-il
déjà votre seuil ? Si oui, la compaction ne peut jamais aider — compact() renvoie
changed=False sur une liste qu'il ne peut pas réduire, et la lecture honnête d'une opération sans effet est « ça n'a pas
aidé », pas « on retente contre le même mur ».
Risque
Un budget réglé trop bas compacte des exécutions qui n'en avaient aucun besoin, et chaque compaction réécrit le suffixe du prompt et jette les hits de cache qui se trouvaient derrière. Sur une longue session de codage, c'est une facture bien réelle, payée pour éviter un dépassement qui n'aurait pas eu lieu.
La compaction de schémas a son propre écueil : ramener la description d'un paramètre à une seule phrase est sans danger pour la validité des arguments, mais peut supprimer la phrase qui indiquait au modèle quand utiliser l'outil. Cela change le comportement de sélection sans changer aucun schéma que le validateur contrôle ; l'échec prend donc la forme d'un choix d'outil légèrement moins bon, pas d'une erreur. Mesurez-la en A/B, ne l'activez pas parce qu'elle économise des tokens.
Et tout ce dispositif n'apporte rien si la tâche est réellement trop grosse pour le modèle. Budgétiser transforme un plafond dur en plafond souple ; cela ne crée pas de place qui n'existe pas.
L'utiliser
La fiche est une donnée. Clonez le dépôt et importez-la par son chemin — ce qui arrive par le réseau est traité comme contaminé et retenu pour approbation, ce qui est le comportement souhaitable et la raison pour laquelle il n'y a pas d'installateur en une ligne ici.
git clone https://github.com/brcampidelli/chimera-agent.gitchimera skills-import chimera-agent/skills/chimera-budget-the-context/SKILL.mdIntégrité
SHA-256 du fichier tel qu'il est publié. Qui l'importe peut vérifier que ce qu'il a reçu correspond à ce que cette page affichait.
63f202117c1ffb79dcc016edf37d12760ef2edd00274900bf5177dc1ee6b33f2