Historique des conversations
Une longue conversation finit par se heurter à un mur : la fenêtre de contexte du modèle. Tout ce qui figure sur cette page existe à cause de ce mur, et ce qui est intéressant, c’est ce qui est jeté, ce qui est conservé et ce qu’on peut récupérer.
Quatre façons de récupérer du contexte
Section intitulée « Quatre façons de récupérer du contexte »Ce ne sont pas tant des solutions de rechange qu’une échelle, classée du moins cher au plus cher.
| Mécanisme | Coût | Conserve | Perd |
|---|---|---|---|
| Élision | Rien | Chaque mot du récit | Les anciens résultats d’outils anodins |
| Abandon des images | Rien | Le texte qui les entoure | Les anciennes captures d’écran |
| Instantanés | Rien | Chaque mot, sous forme de pixels | La lisibilité pour un modèle sans vision |
| Résumé | Un appel de modèle | Un récit | Les détails qu’il n’a pas retenus |
L’élision et l’abandon des images passent en premier parce qu’ils sont gratuits et sans perte là où ça compte : ils suppriment du volume que personne n’allait relire.
Pourquoi le résumé est la solution de dernier recours
Section intitulée « Pourquoi le résumé est la solution de dernier recours »Un résumé est le seul des quatre qui dépense un appel de modèle et le seul qui décide à votre place de ce qui comptait. Ce sont deux coûts bien réels. L’appel est le plus intéressant des deux, à cause du moment où il survient.
Le compactage s’exécute généralement avant le mur, sur un seuil. Mais il s’exécute aussi de façon réactive, après que le fournisseur a lui-même rejeté une requête jugée trop volumineuse — l’estimation heuristique avait sous-estimé ce que le fournisseur a réellement mesuré. Dans ce cas, un compacteur qui résume doit émettre une requête pour réduire le contexte, et la requête qu’il émet est justement celle qui vient de dépasser.
Instantanés
Section intitulée « Instantanés »Le compactage par instantanés rend l’historique écarté sur des pages denses de glyphes en pixels et les renvoie sous forme d’images.
Le principe repose sur une particularité de facturation : un modèle de vision facture une image à un tarif forfaitaire ou proportionnel à sa surface, sans aucun rapport avec le nombre de caractères qu’elle contient. Douze mille caractères de conversation écartée coûtent la valeur en jetons de texte de douze mille caractères. Les mêmes caractères rendus sur une seule page coûtent une image.
Ce qui la rend utile, et pas seulement astucieuse, c’est qu’elle ne nécessite aucun appel de modèle, aucune clé et aucun accès réseau. C’est la seule stratégie qui reste toujours disponible pendant la reprise après dépassement.
La forme de reconstruction est la suivante : tête mot pour mot, milieu imagé, queue mot pour mot. La tête, c’est la tâche et les contraintes auxquelles tout ce qui suit se réfère ; la queue, c’est là où se trouve actuellement le travail. Le milieu est ce qui est relu le moins souvent et ce qui coûte le plus cher.
Les instantanés sont rendus à nouveau à partir du texte source conservé à chaque passe, jamais à partir des pixels de la passe précédente. Le fait d’imager une image dégrade les glyphes d’une génération par compactage, jusqu’à ce que plus personne ne puisse les lire.
Ce à partir de quoi une exécution reprend réellement
Section intitulée « Ce à partir de quoi une exécution reprend réellement »Historiquement, chaque exécution du harnais partait d’un historique vide et reconstruisait la continuité à partir d’un bloc <context> du prompt — un résumé de la conversation plutôt que la conversation. Trois conséquences en découlaient :
- La reprise était une redite. Le modèle ne voyait jamais son propre raisonnement antérieur ni les octets réellement renvoyés par ses outils, seulement leur description.
- Le retour en arrière mourait avec le processus. Un
checkpointest un index dans la liste des messages en direct : un redémarrage perdait donc toutes les étiquettes que le modèle avait posées. - La relance ne distinguait pas « rien à relancer » de « rien de chargé ». Après un redémarrage, le tour échoué a de toute façon disparu de l’état en direct.
Ces trois points sont corrigés en conservant la transcription de la conversation. Elle est enregistrée à chaque limite de tour, jamais au milieu d’un tour : un historique capturé entre un appel d’outil et son résultat est un historique qu’aucun fournisseur n’acceptera, si bien qu’un plantage à cet instant restaure le tour précédent plutôt qu’un demi-tour impossible à rejouer.
Une exécution reprise est tronquée à ses messages les plus récents, avec une coupure sur une limite qui n’est pas un résultat d’outil orphelin — un résultat dont l’appel a été tronqué est une requête que les fournisseurs rejettent d’emblée, et une transcription impossible à envoyer vaut moins qu’une transcription courte.
L’arbre de session
Section intitulée « L’arbre de session »Chaque message enregistre celui dont il découle, et chaque conversation nomme sa pointe de branche actuelle. Cette seule décision constitue toute la fonctionnalité.
Créer une branche n’écrit rien. Cela déplace le pointeur. Le chemin que vous avez quitté est toujours là, si bien y revenir est un autre déplacement de pointeur plutôt qu’une restauration — et modifier un prompt pour le relancer cesse de vous coûter la réponse à laquelle vous vous compariez.
Sans cela, toute forme de retour en arrière doit masquer ou supprimer des messages, et le masquage est un mensonge que le lecteur suivant ne peut pas percer.
Branche ou duplication
Section intitulée « Branche ou duplication »| Branche | Duplication | |
|---|---|---|
| Ce qui se passe | Le pointeur se déplace | Le chemin est copié |
| Où cela mène | La même conversation | Une nouvelle conversation |
| Coût | Rien | Une copie de la branche |
Une duplication copie avec de nouveaux identifiants plutôt que de partager des lignes. Deux conversations qui partageraient des lignes se montreraient mutuellement leurs messages ultérieurs, exactement ce qu’une duplication ne doit surtout pas faire.
Le retour en arrière emprunte le même pointeur
Section intitulée « Le retour en arrière emprunte le même pointeur »La paire checkpoint / rewind en cours d’exécution marque une limite de tour propre et y revient après une exploration, en conservant une synthèse. Parce que les points de contrôle sont conservés aux côtés de la transcription, une étiquette posée par le modèle avant un redémarrage retombe encore là où elle a été posée. Un point de contrôle dont la cible n’a pas survécu à une troncature est abandonné, et non ramené de force — revenir « à l’étiquette » et atterrir ailleurs est exactement la défaillance qu’une étiquette existe pour empêcher.
Voir aussi
Section intitulée « Voir aussi »- Créer une branche de conversation — le navigateur d’arborescence, la duplication et l’export
- Contexte des outils et cache de prompts — l’autre moitié de ce qui remplit une fenêtre de contexte
- Commandes slash —
/compact,/shake,/context,/tree