Plan-and-Solve Prompting
Architecture agentique en deux étapes qui sépare la décomposition stratégique de la tâche, sous forme d'un plan global, de son exécution tactique séquentielle avec replanification dynamique.
1. Vue d'ensemble du concept et problème systémique
Lorsqu'un développeur confie une tâche d'ingénierie complexe à une IA (par exemple, « réécrire le module d'authentification de JWT vers des sessions en base de données »), la réaction impulsive de l'agent consiste souvent à modifier immédiatement un fichier au hasard.
Cette approche purement réactive engendre des dysfonctionnements critiques :
- Violation de l'ordre des dépendances : L'agent modifie un composant d'interface avant d'avoir mis à jour le schéma de la base de données ou créé les types TypeScript nécessaires.
- Corrections cycliques : Le modèle corrige une erreur, ce qui casse un autre fichier lié, et se retrouve piégé dans un cycle infini de corrections syntaxiques sans comprendre la vue d'ensemble.
- Perte de l'objectif initial : Après 10 étapes de débogage, le contexte est saturé par les messages du compilateur, et le modèle oublie la demande initiale de l'utilisateur.
Plan-and-Solve résout ce problème grâce au principe classique d'ingénierie : la séparation entre la conception stratégique (Planning) et la réalisation tactique (Execution).
2. Taxonomie architecturale et modèle mental
Le pattern s'articule autour de trois phases complémentaires :
- 1. Phase de découverte et de planification (Discovery & Planner Phase) : L'agent analyse la requête, effectue une lecture préalable du système de fichiers (Read-Only) et génère un graphe d'actions clairement structuré : un tableau d'étapes spécifiant les objectifs, les critères de succès et les fichiers requis.
- 2. Phase d'exécution des étapes (Solver / Execution Phase) : Un exécutant spécialisé prend en charge le premier point ouvert du plan, appelle les outils nécessaires (édition de fichiers, lancement de builds), vérifie la sous-tâche accomplie et marque le point comme terminé.
- 3. Phase de replanification dynamique (Replanning & Feedback Phase) : Si une erreur survient lors de l'exécution d'une étape et qu'elle ne peut être résolue par une simple répétition (par exemple, détection d'un module manquant dans le système), le replanner révise les points restants du plan en ajoutant une étape pour installer les dépendances manquantes.
3. Pipeline technique et mécanique interne
Le cycle de vie selon le pattern Plan-and-Solve :
- Plan Generation (Génération d'un plan structuré) :
Le modèle produit un objet JSON valide contenant un tableau de tâches :
tasks: [{ id: 1, title: "DB Schema", status: "pending" }, { id: 2, title: "API Route", status: "pending" }]. - State Injection (Initialisation du tracker) : Le plan est injecté dans l'état de l'agent. L'utilisateur visualise la progression via une checklist interactive.
- Execution Loop (Itération séquentielle) :
L'orchestrateur sélectionne la prochaine tâche avec le statut
pending. Le contexte est nettoyé des détails obsolètes de débogage, se concentrant uniquement sur la tâche courante et l'objectif final. - Invariant Check & Status Transition (Contrôle des invariants) :
À la fin d'une étape, un linter ou un test unitaire est lancé. Si la vérification réussit, le statut passe à
completed. Sinon, la méthodereplan()est appelée pour ajuster les étapes non réalisées.
4. Scénarios d'ingénierie pratiques en production
01. Migration complexe de la base de code
Passage d'un projet Next.js Pages Router à App Router :
- Étape 1 : Audit de la structure du dossier
pages/et identification des Layouts communs. - Étape 2 : Création du
app/layout.tsxracine et des styles de base. - Étape 3 : Transfert progressif des pages statiques.
- Étape 4 : Réécriture des routes dynamiques et des API Routes dans
route.ts. - Étape 5 : Build complet du projet et suppression des fichiers obsolètes.
02. Développement piloté par spécifications (Spec-Driven Development)
L'agent reçoit une exigence métier. Il rédige d'abord la documentation et les schémas Zod, les valide avec l'utilisateur, puis génère par étapes le backend, les hooks clients et les composants UI uniquement après approbation.
03. Déploiement infrastructure serveur
Durcissement progressif d'un VPS Linux :
- Génération d'un plan en 6 étapes (clés SSH, firewall UFW, fail2ban, mise à jour des paquets, création d'un utilisateur non-root, désactivation de l'accès par mot de passe).
- Chaque point est exécuté individuellement avec une vérification obligatoire de l'état du port avant de couper la méthode de connexion précédente.
5. Pièges, erreurs courantes et sécurité
- Planification prématurée (Premature Planning) : Élaborer un plan sans analyse préalable des fichiers du repository. Le modèle risque de prévoir l'utilisation de bibliothèques absentes du projet. Solution : imposer une phase « Discovery » avant le lancement du planificateur.
- Rigidité excessive du plan (Plan Rigidity) : L'agent tente obstinément d'exécuter l'Étape 3 alors que l'Étape 1 a révélé que l'architecture nécessite une approche fondamentalement différente. Implémentez impérativement des hooks de replanification dynamique.
- Micro-management sur 30 étapes : Des étapes trop granulaires (par exemple, une étape distincte pour chaque import de type) consomment temps et ressources financières inutilement. Maintenez le niveau d'abstraction au niveau des blocs fonctionnels logiques.
FAQ: Plan-and-Solve Prompting
Termes associés
Modèle ReAct (Raisonnement + Action)
Modèle algorithmique fondamental pour les agents autonomes, alternant entre des étapes de raisonnement interne (Thought), l'exécution d'outils externes (Action) et l'analyse du résultat obtenu (Observation).
Développement piloté par les spécifications (SDD)
Une méthodologie d'ingénierie logicielle de l'ère de l'IA où la création, l'alignement et la fixation d'une spécification structurée et lisible par machine précèdent obligatoirement la génération de code.
Boucle autonome (mode /goal)
Modèle architectural de boucle fermée d'exécution des tâches, dans lequel l'agent alterne de manière autonome entre la génération de code, le lancement de commandes et la vérification des résultats jusqu'à l'atteinte complète de l'objectif défini.
Modèle de réflexion (Réflexion)
Modèle architectural visant à améliorer la fiabilité des agents, qui sépare le processus en génération de solution (Generator), audit critique (Critic) et raffinement itératif (Refiner).