Jusqu'ici, nous avons parlé des agents comme d'un système qui :
- a un objectif
- essaie d'agir
- vérifie le résultat
- et essaie encore si ça ne marche pas
Mais ça sonne encore comme de la théorie.
Alors écrivons maintenant l'agent le plus simple qui fonctionne vraiment.
Sans frameworks. Sans mémoire. Sans logique complexe.
Juste une boucle.
Imagine un agent comme un enfant

Un enfant veut ouvrir une porte.
Il :
- essaie la poignée -> ça ne s'ouvre pas
- essaie plus fort -> ça ne marche pas
- essaie encore -> ouverte !
Un agent fonctionne pareil. Il ne "pense" pas au sens humain.
Il fait simplement :
-> Essaye
-> Regarde ce qui s'est passé
-> Change l'action
-> Réessaie
Tâche pour l'agent
Donnons à l'agent une tâche simple :
Écrire un nombre supérieur à 10
Mais faisons-le de façon maligne. Au lieu du modèle, on commence avec random pour voir la mécanique sans bruit inutile.
Parfois l'agent obtient 3, parfois 7, parfois 15. Il doit faire la différence et soit s'arrêter, soit réessayer.
Code : agent sans LLM
import random
goal = 10
max_steps = 5
for step in range(max_steps):
print(f"\n🤖 Step {step + 1}: Agent is trying...")
# Le "modèle" génère une réponse
number = random.randint(1, 20)
print(f"💬 Generated: {number}")
if number > goal:
print(f"✅ Goal reached! {number} > {goal}")
break
else:
print(f"❌ Not enough. {number} ≤ {goal}. Trying again...")
else:
print("\n⚠️ Max steps reached without success")
Lance-le plusieurs fois. Regarde comment l'agent décide seul de continuer ou de s'arrêter.
Ce qui se passe ici
- L'agent reçoit un objectif - trouver un nombre > 10
- Essaie - "génère" une réponse
- Vérifie - est-ce que l'objectif est atteint ?
- Si non - il réessaie (maximum 5 fois)
- Si oui - il s'arrête
C'est toute la boucle :
Modèle vs Agent
| Modèle | Agent | |
|---|---|---|
| Génère une réponse | ✅ | ❌ |
| Vérifie le résultat | ❌ | ✅ |
| Décide quoi faire ensuite | ❌ | ✅ |
Le modèle est responsable de Act.
L'agent est responsable de Check -> Retry -> Stop.
Pourquoi c'est déjà un agent, et pas juste une fonction ?
Une fonction ferait une seule tentative, puis c'est tout.
Un agent :
- a un objectif
- vérifie le résultat
- peut agir à nouveau sans ta participation
Tu donnes la tâche, et il travaille tout seul. Même s'il se trompe.
Et si on branche une vraie LLM ?
Remplacer random.randint() par un appel AI API, c'est un seul changement.
La boucle d'agent reste exactement la même.
C'est tout le point : un agent, ce n'est pas un "modèle intelligent". C'est la structure : objectif -> action -> vérification -> répétition.
En bref
Tu viens de comprendre la boucle de base d'un agent :
- Objectif - trouver un nombre > 10
- Act - génère une réponse
- Check - objectif atteint ?
- Retry - si nécessaire
- Stop - quand l'objectif est atteint ou les étapes épuisées
C'est le fondement. Tout le reste est une complexification de ce schéma.
FAQ
Q : Pourquoi max_steps = 5 ici, et pas une boucle infinie ?
A : Un agent qui ne s'arrête pas tout seul est dangereux. Il peut dépenser de l'argent en appels API, rester bloqué dans une boucle, ou tourner indéfiniment si l'objectif est inatteignable. max_steps est une protection.
Q : Pourquoi commencer avec random au lieu d'utiliser une LLM tout de suite ?
A : Pour voir la mécanique de l'agent sans bruit inutile. Le modèle n'est qu'un détail. La boucle est plus importante.
Q : Pourquoi l'agent ne sait pas que le nombre est "mauvais" avant la vérification ?
A : Le modèle ne fait que générer. Il ne connaît pas l'objectif. L'objectif est la responsabilité de l'agent, pas du modèle.
Et ensuite
Tu as remarqué max_steps = 5 ?
Ce n'est pas un hasard. Un agent qui ne s'arrête pas tout seul peut :
- tourner à l'infini
- dépenser de l'argent en appels API
- rester bloqué dans une boucle si l'objectif est inatteignable
C'est pour cela que chaque agent doit avoir des limites.
-> Lire la suite : Quand un agent a besoin de limites
Tu veux l'exécuter toi-même ?
Si tu veux voir une implémentation complète avec une vraie LLM, découpée en modules et prête à lancer, elle est ici :