Anatomie d'une boucle agentique simple
Les briques minimales d'un agent
Un agent, même simple, nécessite quatre éléments : un modèle (Claude, GPT, Gemini, ou un modèle local), une liste d'outils disponibles, une boucle d'exécution, et un critère d'arrêt.
# Pseudo-code générique, transposable à la plupart des SDK
outils = [rechercher_ticket, envoyer_email, consulter_base]
messages = [{"role": "user", "content": objectif_utilisateur}]
while not termine:
reponse = appeler_modele(messages, outils)
if reponse.contient_appel_outil():
resultat = executer_outil(reponse.outil, reponse.parametres)
messages.append({"role": "outil", "content": resultat})
else:
termine = True
reponse_finale = reponse.texte
Ce squelette est conceptuellement identique que l'on utilise le SDK Claude (Anthropic), l'API OpenAI (function calling), l'API Gemini, ou un framework open-source comme LangChain avec un modèle Llama ou Mistral : seuls la syntaxe et les détails d'implémentation changent.
Le critère d'arrêt : essentiel et souvent négligé
Sans critère d'arrêt clair, un agent peut tourner indéfiniment. Les critères courants : le modèle indique explicitement qu'il a terminé, un nombre maximum d'itérations est atteint, ou une condition métier précise est satisfaite (ex. "le ticket est passé au statut résolu").
Gérer les erreurs d'outil
try:
resultat = executer_outil(reponse.outil, reponse.parametres)
except ErreurOutil as e:
resultat = f"Erreur : {e}. Réessaie avec d'autres paramètres ou une autre approche."
Renvoyer une erreur claire au modèle, plutôt que de faire planter tout le programme, lui permet souvent de s'adapter et de trouver une autre approche, exactement comme un humain ajusterait sa stratégie après un échec.
Cas concret
Un premier agent construit pour automatiser le tri de tickets tourne indéfiniment sur un cas limite, car son critère d'arrêt ("le modèle a fini") n'est jamais atteint pour ce type de ticket ambigu. Ajouter une limite explicite de 10 itérations maximum, avec remontée automatique à un humain en cas de dépassement, transforme un bug potentiellement coûteux en un comportement prévisible et maîtrisé.
Erreurs fréquentes
- Ne définir aucune limite d'itérations explicite, exposant l'agent au risque de boucle infinie coûteuse en cas d'objectif mal formulé ou de cas limite imprévu.
- Faire planter tout le programme sur une erreur d'outil au lieu de la renvoyer proprement au modèle, qui peut souvent s'adapter avec cette information.
- Coder la boucle agentique de façon spécifique à un seul fournisseur sans anticiper qu'un changement de modèle futur pourrait nécessiter une réécriture complète, alors qu'une architecture bien pensée limite ce couplage.
À retenir
- Une boucle agentique minimale nécessite un modèle, des outils, une boucle d'exécution, et un critère d'arrêt explicite.
- Le squelette conceptuel est identique entre les différents fournisseurs (Claude, GPT, Gemini, modèles open-weight), seule l'implémentation technique varie.
- Renvoyer les erreurs d'outil au modèle plutôt que de faire planter le programme lui permet souvent de s'adapter et de continuer.
Mini-exercice
Un agent construit pour automatiser une tâche répétitive n'a aucune limite d'itérations définie. Quel risque cela présente-t-il, et quelle correction apporter ?
Réponse : risque de boucle infinie si le critère d'arrêt naturel n'est jamais atteint sur un cas limite imprévu. Correction : ajouter une limite explicite du nombre d'itérations, avec une remontée claire (à un humain ou un message d'échec explicite) en cas de dépassement.