Aller au contenu principal
Intermédiaire15 min

Module 5 — Compaction intentionnelle fréquente


Objectif

À la fin de ce module, tu sauras compacter ton contexte à 70% d’utilisation, structurer les résumés, et vérifier qu’aucune info critique n’est perdue.


Pourquoi compacter ?

L’historique de messages grossit silencieusement. Après 20-30 tours, il peut occuper 70-80% de la fenêtre. L’agent ne montre aucun symptôme visible jusqu’à ce que la qualité s’effondre brutalement.

Règle d’or : Compacter à 70-80% d’utilisation. Pas à 90%. Pas quand l’agent commence à délirer.


Les 3 approches de compression

Approche Ratio Qualité Quand l’utiliser
Anchored Iterative 98.6% 3.70/5 Sessions longues, tracking de fichiers
Regenerative 98.7% 3.44/5 Lisibilité humaine, phases claires
Opaque 99.3% 3.35/5 Max de tokens, re-fetching peu coûteux

Source : Factory Research (Dec 2025), évaluation sur 36K messages.


Anchored Iterative Summarization (recommandé)

Principe

Maintenir un résumé structuré persistant. Quand la compaction se déclenche, résumer seulement la partie nouvellement tronquée et la fusionner avec le résumé existant.

Structure obligatoire

## Session Intent
[Ce que l'utilisateur essaie d'accomplir]

## Files Modified
- auth.controller.ts : JWT token generation fix
- config/redis.ts : connection pooling
- tests/auth.test.ts : mock setup

## Decisions Made
- Utiliser Redis connection pool au lieu de per-request
- Retry logic avec exponential backoff

## Current State
- 14 tests passants, 2 échouent
- Reste : mock setup pour session service

## Next Steps
1. Fix remaining test failures
2. Run full test suite
3. Deploy to staging

Étapes

  1. Définir les sections explicites selon le domaine
  2. Au premier trigger, résumer l’historique tronqué dans ces sections
  3. Aux triggers suivants, résumer SEULEMENT le nouveau contenu tronqué
  4. Fusionner avec le résumé existant (pas régénérer)
  5. Taguer la source de chaque info (cycle 1, cycle 2…)

Comment déclencher la compaction

Stratégie par seuil fixe (simple)

if context_tokens / context_limit > 0.75:
    context = compact_context(context)

Stratégie par fenêtre glissante (prévisible)

Garder les N derniers tours + résumé. Taille de contexte constante.

Stratégie par frontière de tâche (propre)

Compacter à la fin de chaque phase logique (research → plan → implement).

Recommandation : Fenêtre glissante + résumé structuré pour les agents de code.


Évaluer la compression avec des probes

Les métriques classiques (ROUGE, similarité d’embedding) échouent à capturer la qualité fonctionnelle. Un résumé peut avoir un bon score lexical tout en manquant le chemin de fichier critique.

Probe-based evaluation : Poser des questions qui testent si l’info critique a survécu.

Type de probe Ce que ça teste Exemple
Recall Rétention factuelle “Quel était le message d’erreur original ?”
Artifact Tracking de fichiers “Quels fichiers avons-nous modifiés ?”
Continuation Planification “Que devons-nous faire ensuite ?”
Decision Chaîne de raisonnement “Qu’avons-nous décidé sur Redis ?”

Workflow de compaction dans Claude Code

# 1. Vérifier l'utilisation
/claude context

# 2. Si > 75%, demander la compaction
/claude compact

# 3. Vérifier le résumé généré
# Relire les sections Files Modified et Decisions Made

# 4. Continuer avec le résumé comme nouveau contexte

Checklist de validation

  • Je compacte à 70-80%, pas à 90%+
  • Mon résumé a des sections explicites (Files, Decisions, State, Next)
  • Je fusionne incrémentalement, pas je régénère tout
  • Je teste avec des probes après compaction
  • Je surveille la fréquence de re-fetching (signe de perte)

Piège courant

Compacter sous pression. → Quand le modèle qui compacte est lui-même sous pression contextuelle (>85%), sa qualité de résumé dégrade. Il omet les objectifs, les contraintes utilisateur, et l’état nuancé. Si tu dois compacter tard, utilise un appel de modèle séparé avec un contexte propre contenant seulement le matériel à résumer.


Prochaine étape

→ Module 6 (Observation masking et KV-cache) pour optimiser avant de compacter