Une boucle d’agent est plus simple que sa réputation : quelques dizaines de lignes suffisent. Savoir l’écrire de mémoire est un exercice fréquent en entretien.
Le déroulé
- On envoie au modèle l’objectif, l’historique et la liste des outils disponibles avec leur schéma d’arguments.
- Le modèle répond soit par un texte final, soit par une demande d’appel d’outil structurée.
- Si c’est un texte final, on s’arrête et on le retourne.
- Si c’est un appel d’outil, votre code l’exécute, et ajoute à l’historique la demande et son résultat.
- On retourne à l’étape 1.
Le point important : le modèle n’exécute rien. Il émet une intention structurée, et votre code décide de l’honorer ou pas. C’est là que passent tous les contrôles.
Ce qui constitue l’historique
À chaque tour, le contexte envoyé contient l’invite système, l’objectif, puis l’alternance des demandes d’outils et de leurs résultats. Le modèle est sans état : c’est cet historique reconstitué à chaque appel qui lui donne l’impression de continuité.
Conséquence directe et souvent sous-estimée : le contexte grossit à chaque tour, et avec lui le coût et la latence. Un agent à vingt tours peut coûter cent fois un appel simple, parce qu’il relit tout à chaque fois.
Les conditions d’arrêt, qui sont le vrai sujet
Une boucle sans garde-fous ne finit pas toujours. Il en faut plusieurs, simultanément :
- Un nombre maximal de tours. Non négociable. Dix à vingt pour la plupart des tâches.
- Un budget de jetons ou d’argent, vérifié à chaque tour.
- Un délai maximal, sur l’ensemble de l’exécution et non par appel.
- La détection de répétition : le même outil, avec les mêmes arguments, deux fois de suite, signale que l’agent est bloqué. On interrompt plutôt que d’attendre le plafond.
- Une sortie explicite en cas d’échec. L’agent doit pouvoir déclarer qu’il n’y arrive pas. Sans cette issue, il persiste et invente.
Un candidat qui mentionne les quatre premiers points a répondu correctement ; celui qui mentionne les deux derniers a déjà exploité un agent en production.
Ce qu’il faut ajouter pour que ce soit exploitable
- La journalisation de chaque tour : décision, arguments, résultat, jetons consommés. Sans cette trace, un agent est indéboguable — c’est la première chose que je construis, avant même le deuxième outil.
- Le traitement des erreurs d’outil : renvoyer le message d’erreur au modèle plutôt que de faire échouer la boucle. Un agent corrige souvent son appel au tour suivant.
- L’exécution en parallèle des appels indépendants, quand le modèle en demande plusieurs à la fois.