Aller au contenu principal

Boucles d'agent bornées

Une boucle n'est utile que si le progrès et l'arrêt sont observables :

lire l'état → choisir une action → exécuter → examiner la preuve → mettre à jour → arrêter ou reprendre

La difficulté n'est pas la répétition, mais l'état conservé entre les tours et la preuve qu'un tour supplémentaire vaut la peine.

Quatre formes utiles

  1. Boucle d'outils dans une session. Une conversation alterne appels et résultats. Elle conserve les nuances mais accumule l'historique, les fausses pistes et le risque d'un succès autodéclaré. À réserver aux explorations courtes avec une limite de tours.
  2. Boucle à contexte neuf. Chaque itération relance le modèle et lit une consigne, des résultats de tests et un journal durable. Parfois appelée « Ralph loop » dans un script shell, elle remplace la mémoire conversationnelle par la reproductibilité. Un redémarrage ne corrige pas un objectif vague ou un journal obsolète.
  3. Boucle implémenter–vérifier. Le modèle fait un changement borné, puis une commande externe décide : implémenter → lint/test → diagnostiquer → réparer. Les codes de sortie, assertions, schémas et diffs priment sur le récit du modèle.
  4. Boucle évaluateur–optimiseur. Un worker produit, un évaluateur indépendant renvoie des défauts structurés, puis le worker ne corrige que ceux-ci. Une rubrique et une limite de périmètre sont indispensables.

Conditions d'arrêt

Toute boucle automatisée exige un prédicat de succès externe, des plafonds de tours/temps/tokens/coût, une règle d'absence de progrès, une limite de diff ou d'effets, un état d'escalade, l'annulation et un checkpoint récupérable. « Continuer jusqu'à la fin » n'est pas une politique d'arrêt.

objective: les tests passent sans modifier l'API publique
attempt: 3
last_action: correction de la limite du parseur
verification: pytest tests/test_parser.py -q
result: échec, 1 assertion
next: examiner le cas de troncature UTF-8
blocked: false

Conserver décisions, commandes, artefacts, échecs et prochain contrôle, pas un long raisonnement caché. Les petits modèles locaux profitent de tours plus courts, de moins d'outils, de cibles précises et de vérificateurs déterministes. Davantage d'itérations ne compense pas un modèle incapable d'utiliser les outils requis.