Gestion du contexte
Pourquoi le coût des longues sessions augmente de façon non linéaire, et les méthodes qui permettent de limiter la taille de l’historique.
L’API est sans état. Chaque tour renvoie l’intégralité de la conversation : le nombre de tokens d’entrée augmente donc avec l’historique, et le coût augmente avec lui à chaque appel suivant.
La nature du problème
Une conversation de N tours, chacun ajoutant environ T tokens, consomme au total de l’ordre de N²T/2 tokens d’entrée, plutôt que NT. Doubler la durée de la session multiplie approximativement par quatre la facture des entrées. C’est pourquoi un agent qui semblait peu coûteux pendant dix minutes devient alarmant au bout d’une heure.
Quatre approches efficaces
| Schéma | Méthode | Compromis |
|---|---|---|
| Fenêtre glissante | Conservez les K derniers tours, supprimez le reste | Perd entièrement le contexte initial |
| Résumé actualisé | Remplacez périodiquement les anciens tours par un résumé rédigé par le modèle | Coûte un appel supplémentaire ; conserve l’essentiel |
| Nouvelle session par tâche | Repartez de zéro lorsque le sujet change | Gratuit et généralement approprié |
| Externaliser | Conservez l’état dans des fichiers ou une base de données et ne chargez que ce dont l’étape en cours a besoin | Demande le plus de travail, offre le meilleur résultat |
Résumer les anciens tours
def compact(history, keep=6):
class="s">""class="s">"Replace everything but the last `keep` turns with one summary turn."class="s">""
if len(history) <= keep:
return history
old, recent = history[:-keep], history[-keep:]
summary = summarise(old) class=class="s">"c"># one cheap Haiku call
return [{class="s">"role": class="s">"user", class="s">"content": fclass="s">"Summary of earlier discussion: {summary}"}] + recent
Effectuez la synthèse avec un modèle peu coûteux. Il s’agit d’une tâche de compression, pas de raisonnement.
Les résultats des outils sont généralement en cause
- Un outil qui renvoie 500 lignes ajoute 500 lignes à chaque requête ultérieure. Limitez le nombre de lignes, ou renvoyez un résumé accompagné d’une référence permettant de récupérer les détails à la demande.
- Le contenu intégral des fichiers lus par un agent reste dans le contexte. Lisez la section dont vous avez besoin, pas le fichier entier.
- Les captures d’écran et les images sont renvoyées comme tout autre contenu : retirez-les une fois décrites.
- Journaux de compilation et traces de pile : conservez les 50 premières et dernières lignes, et supprimez le reste.
/clear.