Le Planning Pattern (ReAct) : donner une stratégie aux agents

IA
Agents
LLM
Patterns
Découvrez le Planning Pattern et la technique ReAct : comment permettre à un agent de planifier une séquence d’actions pour atteindre un objectif complexe.
Date de publication

28 mai 2025

Dans les leçons précédentes, nous avons appris comment les agents peuvent réfléchir et utiliser des outils pour interagir avec le monde extérieur. Mais qu’en est-il de la planification ? Comment les agents peuvent-ils déterminer la séquence d’étapes nécessaire pour atteindre un objectif plus large ?

C’est là qu’intervient le Planning Pattern. Il permet à un LLM de décomposer une tâche complexe en sous-objectifs plus petits et gérables sans perdre de vue l’objectif global.

La technique ReAct — contraction de Reason + Act (Raisonner + Agir) — est un exemple paradigmatique de ce pattern. Dans cette leçon, vous apprendrez comment cette technique fonctionne et implémenterez un Agent ReAct de zéro en utilisant Python et les LLM de Groq.

C’est parti ! 👇

Le Planning Pattern ReAct

Le Planning Pattern ReAct

Ceci est la troisième leçon du cours Agentic Patterns from Scratch. Cette leçon s’appuie sur la théorie et le code abordés dans les précédentes, alors n’oubliez pas de les consulter si ce n’est pas déjà fait !


Le System Prompt ReAct

Tout comme pour le pattern d’utilisation d’outils, la technique ReAct nécessite un System Prompt. Ce prompt est assez similaire, mais il décrit également la boucle ReAct pour s’assurer que le LLM comprend les trois opérations qu’il est autorisé à effectuer :

  • Thought (Pensée) : Le LLM va réfléchir à l’action à entreprendre.
  • Action : Le LLM va utiliser un Outil pour interagir avec l’environnement et passer à l’action.
  • Observation : Le LLM va observer la sortie de l’outil et réfléchir à la prochaine étape.

Une autre différence clé par rapport au pattern d’utilisation d’outils est que nous allons encadrer tous les messages dans des balises, comme ceci : < >. Bien qu’il soit possible d’implémenter la logique ReAct sans ces balises, j’ai trouvé qu’elles facilitaient le respect des instructions par le LLM.

Assez de théorie ! Voici le prompt 👇

System Prompt ReAct

System Prompt ReAct

Si vous regardez le prompt, vous remarquerez que nous avons besoin d’un ensemble d’outils, qui sont encadrés par les balises <tools></tools>. L’exemple que nous allons construire implique l’utilisation de trois outils, comme le montre l’extrait de code ci-dessous.

Les trois outils mathématiques

Les trois outils mathématiques

Rappelez-vous que le décorateur d’outil — implémenté dans la leçon précédente — nous permet de convertir automatiquement n’importe quelle fonction Python en un Outil. Ensuite, nous concaténons simplement les signatures des outils et les ajoutons au System Prompt.

Concatenation des signatures

Concatenation des signatures

Avec le System Prompt complet, il est temps de commencer la première itération de la boucle ReAct !


Boucle ReAct : Choisir le premier outil

La question à laquelle nous allons répondre est la suivante :

Je veux calculer la somme de 1234 et 5678 et multiplier le résultat par 5. Ensuite, je veux prendre le logarithme de ce résultat.

Comme vous pouvez le voir, la question est facilement résolue en utilisant les outils fournis dans le bon ordre, mais l’agent peut-il faire de même ? Générons la première complétion pour le découvrir.

Première complétion

Première complétion

La sortie générée est un et un , qui indiquent à l’Agent quel outil utiliser.

Thought et Tool Call

Thought et Tool Call

Boucle ReAct : Exécuter le premier outil

Puisque nous avons le , il est très facile d’évaluer l’Outil pour obtenir le résultat — c’est essentiellement l’action que l’agent va entreprendre.

Évaluation de l’outil

Évaluation de l’outil

Le résultat de l’outil est simplement la somme de 1234 et 5678, soit 6912.


Boucle ReAct : Choisir le deuxième outil

Si vous regardez de près le contenu que nous avons ajouté au chat_history, vous remarquerez qu’on inclut le résultat de l’outil (6912) comme une . Cela permet au LLM de réfléchir, une fois de plus, au prochain outil à utiliser.

En lançant une complétion comme précédemment, nous devrions obtenir quelque chose comme ceci, où le LLM sélectionne correctement l’outil de multiplication pour multiplier le résultat précédent par 5.

Choix du deuxième outil

Choix du deuxième outil

On procède exactement de la même manière pour l’exécution. Le résultat de l’outil dans ce cas est 34560.


Boucle ReAct : Choisir le troisième outil

Après avoir lancé la complétion suivante, nous obtenons la sortie suivante :

Choix du troisième outil

Choix du troisième outil

Après avoir calculé la somme et la multiplication, la seule opération restante est le logarithme, implémenté dans l’outil compute_log.


Boucle ReAct : Résultat final

Après avoir exécuté l’outil de logarithme et ajouté le résultat au chat_history, il est temps de lancer la dernière complétion. La sortie générée contiendra une balise , qui marque la fin de la boucle et contient la réponse finale.

Réponse finale

Réponse finale

Notre LLM affiche 10.45. Et c’est… correct ! — si vous ne me croyez pas, n’hésitez pas à vérifier avec votre calculatrice 😂


L’Agent ReAct

Comme dans les posts précédents, vous pouvez obtenir les mêmes résultats en utilisant ma bibliothèque agentic_patterns, qui implémente le code ci-dessus de “la bonne manière”.

J’ai créé une classe ReactAgent qui encapsule la boucle ReAct, acceptant une liste d’outils disponibles. Découvrez-la ici !

ReactAgent avec la library agentic_patterns

ReactAgent avec la library agentic_patterns

Pourquoi ça marche si bien ?

  • Décomposition des tâches : L’agent ne s’attaque pas au problème global d’un coup, il avance étape par étape.
  • Auto-réflexion continue : À chaque étape, l’agent observe le résultat et ajuste sa pensée.
  • Modularité : La boucle ReAct peut intégrer n’importe quel nombre d’outils pour des workflows complexes.

Prochaines étapes

La prochaine leçon nous parlerons du MultiAgent Pattern.

Ressources

Retour au sommet