Aller au contenu principal

Ingénierie du contexte pour les agents

L’ingénierie du contexte consiste à choisir les instructions, fichiers et résultats récents nécessaires à la prochaine action d’un agent, tout en maintenant des documents durables plutôt qu’en comptant sur le seul prompt. La fenêtre de contexte limite la quantité d’informations que le modèle peut recevoir à la fois ; elle ne garantit pas qu’il les exploitera toutes correctement. Lost in the Middle montre, par exemple, que la qualité de récupération peut dépendre de la position de l’information dans une longue entrée. L’objectif est de fournir des éléments pertinents et à jour, pas de remplir la fenêtre.

Cette page traite de l’ensemble de travail d’une tâche : ce que le modèle doit voir maintenant et ce qui peut rester hors de sa fenêtre. Recherche documentaire : découpage, rappel, reclassement et citations couvre la découverte des candidats ; Mémoire des agents : conservation, révision et péremption, la conservation et la révision entre tâches.

La précision des réponses diminue quand le passage contenant la réponse se trouve au milieu de vingt documents ; la ligne pointillée est la référence sans documents.Voir l’image en grand

L’axe horizontal déplace le passage contenant la réponse parmi 20 documents, soit environ 4 000 tokens. L’axe vertical mesure la précision des réponses, pas le rappel du moteur de recherche. Dans cette expérience avec GPT-3.5-Turbo-0613, les positions centrales donnent de moins bons résultats que les extrémités ; les pointillés représentent les réponses sans documents. Ce résultat invite à tester la position des preuves avec le modèle utilisé, sans généraliser cette courbe historique à tous les modèles.

Exemple de paquet de tâche​

Un paquet de tâche est une consigne compacte pour l’agent : ce que cette étape peut modifier, ce qui compte comme réussite, ce qui a déjà été tenté, quel code regarder et ce qui reste à trancher. Pour un analyseur qui échoue sur une séquence UTF-8 coupée, un paquet utile pourrait être :

contract:
write_scope: [src/parser.py, tests/test_parser.py]
success: targeted test and parser suite pass
state:
attempted: boundary check after byte slicing
result: still fails on a split multibyte code point
working_set:
- parser function and two callers
- three relevant tests
- exact traceback
open_question: should truncation operate on bytes or Unicode code points?

Le dépôt entier, le journal de tests complet et toutes les hypothèses antérieures seraient plus volumineux, mais pas nécessairement plus utiles.

Ce qui doit figurer dans le contexte​

Le contenu du contexte se répartit en cinq couches. Ce ne sont pas des étapes successives : elles coexistent et diffèrent par leur stabilité.

CoucheCe qu’elle contientDans l’exemple de l’analyseur UTF-8Entre dans le prompt ?
Contrat stableautorité et permissionsécriture limitée à src/parser.py et tests/test_parser.pyoui
Paquet de tâcheobjectif et contraintesle test ciblé et la suite de l’analyseur doivent passer ; question ouverte : tronquer par octets ou par points de codeoui
Ensemble de travailcode et définitions pertinentsla fonction d’analyse, deux appelants, trois tests pertinentsoui
Observations récentesrésultats d’outils bornésla trace d’erreur exacteoui
État durablerelevés sur disque et points de repriserelevé indiquant que « la vérification des limites après découpage en octets échoue toujours sur un point de code multioctet coupé »reste dehors, chargé au besoin

Les quatre premières couches peuvent entrer dans le prompt. L’état durable reste hors du prompt ; les éléments nécessaires y sont réintroduits au besoin. Une transcription est un historique d’interaction, pas la source de vérité du projet.

Sélectionner avant de compresser​

Recherchez des symboles, sites d’appel, tests, définitions et preuves exactes avant de demander à un modèle de résumer quoi que ce soit. Un résumé ne peut pas retrouver un élément qui n’a jamais été récupéré, et des résumés répétés peuvent transformer discrètement une supposition en fait.

L’entrée que l’on peut placer vaut la limite du modèle, moins la place réservée à la sortie, moins ce qu’occupent les définitions d’outils et les schémas, moins une marge de sécurité :

