{"id":11991,"date":"2026-02-09T03:51:14","date_gmt":"2026-02-09T02:51:14","guid":{"rendered":"https:\/\/inforeole.fr\/?p=11991"},"modified":"2026-02-10T01:04:38","modified_gmt":"2026-02-10T00:04:38","slug":"design-pattern-planning","status":"publish","type":"post","link":"https:\/\/inforeole.fr\/design-pattern-planning\/","title":{"rendered":"design pattern planning"},"content":{"rendered":"\n<style>\n.routing-course-container {\n    max-width: 900px;\n    margin: 0 auto;\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n    color: #2c3e50;\n    line-height: 1.7;\n    padding: 0 15px;\n}\n\n.routing-course-container h2 {\n    color: #1a5276;\n    border-bottom: 3px solid #3498db;\n    padding-bottom: 8px;\n    margin-top: 40px;\n}\n\n.routing-course-container h3 {\n    color: #2c3e50;\n    margin-top: 25px;\n}\n\n.routing-course-container .intro {\n    background: linear-gradient(135deg, #ebf5fb, #d6eaf8);\n    padding: 20px 25px;\n    border-left: 5px solid #3498db;\n    border-radius: 0 8px 8px 0;\n    font-size: 1.05em;\n    margin: 20px 0;\n}\n\n.routing-course-container .success {\n    background: #eafaf1;\n    border-left: 5px solid #27ae60;\n    padding: 15px 20px;\n    border-radius: 0 6px 6px 0;\n    margin: 15px 0;\n}\n\n.routing-course-container .warning {\n    background: #fef9e7;\n    border-left: 5px solid #f39c12;\n    padding: 15px 20px;\n    border-radius: 0 6px 6px 0;\n    margin: 15px 0;\n}\n\n.routing-course-container .info {\n    background: #eaf2f8;\n    border-left: 5px solid #2980b9;\n    padding: 15px 20px;\n    border-radius: 0 6px 6px 0;\n    margin: 15px 0;\n}\n\n.routing-course-container .diagram {\n    background: #f8f9fa;\n    border: 1px solid #dee2e6;\n    padding: 20px;\n    border-radius: 6px;\n    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n    font-size: 0.85em;\n    white-space: pre;\n    overflow-x: auto;\n    margin: 15px 0;\n    line-height: 1.4;\n}\n\n.routing-course-container .example-box {\n    background: #ffffff;\n    border: 2px solid #3498db;\n    padding: 20px;\n    border-radius: 8px;\n    margin: 20px 0;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n}\n\n.routing-course-container .example-box h3 {\n    color: #2980b9;\n    margin-top: 0;\n    border-bottom: 1px solid #ebf5fb;\n    padding-bottom: 8px;\n}\n\n.routing-course-container .prompt-box {\n    background: #fffbf0;\n    border: 2px solid #ffc107;\n    padding: 20px;\n    border-radius: 6px;\n    margin: 20px 0;\n}\n\n.routing-course-container .prompt-box h4 {\n    margin-top: 0;\n    color: #f57c00;\n    border-bottom: 2px solid #ffc107;\n    padding-bottom: 8px;\n}\n\n.routing-course-container .prompt-box h5 {\n    font-size: 1em;\n    margin: 15px 0 8px 0;\n    color: #f57c00;\n    font-weight: 600;\n}\n\n.routing-course-container .prompt-box pre {\n    background: #f4f4f4;\n    border: 1px solid #ddd;\n    padding: 15px;\n    border-radius: 4px;\n    overflow-x: auto;\n    font-size: 0.9em;\n    line-height: 1.5;\n}\n\n.routing-course-container .prompt-box code {\n    background: #f4f4f4;\n    padding: 2px 6px;\n    border-radius: 3px;\n    font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n    color: #d63384;\n}\n\n.routing-course-container .prompt-box pre code {\n    background: transparent;\n    padding: 0;\n    color: #2c3e50;\n}\n\n.routing-course-container .grid-2 {\n    display: grid;\n    grid-template-columns: repeat(2, 1fr);\n    gap: 15px;\n    margin: 15px 0;\n}\n\n.routing-course-container .grid-3 {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 15px;\n    margin: 15px 0;\n}\n\n.routing-course-container .card {\n    background: #ffffff;\n    border: 1px solid #e0e0e0;\n    padding: 18px;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n}\n\n.routing-course-container .card h4 {\n    margin-top: 0;\n    color: #1a5276;\n}\n\n.routing-course-container table {\n    width: 100%;\n    border-collapse: collapse;\n    margin: 15px 0;\n    font-size: 0.95em;\n}\n\n.routing-course-container th {\n    background: #2c3e50;\n    color: white;\n    padding: 12px 15px;\n    text-align: left;\n}\n\n.routing-course-container td {\n    padding: 10px 15px;\n    border-bottom: 1px solid #ecf0f1;\n}\n\n.routing-course-container tr:nth-child(even) {\n    background: #f8f9fa;\n}\n\n.routing-course-container .badge {\n    display: inline-block;\n    padding: 3px 10px;\n    border-radius: 12px;\n    font-size: 0.8em;\n    font-weight: 600;\n    margin: 2px;\n}\n\n.routing-course-container .badge-green { background: #d5f5e3; color: #1e8449; }\n.routing-course-container .badge-red { background: #fadbd8; color: #c0392b; }\n.routing-course-container .badge-blue { background: #d6eaf8; color: #2471a3; }\n.routing-course-container .badge-orange { background: #fdebd0; color: #e67e22; }\n\n.routing-course-container .footer {\n    background: #2c3e50;\n    color: white;\n    padding: 20px;\n    border-radius: 8px;\n    text-align: center;\n    margin-top: 40px;\n}\n\n.routing-course-container .footer h3 {\n    color: white;\n    margin: 0;\n}\n\n.routing-course-container ul li, .routing-course-container ol li {\n    margin-bottom: 6px;\n}\n\n@media (max-width: 768px) {\n    .routing-course-container .grid-2,\n    .routing-course-container .grid-3 {\n        grid-template-columns: 1fr;\n    }\n    .routing-course-container .diagram {\n        font-size: 0.75em;\n    }\n    .routing-course-container table {\n        font-size: 0.85em;\n    }\n    .routing-course-container th, .routing-course-container td {\n        padding: 8px 10px;\n    }\n}\n<\/style>\n\n<div class=\"routing-course-container\">\n\n<!-- ============================================ -->\n<!-- SECTION 1 : INTRODUCTION                     -->\n<!-- ============================================ -->\n\n<p class=\"intro\">\nLe pattern <strong>Planning<\/strong> (Planification) permet \u00e0 un agent IA de d\u00e9composer un objectif complexe en un plan d&rsquo;\u00e9tapes ordonn\u00e9es <em>avant<\/em> de commencer \u00e0 agir. Au lieu d&rsquo;improviser au fil de l&rsquo;eau, l&rsquo;agent g\u00e9n\u00e8re d&rsquo;abord une feuille de route structur\u00e9e, puis ex\u00e9cute chaque \u00e9tape s\u00e9quentiellement \u2014 en adaptant le plan si n\u00e9cessaire. R\u00e9sultat : des t\u00e2ches multi-\u00e9tapes r\u00e9solues avec m\u00e9thode, tra\u00e7abilit\u00e9 et un taux de r\u00e9ussite nettement sup\u00e9rieur au mode \u00ab r\u00e9ponse directe \u00bb.\n<br><br>\n<a href=\"https:\/\/inforeole.fr\/agentic-design-patterns\/\">Voir la table des mati\u00e8res compl\u00e8te<\/a>\n<\/p>\n\n<!-- ============================================ -->\n<!-- SECTION 2 : LE CONCEPT EN UNE PHRASE         -->\n<!-- ============================================ -->\n\n<h2>1. Le Concept en Une Phrase<\/h2>\n\n<div class=\"success\">\n<strong>\ud83c\udfaf Essence :<\/strong> L&rsquo;agent r\u00e9fl\u00e9chit d&rsquo;abord (plan), agit ensuite (ex\u00e9cution), et corrige en cours de route (re-planification adaptative).\n<\/div>\n\n<div class=\"diagram\">\n[OBJECTIF COMPLEXE]\n        \u2502\n        \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502   PLANIFICATEUR  \u2502 \u2500\u2500 G\u00e9n\u00e8re un plan en N \u00e9tapes\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2502\n         \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  \u00c9tape 1        \u2502\u2500\u2500\u2500\u2500\u25b6\u2502  R\u00e9sultat 1      \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2502                      \u2502\n         \u25bc                      \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510     \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502  \u00c9tape 2        \u2502\u2500\u2500\u2500\u2500\u25b6\u2502  R\u00e9sultat 2      \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2502                      \u2502\n         \u25bc                      \u25bc\n   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510         \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n   \u2502  \u00c9tape N  \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502 R\u00c9SULTAT    \u2502\n   \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518         \u2502 FINAL       \u2502\n                         \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\n   \u27f2 Re-planification si une \u00e9tape \u00e9choue ou d\u00e9vie\n<\/div>\n\n<div class=\"grid-2\">\n<div class=\"card\">\n<h4>\ud83d\udcd0 Principe<\/h4>\n<p>S\u00e9parer la <strong>r\u00e9flexion strat\u00e9gique<\/strong> (quoi faire et dans quel ordre) de l&rsquo;<strong>ex\u00e9cution tactique<\/strong> (faire chaque \u00e9tape). Le LLM produit un plan explicite au format structur\u00e9 (JSON\/liste), puis un orchestrateur ex\u00e9cute ce plan \u00e9tape par \u00e9tape.<\/p>\n<\/div>\n<div class=\"card\">\n<h4>\ud83d\ude80 B\u00e9n\u00e9fice<\/h4>\n<p>Divise un probl\u00e8me insoluble en une seule passe en sous-t\u00e2ches ma\u00eetrisables. Le plan offre <strong>tra\u00e7abilit\u00e9<\/strong> (chaque \u00e9tape est logg\u00e9e), <strong>contr\u00f4le<\/strong> (on peut valider\/modifier le plan) et <strong>r\u00e9silience<\/strong> (re-planification en cas d&rsquo;\u00e9chec).<\/p>\n<\/div>\n<\/div>\n\n<!-- ============================================ -->\n<!-- SECTION 3 : QUAND UTILISER vs NE PAS        -->\n<!-- ============================================ -->\n\n<h2>2. Quand Utiliser vs NE PAS Utiliser<\/h2>\n\n<h3>\u2705 Cas d&rsquo;Usage Id\u00e9aux<\/h3>\n<table>\n<tr><th>Situation<\/th><th>Pourquoi le Planning excelle<\/th><\/tr>\n<tr><td>T\u00e2ches multi-\u00e9tapes avec d\u00e9pendances<\/td><td>L&rsquo;ordre compte : l&rsquo;\u00e9tape 3 d\u00e9pend du r\u00e9sultat de l&rsquo;\u00e9tape 1<\/td><\/tr>\n<tr><td>Objectifs vagues \u00e0 concr\u00e9tiser<\/td><td>Le plan force la d\u00e9composition en actions concr\u00e8tes et v\u00e9rifiables<\/td><\/tr>\n<tr><td>Workflows n\u00e9cessitant des outils externes<\/td><td>Chaque \u00e9tape peut appeler une API, une base de donn\u00e9es, un fichier<\/td><\/tr>\n<tr><td>T\u00e2ches o\u00f9 l&rsquo;utilisateur veut valider avant ex\u00e9cution<\/td><td>Le plan peut \u00eatre pr\u00e9sent\u00e9 et modifi\u00e9 avant lancement<\/td><\/tr>\n<tr><td>Projets de recherche \/ analyse en profondeur<\/td><td>Structurer une investigation en phases logiques \u00e9vite les oublis<\/td><\/tr>\n<\/table>\n\n<h3>\u274c Quand NE PAS Utiliser<\/h3>\n<table>\n<tr><th>Situation<\/th><th>Pourquoi \u00e9viter<\/th><\/tr>\n<tr><td>Questions simples \/ r\u00e9ponses factuelles<\/td><td>Surco\u00fbt inutile : planifier \u00ab Quelle est la capitale de la France ? \u00bb est absurde<\/td><\/tr>\n<tr><td>Latence critique (&lt; 1s)<\/td><td>La phase de planification ajoute 1-3s minimum<\/td><\/tr>\n<tr><td>T\u00e2ches sans structure s\u00e9quentielle<\/td><td>Si tout peut se faire en parall\u00e8le \u2192 utilisez plut\u00f4t la Parall\u00e9lisation<\/td><\/tr>\n<tr><td>Contexte insuffisant pour planifier<\/td><td>Un plan bas\u00e9 sur des hypoth\u00e8ses fausses fait plus de mal que de bien<\/td><\/tr>\n<\/table>\n\n<div class=\"info\">\n<strong>\ud83d\udca1 Test Simple :<\/strong> Si vous pouvez r\u00e9soudre la t\u00e2che en un seul appel LLM avec un r\u00e9sultat satisfaisant, vous n&rsquo;avez pas besoin de Planning. Posez-vous la question : \u00ab Cette t\u00e2che n\u00e9cessite-t-elle <strong>plus de 2 \u00e9tapes s\u00e9quentielles distinctes<\/strong> ? \u00bb Si oui \u2192 Planning.\n<\/div>\n\n<!-- ============================================ -->\n<!-- SECTION 4 : TROIS EXEMPLES CONCRETS          -->\n<!-- ============================================ -->\n\n<h2>3. Trois Exemples Concrets<\/h2>\n\n<div class=\"example-box\">\n<h3>\ud83d\udce6 Exemple 1 : Migration de Base de Donn\u00e9es SaaS<\/h3>\n<p><strong>Contexte :<\/strong> Un agent doit orchestrer la migration d&rsquo;un sch\u00e9ma de base de donn\u00e9es avec transformation de donn\u00e9es, sans interruption de service.<\/p>\n\n<strong>Types de requ\u00eates :<\/strong>\n<ul>\n<li>\u00ab Migre la table users vers le nouveau sch\u00e9ma v3 \u00bb<\/li>\n<li>\u00ab Ajoute la colonne subscription_tier et remplis-la \u00e0 partir des donn\u00e9es Stripe \u00bb<\/li>\n<li>\u00ab Restructure les relations orders \u2194 invoices \u00bb<\/li>\n<\/ul>\n\n<div class=\"diagram\">\n[Objectif : \u00ab\u00a0Migre users vers sch\u00e9ma v3\u00a0\u00bb]\n        \u2502\n        \u25bc\n   PLANIFICATEUR\n        \u2502\n        \u25bc\nPlan g\u00e9n\u00e9r\u00e9 :\n  1. Analyser le sch\u00e9ma actuel (lecture DB)\n  2. G\u00e9n\u00e9rer le script de migration DDL\n  3. Cr\u00e9er une table temporaire de backup\n  4. Ex\u00e9cuter la migration sur un environnement de test\n  5. Valider l&rsquo;int\u00e9grit\u00e9 des donn\u00e9es (checksums)\n  6. Appliquer en production avec rollback pr\u00e9par\u00e9\n        \u2502\n        \u25bc\n   EX\u00c9CUTION S\u00c9QUENTIELLE\n   (chaque \u00e9tape valide avant la suivante)\n        \u2502\n        \u25bc\n   \u27f2 Si \u00e9tape 5 \u00e9choue \u2192 re-planification (rollback + correction)\n<\/div>\n\n<p><strong>Gains mesur\u00e9s :<\/strong><\/p>\n<ul>\n<li><span class=\"badge badge-green\">Fiabilit\u00e9<\/span> 95% des migrations r\u00e9ussies du premier coup (vs 60% en mode ad-hoc)<\/li>\n<li><span class=\"badge badge-blue\">Tra\u00e7abilit\u00e9<\/span> Chaque \u00e9tape logg\u00e9e avec timestamp et r\u00e9sultat<\/li>\n<li><span class=\"badge badge-orange\">Temps<\/span> 4 min en moyenne (vs 15 min d&rsquo;aller-retour humain)<\/li>\n<\/ul>\n<\/div>\n\n<div class=\"example-box\">\n<h3>\ud83d\udcac Exemple 2 : Agent de Support Client Multi-Canaux<\/h3>\n<p><strong>Contexte :<\/strong> Un agent re\u00e7oit une r\u00e9clamation complexe impliquant plusieurs syst\u00e8mes (commande, livraison, facturation) et doit r\u00e9soudre le probl\u00e8me de bout en bout.<\/p>\n\n<strong>Types de requ\u00eates :<\/strong>\n<ul>\n<li>\u00ab Ma commande #4521 n&rsquo;est jamais arriv\u00e9e, j&rsquo;ai \u00e9t\u00e9 factur\u00e9 deux fois, et le chat m&rsquo;a dit de rappeler \u00bb<\/li>\n<li>\u00ab Je veux annuler mon abonnement, r\u00e9cup\u00e9rer mon solde et transf\u00e9rer mes donn\u00e9es \u00bb<\/li>\n<\/ul>\n\n<div class=\"diagram\">\n[R\u00e9clamation complexe multi-syst\u00e8mes]\n        \u2502\n        \u25bc\n   PLANIFICATEUR\n        \u2502\n        \u25bc\nPlan g\u00e9n\u00e9r\u00e9 :\n  1. Extraire le num\u00e9ro de commande et l&rsquo;historique client (CRM)\n  2. V\u00e9rifier le statut de livraison (API transporteur)\n  3. Auditer les transactions (syst\u00e8me facturation)\n  4. Identifier la double facturation\n  5. G\u00e9n\u00e9rer le remboursement + avoir\n  6. R\u00e9diger un email r\u00e9capitulatif au client\n        \u2502\n        \u25bc\n   EX\u00c9CUTION S\u00c9QUENTIELLE\n   (r\u00e9sultat de l&rsquo;\u00e9tape 2 alimente l&rsquo;\u00e9tape 4)\n<\/div>\n\n<p><strong>Gains mesur\u00e9s :<\/strong><\/p>\n<ul>\n<li><span class=\"badge badge-green\">R\u00e9solution<\/span> 82% des r\u00e9clamations complexes r\u00e9solues sans escalade humaine<\/li>\n<li><span class=\"badge badge-blue\">Satisfaction<\/span> NPS +18 pts gr\u00e2ce \u00e0 la r\u00e9ponse structur\u00e9e<\/li>\n<li><span class=\"badge badge-orange\">Co\u00fbt<\/span> -65% sur le traitement des tickets multi-syst\u00e8mes<\/li>\n<\/ul>\n<\/div>\n\n<div class=\"example-box\">\n<h3>\ud83d\udee1\ufe0f Exemple 3 : Audit de S\u00e9curit\u00e9 Automatis\u00e9<\/h3>\n<p><strong>Contexte :<\/strong> Un agent planifie et ex\u00e9cute un audit de s\u00e9curit\u00e9 complet sur une application web, en encha\u00eenant diff\u00e9rents types de v\u00e9rifications.<\/p>\n\n<strong>Types de requ\u00eates :<\/strong>\n<ul>\n<li>\u00ab Audite la s\u00e9curit\u00e9 de l&rsquo;application d\u00e9ploy\u00e9e sur api.example.com \u00bb<\/li>\n<li>\u00ab V\u00e9rifie la conformit\u00e9 RGPD de notre pipeline de donn\u00e9es \u00bb<\/li>\n<\/ul>\n\n<div class=\"diagram\">\n[Objectif : \u00ab\u00a0Audit s\u00e9curit\u00e9 api.example.com\u00a0\u00bb]\n        \u2502\n        \u25bc\n   PLANIFICATEUR\n        \u2502\n        \u25bc\nPlan g\u00e9n\u00e9r\u00e9 :\n  1. Scanner les ports ouverts et services expos\u00e9s\n  2. V\u00e9rifier les certificats SSL\/TLS\n  3. Tester les en-t\u00eates de s\u00e9curit\u00e9 HTTP\n  4. Analyser les d\u00e9pendances (CVE connues)\n  5. V\u00e9rifier la configuration d&rsquo;authentification\n  6. Tester les endpoints pour injections SQL\/XSS\n  7. G\u00e9n\u00e9rer le rapport consolid\u00e9 avec score de risque\n        \u2502\n        \u25bc\n   EX\u00c9CUTION S\u00c9QUENTIELLE\n   (l&rsquo;\u00e9tape 1 d\u00e9termine la surface d&rsquo;attaque pour les \u00e9tapes 5-6)\n        \u2502\n        \u25bc\n   \u27f2 Si \u00e9tape 4 trouve une CVE critique \u2192 \n     re-planification : ajouter \u00ab\u00a0v\u00e9rifier l&rsquo;exploitabilit\u00e9\u00a0\u00bb\n<\/div>\n\n<p><strong>Gains mesur\u00e9s :<\/strong><\/p>\n<ul>\n<li><span class=\"badge badge-green\">Couverture<\/span> 40+ v\u00e9rifications vs 12 en mode check-list manuelle<\/li>\n<li><span class=\"badge badge-blue\">Pr\u00e9cision<\/span> 91% de vrais positifs (faux positifs filtr\u00e9s par la phase de validation)<\/li>\n<li><span class=\"badge badge-orange\">Temps<\/span> 8 min pour un audit complet (vs 2h en manuel)<\/li>\n<\/ul>\n<\/div>\n\n<!-- ============================================ -->\n<!-- SECTION 5 : PROMPT PR\u00caT \u00c0 L'EMPLOI          -->\n<!-- ============================================ -->\n\n<h2>4. Prompt Pr\u00eat \u00e0 l&rsquo;Emploi<\/h2>\n\n<div class=\"prompt-box\">\n<h4>\ud83d\udca1 Prompt Pr\u00eat \u00e0 l&rsquo;Emploi : Agent de Planification Adaptative<\/h4>\n\n<h5>Contexte :<\/h5>\n<p>Ce syst\u00e8me en 4 \u00e9tapes configure un agent capable de planifier, ex\u00e9cuter s\u00e9quentiellement, et re-planifier si n\u00e9cessaire. Il illustre le m\u00e9canisme complet du pattern Planning : g\u00e9n\u00e9ration du plan \u2192 ex\u00e9cution \u00e9tape par \u00e9tape \u2192 v\u00e9rification \u2192 adaptation.<\/p>\n\n<h5>\u00c9tape 1 \u2014 G\u00e9n\u00e9ration du Plan :<\/h5>\n<pre><code>Tu es un planificateur strat\u00e9gique.\n\n**Objectif \u00e0 atteindre :**\n[OBJECTIF]\n\n**Contexte disponible :**\n[CONTEXTE]\n\n**Outils disponibles :**\n[LISTE_OUTILS]\n\n**Instructions :**\n1. D\u00e9compose cet objectif en \u00e9tapes S\u00c9QUENTIELLES et CONCR\u00c8TES\n2. Pour chaque \u00e9tape, d\u00e9finis :\n   - Un ID unique (step_1, step_2, ...)\n   - Une action pr\u00e9cise (verbe + objet)\n   - Les d\u00e9pendances (quelles \u00e9tapes pr\u00e9c\u00e9dentes sont n\u00e9cessaires)\n   - L'outil \u00e0 utiliser (si applicable)\n   - Le crit\u00e8re de succ\u00e8s (comment savoir que l'\u00e9tape est r\u00e9ussie)\n3. Ordonne les \u00e9tapes selon leurs d\u00e9pendances\n4. Limite le plan \u00e0 8 \u00e9tapes maximum\n\n**Format de sortie (JSON) :**\n{\n  \"objectif\": \"...\",\n  \"nb_etapes\": 5,\n  \"plan\": [\n    {\n      \"id\": \"step_1\",\n      \"action\": \"R\u00e9cup\u00e9rer les donn\u00e9es du client depuis le CRM\",\n      \"dependances\": [],\n      \"outil\": \"api_crm\",\n      \"critere_succes\": \"Objet client avec email et historique non vide\",\n      \"timeout_ms\": 5000\n    },\n    {\n      \"id\": \"step_2\",\n      \"action\": \"Analyser l'historique des commandes\",\n      \"dependances\": [\"step_1\"],\n      \"outil\": null,\n      \"critere_succes\": \"Liste des anomalies identifi\u00e9es\",\n      \"timeout_ms\": 10000\n    }\n  ]\n}<\/code><\/pre>\n\n<h5>\u00c9tape 2 \u2014 Ex\u00e9cution S\u00e9quentielle (pseudo-code) :<\/h5>\n<pre><code>const plan = await appelLLM(promptPlanification);\nconst resultats = {};\n\nfor (const etape of plan.plan) {\n  \/\/ V\u00e9rifier que toutes les d\u00e9pendances sont r\u00e9solues\n  const dependancesOK = etape.dependances.every(\n    dep => resultats[dep]?.succes === true\n  );\n  \n  if (!dependancesOK) {\n    \/\/ \u2192 D\u00e9clencher la re-planification (\u00c9tape 4)\n    return await rePlanifier(plan, resultats, etape);\n  }\n\n  \/\/ Construire le contexte avec les r\u00e9sultats pr\u00e9c\u00e9dents\n  const contexteEtape = etape.dependances.map(\n    dep => `R\u00e9sultat de ${dep}: ${JSON.stringify(resultats[dep].donnees)}`\n  ).join('\\n');\n\n  \/\/ Ex\u00e9cuter l'\u00e9tape\n  const resultat = await executerEtape(etape, contexteEtape);\n  resultats[etape.id] = resultat;\n\n  \/\/ V\u00e9rifier le crit\u00e8re de succ\u00e8s\n  if (!resultat.succes) {\n    return await rePlanifier(plan, resultats, etape);\n  }\n}\n\nreturn syntheseFinale(resultats);<\/code><\/pre>\n\n<h5>\u00c9tape 3 \u2014 Prompt d&rsquo;Ex\u00e9cution par \u00c9tape :<\/h5>\n<pre><code>Tu ex\u00e9cutes UNE SEULE \u00e9tape d'un plan.\n\n**\u00c9tape \u00e0 ex\u00e9cuter :**\n[ETAPE_COURANTE]\n\n**R\u00e9sultats des \u00e9tapes pr\u00e9c\u00e9dentes :**\n[RESULTATS_PRECEDENTS]\n\n**Instructions :**\n1. R\u00e9alise UNIQUEMENT l'action d\u00e9crite dans cette \u00e9tape\n2. Utilise l'outil sp\u00e9cifi\u00e9 si applicable\n3. V\u00e9rifie toi-m\u00eame le crit\u00e8re de succ\u00e8s\n4. Si tu ne peux PAS r\u00e9ussir cette \u00e9tape, explique pourquoi\n\n**Format de sortie (JSON) :**\n{\n  \"etape_id\": \"step_2\",\n  \"succes\": true,\n  \"donnees\": { ... },\n  \"critere_verifie\": true,\n  \"notes\": \"Anomalie d\u00e9tect\u00e9e : double facturation sur commande #4521\"\n}<\/code><\/pre>\n\n<h5>\u00c9tape 4 \u2014 Re-planification Adaptative :<\/h5>\n<pre><code>Tu es un re-planificateur.\n\n**Plan initial :**\n[PLAN_INITIAL]\n\n**\u00c9tapes d\u00e9j\u00e0 r\u00e9alis\u00e9es :**\n[RESULTATS_OBTENUS]\n\n**\u00c9tape en \u00e9chec :**\n[ETAPE_ECHOUEE]\n\n**Raison de l'\u00e9chec :**\n[RAISON_ECHEC]\n\n**Instructions :**\n1. Analyse pourquoi l'\u00e9tape a \u00e9chou\u00e9\n2. Propose un plan R\u00c9VIS\u00c9 qui :\n   - Conserve les \u00e9tapes r\u00e9ussies\n   - Remplace ou contourne l'\u00e9tape en \u00e9chec\n   - Ajoute des \u00e9tapes correctives si n\u00e9cessaire\n3. Si l'objectif est inatteignable, explique pourquoi et propose un objectif alternatif\n\n**Format de sortie (JSON) :**\n{\n  \"plan_revise\": [...],\n  \"modifications\": \"Ajout d'une \u00e9tape de v\u00e9rification manuelle avant step_3\",\n  \"objectif_atteignable\": true\n}<\/code><\/pre>\n\n<h5>Flux complet :<\/h5>\n<div class=\"diagram\">\n[OBJECTIF]\n     \u2502\n     \u25bc\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 PLANIFICATEUR \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 (\u00c9tape 1)    \u2502                              \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                              \u2502\n       \u2502 Plan JSON                            \u2502\n       \u25bc                                      \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510                              \u2502\n\u2502  BOUCLE FOR  \u2502                              \u2502\n\u2502  (\u00c9tape 2)   \u2502                              \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                              \u2502\n       \u2502                                      \u2502\n       \u25bc                                      \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   Succ\u00e8s   \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\n\u2502 EX\u00c9CUTEUR    \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25b6\u2502 \u00c9tape suiv.  \u2502  \u2502\n\u2502 (\u00c9tape 3)    \u2502            \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518                              \u2502\n       \u2502 \u00c9chec                                \u2502\n       \u25bc                                      \u2502\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510   Plan r\u00e9vis\u00e9                \u2502\n\u2502 RE-PLANIF.   \u2502\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\u2502 (\u00c9tape 4)    \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/div>\n\n<h5>Variables \u00e0 personnaliser :<\/h5>\n<ul>\n<li><code>[OBJECTIF]<\/code> : L&rsquo;objectif final en langage naturel (ex : \u00ab Migrer la table users vers le sch\u00e9ma v3 \u00bb)<\/li>\n<li><code>[CONTEXTE]<\/code> : Informations de contexte utiles (\u00e9tat actuel du syst\u00e8me, contraintes, etc.)<\/li>\n<li><code>[LISTE_OUTILS]<\/code> : Les outils\/API disponibles (ex : \u00ab api_crm, api_stripe, base_postgres, envoi_email \u00bb)<\/li>\n<li><code>[ETAPE_COURANTE]<\/code> : L&rsquo;objet JSON de l&rsquo;\u00e9tape en cours d&rsquo;ex\u00e9cution<\/li>\n<li><code>[RESULTATS_PRECEDENTS]<\/code> : Les r\u00e9sultats JSON des \u00e9tapes d\u00e9j\u00e0 ex\u00e9cut\u00e9es<\/li>\n<li><code>[PLAN_INITIAL]<\/code> : Le plan JSON complet g\u00e9n\u00e9r\u00e9 \u00e0 l&rsquo;\u00e9tape 1<\/li>\n<li><code>[ETAPE_ECHOUEE]<\/code> : L&rsquo;\u00e9tape qui a \u00e9chou\u00e9 avec ses d\u00e9tails<\/li>\n<li><code>[RAISON_ECHEC]<\/code> : Le message d&rsquo;erreur ou la raison de l&rsquo;\u00e9chec<\/li>\n<\/ul>\n\n<h5>R\u00e9sultat attendu :<\/h5>\n<p>Ex\u00e9cution compl\u00e8te et trac\u00e9e de l&rsquo;objectif, avec un log de chaque \u00e9tape (succ\u00e8s\/\u00e9chec + donn\u00e9es). En cas d&rsquo;\u00e9chec partiel, un plan r\u00e9vis\u00e9 est automatiquement g\u00e9n\u00e9r\u00e9 et ex\u00e9cut\u00e9. Temps total \u2248 somme des \u00e9tapes + 1-2s de planification.<\/p>\n<\/div>\n\n<!-- ============================================ -->\n<!-- SECTION 6 : PATTERNS & ANTI-PATTERNS        -->\n<!-- ============================================ -->\n\n<h2>5. Patterns et Anti-Patterns<\/h2>\n\n<h3>\u2705 Patterns Efficaces<\/h3>\n<div class=\"grid-2\">\n<div class=\"card\">\n<h4>\ud83d\udccb Plan Avant Ex\u00e9cution<\/h4>\n<p>Toujours g\u00e9n\u00e9rer le plan complet <strong>avant<\/strong> la premi\u00e8re action. Permet \u00e0 l&rsquo;utilisateur de valider et au syst\u00e8me de d\u00e9tecter les incoh\u00e9rences.<\/p>\n<\/div>\n<div class=\"card\">\n<h4>\ud83d\udd04 Re-planification Conditionnelle<\/h4>\n<p>Pr\u00e9voir un m\u00e9canisme de re-planification d\u00e9clench\u00e9 par l&rsquo;\u00e9chec d&rsquo;une \u00e9tape <strong>ou<\/strong> par un r\u00e9sultat inattendu. Ne pas boucler ind\u00e9finiment : limite \u00e0 2-3 re-planifications.<\/p>\n<\/div>\n<div class=\"card\">\n<h4>\ud83e\udde9 Granularit\u00e9 Adapt\u00e9e<\/h4>\n<p>Chaque \u00e9tape doit \u00eatre <strong>atomique et v\u00e9rifiable<\/strong>. Si une \u00e9tape est trop vague (\u00ab r\u00e9soudre le probl\u00e8me \u00bb), elle doit \u00eatre re-d\u00e9compos\u00e9e.<\/p>\n<\/div>\n<div class=\"card\">\n<h4>\ud83d\udcca Crit\u00e8res de Succ\u00e8s Explicites<\/h4>\n<p>Chaque \u00e9tape du plan inclut un crit\u00e8re de succ\u00e8s mesurable. Sans crit\u00e8re, impossible de savoir si l&rsquo;\u00e9tape est r\u00e9ussie ou si la re-planification est n\u00e9cessaire.<\/p>\n<\/div>\n<\/div>\n\n<h3>\u274c Anti-Patterns \u00e0 \u00c9viter<\/h3>\n<table>\n<tr><th>Anti-Pattern<\/th><th>Cons\u00e9quence<\/th><th>Solution<\/th><\/tr>\n<tr>\n<td><strong>Plan Fant\u00f4me<\/strong> : planifier mentalement sans produire de plan explicite<\/td>\n<td>Aucune tra\u00e7abilit\u00e9, impossible de d\u00e9buguer ou de reprendre<\/td>\n<td>Forcer la sortie JSON du plan avant toute ex\u00e9cution<\/td>\n<\/tr>\n<tr>\n<td><strong>Sur-planification<\/strong> : 20+ \u00e9tapes pour une t\u00e2che simple<\/td>\n<td>Latence explosive, co\u00fbt LLM x10, perte de contexte<\/td>\n<td>Limiter \u00e0 8 \u00e9tapes max, fusionner les micro-\u00e9tapes<\/td>\n<\/tr>\n<tr>\n<td><strong>Plan Rigide<\/strong> : aucune adaptation possible en cours d&rsquo;ex\u00e9cution<\/td>\n<td>Blocage total au premier impr\u00e9vu<\/td>\n<td>Impl\u00e9menter la re-planification adaptative (\u00c9tape 4 du prompt)<\/td>\n<\/tr>\n<tr>\n<td><strong>Boucle Infinie<\/strong> : re-planifier sans fin apr\u00e8s chaque \u00e9chec<\/td>\n<td>Co\u00fbt et latence incontr\u00f4lables, r\u00e9sultat jamais atteint<\/td>\n<td>Compteur de tentatives (max 3), puis escalade ou abandon<\/td>\n<\/tr>\n<\/table>\n\n<!-- ============================================ -->\n<!-- SECTION 7 : PROPRI\u00c9T\u00c9S ESSENTIELLES          -->\n<!-- ============================================ -->\n\n<h2>6. Propri\u00e9t\u00e9s Essentielles<\/h2>\n\n<div class=\"grid-3\">\n<div class=\"card\">\n<h4>\ud83c\udfaf D\u00e9composition Explicite<\/h4>\n<p>Le plan est un artefact structur\u00e9 (JSON, liste), pas une r\u00e9flexion implicite cach\u00e9e dans la r\u00e9ponse.<\/p>\n<em>Pourquoi : permet la validation, le logging et la reprise.<\/em>\n<\/div>\n<div class=\"card\">\n<h4>\ud83d\udd17 Gestion des D\u00e9pendances<\/h4>\n<p>Chaque \u00e9tape d\u00e9clare ses d\u00e9pendances. L&rsquo;orchestrateur v\u00e9rifie qu&rsquo;elles sont satisfaites avant de lancer l&rsquo;\u00e9tape.<\/p>\n<em>Pourquoi : \u00e9vite les ex\u00e9cutions dans le d\u00e9sordre.<\/em>\n<\/div>\n<div class=\"card\">\n<h4>\u27f2 Adaptabilit\u00e9<\/h4>\n<p>Le plan n&rsquo;est pas fig\u00e9. Le syst\u00e8me peut ins\u00e9rer, supprimer ou modifier des \u00e9tapes en fonction des r\u00e9sultats interm\u00e9diaires.<\/p>\n<em>Pourquoi : le monde r\u00e9el ne suit jamais le plan initial.<\/em>\n<\/div>\n<div class=\"card\">\n<h4>\u2705 Crit\u00e8res de Succ\u00e8s<\/h4>\n<p>Chaque \u00e9tape a un crit\u00e8re de succ\u00e8s v\u00e9rifiable. Sans cela, pas de boucle d&rsquo;ex\u00e9cution fiable.<\/p>\n<em>Pourquoi : distinguer \u00ab ex\u00e9cut\u00e9 \u00bb de \u00ab r\u00e9ussi \u00bb.<\/em>\n<\/div>\n<div class=\"card\">\n<h4>\ud83d\udcdd Tra\u00e7abilit\u00e9 Compl\u00e8te<\/h4>\n<p>Chaque \u00e9tape loggue son r\u00e9sultat, son temps d&rsquo;ex\u00e9cution et son statut. Le plan complet est conserv\u00e9.<\/p>\n<em>Pourquoi : d\u00e9bugage, audit, et am\u00e9lioration continue.<\/em>\n<\/div>\n<div class=\"card\">\n<h4>\ud83d\uded1 Limites de S\u00e9curit\u00e9<\/h4>\n<p>Nombre max d&rsquo;\u00e9tapes, nombre max de re-planifications, timeout global. L&rsquo;agent ne peut pas tourner ind\u00e9finiment.<\/p>\n<em>Pourquoi : ma\u00eetriser le co\u00fbt et la latence.<\/em>\n<\/div>\n<\/div>\n\n<!-- ============================================ -->\n<!-- SECTION 8 : M\u00c9TRIQUES DE SUCC\u00c8S              -->\n<!-- ============================================ -->\n\n<h2>7. M\u00e9triques de Succ\u00e8s<\/h2>\n\n<table>\n<tr><th>M\u00e9trique<\/th><th>Cible<\/th><th>Alerte si<\/th><th>Signification<\/th><\/tr>\n<tr>\n<td>Taux de plans ex\u00e9cut\u00e9s sans re-planification<\/td>\n<td>\u2265 75%<\/td>\n<td>&lt; 50%<\/td>\n<td>La qualit\u00e9 de la planification initiale est insuffisante<\/td>\n<\/tr>\n<tr>\n<td>Nombre moyen d&rsquo;\u00e9tapes par plan<\/td>\n<td>3-7<\/td>\n<td>&gt; 10<\/td>\n<td>Sur-planification \u2192 fusionner des \u00e9tapes ou simplifier l&rsquo;objectif<\/td>\n<\/tr>\n<tr>\n<td>Taux de r\u00e9ussite final (objectif atteint)<\/td>\n<td>\u2265 85%<\/td>\n<td>&lt; 70%<\/td>\n<td>Le pattern n&rsquo;est pas adapt\u00e9 au cas d&rsquo;usage ou les outils sont d\u00e9faillants<\/td>\n<\/tr>\n<tr>\n<td>Temps total moyen (planification + ex\u00e9cution)<\/td>\n<td>&lt; 30s<\/td>\n<td>&gt; 60s<\/td>\n<td>\u00c9tapes trop nombreuses ou outils trop lents<\/td>\n<\/tr>\n<tr>\n<td>Nombre de re-planifications par ex\u00e9cution<\/td>\n<td>\u2264 1<\/td>\n<td>\u2265 3<\/td>\n<td>Le planificateur ne tient pas compte du contexte r\u00e9el<\/td>\n<\/tr>\n<tr>\n<td>Co\u00fbt LLM moyen par plan complet<\/td>\n<td>Variable<\/td>\n<td>&gt; 3x le co\u00fbt d&rsquo;un appel unique<\/td>\n<td>Trop d&rsquo;\u00e9tapes ou mod\u00e8le trop puissant utilis\u00e9 pour des \u00e9tapes simples<\/td>\n<\/tr>\n<\/table>\n\n<div class=\"warning\">\n<strong>\u26a0\ufe0f Alerte critique :<\/strong> Si le taux de re-planification d\u00e9passe 40%, le probl\u00e8me n&rsquo;est pas dans l&rsquo;ex\u00e9cution mais dans la <strong>qualit\u00e9 du prompt de planification<\/strong> (\u00c9tape 1). Investissez dans un meilleur contexte et des exemples de plans r\u00e9ussis plut\u00f4t que dans une meilleure re-planification.\n<\/div>\n\n<!-- ============================================ -->\n<!-- SECTION 9 : R\u00c9CAPITULATIF                    -->\n<!-- ============================================ -->\n\n<h2>8. R\u00e9capitulatif<\/h2>\n\n<div class=\"success\">\n<strong>\ud83d\udccc En 3 Points Cl\u00e9s :<\/strong>\n<ol>\n<li><strong>Planifier avant d&rsquo;agir<\/strong> \u2014 Le LLM g\u00e9n\u00e8re un plan structur\u00e9 (JSON) avec \u00e9tapes ordonn\u00e9es, d\u00e9pendances et crit\u00e8res de succ\u00e8s. Ce plan est un artefact v\u00e9rifiable, pas une r\u00e9flexion cach\u00e9e.<\/li>\n<li><strong>Ex\u00e9cuter \u00e9tape par \u00e9tape<\/strong> \u2014 Un orchestrateur (code) ex\u00e9cute le plan s\u00e9quentiellement, en injectant les r\u00e9sultats des \u00e9tapes pr\u00e9c\u00e9dentes dans le contexte de chaque nouvelle \u00e9tape.<\/li>\n<li><strong>S&rsquo;adapter en cours de route<\/strong> \u2014 Si une \u00e9tape \u00e9choue, le syst\u00e8me d\u00e9clenche une re-planification qui conserve les acquis et propose un chemin alternatif. Avec des limites : max 2-3 tentatives.<\/li>\n<\/ol>\n<\/div>\n\n<div class=\"grid-2\">\n<div class=\"card\">\n<h4>\u2705 Quand Utiliser<\/h4>\n<ul>\n<li>T\u00e2ches multi-\u00e9tapes avec d\u00e9pendances<\/li>\n<li>Objectifs complexes \u00e0 d\u00e9composer<\/li>\n<li>Workflows avec outils\/API externes<\/li>\n<li>Besoin de tra\u00e7abilit\u00e9 et d&rsquo;audit<\/li>\n<li>Validation humaine avant ex\u00e9cution<\/li>\n<\/ul>\n<\/div>\n<div class=\"card\">\n<h4>\u274c Quand NE PAS Utiliser<\/h4>\n<ul>\n<li>Questions simples \/ factuelles<\/li>\n<li>Latence critique (&lt; 1s)<\/li>\n<li>T\u00e2ches parall\u00e9lisables sans d\u00e9pendances<\/li>\n<li>Contexte trop flou pour planifier<\/li>\n<li>T\u00e2ches triviales en une seule passe<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n<div class=\"warning\">\n<strong>\u26a0\ufe0f Erreur Fr\u00e9quente :<\/strong> Confondre \u00ab penser \u00e9tape par \u00e9tape \u00bb (chain-of-thought) avec le pattern Planning. Le chain-of-thought est un raisonnement interne en une seule passe. Le Planning produit un <strong>plan explicite et structur\u00e9<\/strong>, ex\u00e9cut\u00e9 par un orchestrateur externe, avec possibilit\u00e9 de re-planification. Ce sont deux m\u00e9canismes fondamentalement diff\u00e9rents.\n<\/div>\n\n<div class=\"footer\">\n<h3>\ud83d\uddfa\ufe0f Planning \u2014 Planification Agentique<\/h3>\n<p>R\u00e9fl\u00e9chir d&rsquo;abord. Agir ensuite. S&rsquo;adapter toujours.<\/p>\n<\/div>\n\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Le pattern Planning (Planification) permet \u00e0 un agent IA de&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-11991","post","type-post","status-publish","format-standard","hentry","category-blog"],"rank_math_title":"Design Pattern Planning : Orchestration fiable en 2026","rank_math_description":"D\u00e9couvrez comment le design pattern Planning structure vos t\u00e2ches complexes pour plus de contr\u00f4le et succ\u00e8s. Apprenez \u00e0 planifier et adapter vos actions.","rank_math_canonical_url":"","featured_image_src":null,"author_info":{"display_name":"Phil","author_link":"https:\/\/inforeole.fr\/author\/phil\/"},"_links":{"self":[{"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/posts\/11991","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/comments?post=11991"}],"version-history":[{"count":1,"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/posts\/11991\/revisions"}],"predecessor-version":[{"id":11992,"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/posts\/11991\/revisions\/11992"}],"wp:attachment":[{"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/media?parent=11991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/categories?post=11991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/inforeole.fr\/wp-json\/wp\/v2\/tags?post=11991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}