Compression de contexte et MoA
Responsabilité
Deux choses : (1) quand les messages d'historique approchent de la limite de contexte du provider, résumer ou rogner les anciens messages pour récupérer du budget (context_compressor) ; (2) en option, utiliser un chemin Mixture-of-Agents pour agréger les sorties de plusieurs modèles (moa_loop). Les deux sont appelés depuis la boucle principale et sont les composants de support qui « font tenir les longues conversations » et « stabilisent les réponses ».
Fichiers clés
module context_compressor— entrée principale de compression (environ 3700 lignes)estimation budget:190-242—_estimate_msg_budget_tokens/_serialized_length_for_budgetnettoyage des messages:136-155—_fresh_compaction_message_copy/_strip_persistence_markersextraction appels d'outils et mentions de chemins:337-360—_extract_tool_call_name_and_args/_collect_path_mentionsrognage de contenu:472-515—_append_text_to_content/_strip_image_parts_from_partsmoa_loop— agrégation Mixture-of-AgentsIterationBudget— remboursement de compression et couplage au budget
Flux de données
- La boucle principale évalue à chaque tour s'il faut compresser (voir
_should_run_preflight_estimate:213). - Au seuil déclenché, appel au context_compressor :
- estimation des tokens occupés par chaque message (
agent/context_compressor.py:419) - copie nettoyée des anciens messages (
agent/context_compressor.py:136), retrait des marqueurs de persistance (agent/context_compressor.py:155) - conservation des noms/arguments d'appels d'outils et des mentions de chemins, pour éviter que le résumé ne perde les opérations clés (
agent/context_compressor.py:337) - rognage des images et des contenus trop longs (
agent/context_compressor.py:472)
- estimation des tokens occupés par chaque message (
- L'« espace neuf » issu de la compression est partiellement remboursé via
iteration_budget.refund()(agent/iteration_budget.py), ce qui permet à la boucle principale de faire quelques tours de plus. - Si MoA est activé,
moa_loopappelle en parallèle plusieurs providers et agrège leurs sorties, comme amplification ou arbitrage de la réponse principale.
Résumé
Le compresseur est la bouée de sauvetage des longues conversations ; le compromis central est « quoi jeter, quoi garder » — il conserve en priorité les appels d'outils et les mentions de chemins, car les perdre rendrait les tours suivants « amnésiques ». MoA est une amplification orthogonale, activable. Aucun des deux ne change la structure de la boucle principale : ils s'insèrent seulement au bon moment.