entreˊe utilisable=limite du modeˋle−sortie reˊserveˊe−couˆt des outils et scheˊmas−marge de seˊcuriteˊ.\text{entrée utilisable}=\text{limite du modèle}-\text{sortie réservée}-\text{coût des outils et schémas}-\text{marge de sécurité}.

Avec des chiffres : une fenêtre de 128K tokens, 8K réservés à la sortie, 6K pour les définitions d’outils et une marge de 4K donnent 128K − 8K − 6K − 4K = 110K, soit environ 110K tokens d’entrée.

Il n’existe pas de pourcentage universel pour les règles, les preuves et la sortie. C’est l’action suivante qui doit déterminer le paquet. Les modèles locaux doivent aussi compter avec le cache KV : les résultats intermédiaires que le modèle conserve pour chaque token déjà lu, qui occupent de plus en plus de mémoire à mesure que le contexte s’allonge. Les modèles locaux peuvent donc atteindre les limites du cache KV ou de mémoire avant que la limite de contexte annoncée ne devienne exploitable.

Comment garder l’ensemble de travail réduit​

TechniqueBon usageRisque principal
recherche exacte ou par symboleidentifiants et dépendances connusmanque les synonymes conceptuels
récupération dans un corpuslarge sélection de sourceserreurs de classement et documents hostiles ou périmés
résumé glissantclôturer des parties terminées d’une conversationperte de provenance et dérive du résumé
cache de promptpréfixes stables répétés pris en charge par le fournisseurune petite modification du préfixe peut invalider le cache
sortie d’outil bornéegrands journaux et résultats de commandesle contenu central omis peut contenir la cause
relevé de tâche sur disquesessions devant survivre à un redémarragele relevé et le dépôt peuvent diverger

Le cache de prompt fonctionne au mieux lorsque les instructions et schémas réellement stables restent inchangés. Les économies exactes dépendent du fournisseur, du modèle, de la forme de la requête et de la politique de cache ; mesurez-les plutôt que de reprendre un pourcentage accrocheur.

Les sorties volumineuses doivent être stockées intégralement et représentées dans le contexte par un extrait utile et une référence à l’artefact. Ne conserver que le début et la fin est une option, non la garantie que la ligne importante subsiste.

Compresser sans blanchir l’incertitude​

Un résumé doit conserver :

  • la source ou l’artefact étayant une affirmation ;
  • si l’énoncé a été observé, déduit ou seulement proposé ;
  • les tentatives échouées qui évitent de les répéter ;
  • les contradictions non résolues ;
  • la prochaine décision, et non chaque tour de conversation.

Un état structuré est souvent plus facile à examiner qu’un récapitulatif rédigé, mais il n’est pas juste automatiquement. Mettez-le à jour de façon atomique lorsque c’est possible et comparez-le aux fichiers actuels lors de la reprise.

Tester une stratégie de contexte​

Déplacez les mêmes preuves entre le début, le milieu et la fin. Ajoutez des documents non pertinents et contradictoires. Incluez un cas où la bonne réponse est « preuves insuffisantes ». Mesurez la réussite de la tâche, les contraintes manquées, l’attribution, la latence et l’usage de tokens.

Cinq échecs reviennent souvent dans ces tests. Dans l’exemple de l’analyseur UTF-8, ils se présentent ainsi :

ÉchecCe que l’on observe
bourrage de contextele dépôt entier et le journal de tests complet sont chargés, et la seule trace d’erreur utile s’y noie
biais de récencele modèle se fixe sur la dernière sortie d’outil et oublie le périmètre d’écriture posé au départ
dérive du résuméau troisième résumé, « c’est peut-être un problème d’encodage » est devenu « c’est un problème d’encodage »
biais de récupérationla recherche ne renvoie que les fichiers contenant utf-8, et la fonction qui tronque réellement par octets n’est jamais trouvée
dépendance à l’état cachél’étape suivante repose sur une conclusion apparue seulement dans une conversation antérieure, jamais inscrite dans le relevé de tâche, si bien qu’un contexte neuf la perd

Le remède consiste généralement à retirer le contenu non pertinent, à récupérer de meilleures preuves ou à sortir l’état durable du prompt.

Explorer les liensOuvrir le réseau