Changer le thème

Concevoir une state machine pour agent IA : pourquoi un workflow complexe ne peut pas dépendre du prompt

Easton editorial illustration: large Agent state recorder, coral failure beacon, checkpoint rewind handle, recovery status strip
8
Champs d'état clés
state, event, guard, action, checkpoint, retry, compensation, terminal.
4
Objets de journalisation
state snapshot, event log, trace, audit log.
3
Actions de récupération
resume, retry, compensate.
数据来源: Cette checklist d'ingénierie s'appuie sur les documentations officielles de LangGraph, Temporal, OpenAI Agents SDK, AWS Step Functions et Stately. Les noms d'API et comportements produit doivent rester vérifiés dans les sources officielles après publication.

"La documentation LangGraph Persistence décrit les checkpoints comme des graph state snapshots scoped par thread et explique qu'ils soutiennent conversation continuity, human-in-the-loop, time travel et fault tolerance."

Un agent de reporting a échoué juste avant l’envoi de l’e-mail à l’étape 5. L’équipe d’exploitation a relancé la tâche. L’agent est reparti de l’étape 1, a généré un nouveau rapport et a écrasé la version déjà approuvée. L’état d’approbation a disparu. La trace signée par l’approbateur a été remplacée par le nouveau résultat, et aucun log ne permettait de prouver que la première version avait bien été validée.

Ce n’était ni un rollback de base de données, ni un retry de file de messages. Dans le prompt, il ne restait qu’une phrase : “continuer le traitement”. Le modèle a ré-inféré tout le workflow sans savoir que les étapes 1 à 4 avaient déjà produit des effets externes : appel de l’API d’approbation, génération du rapport, écriture d’un fichier temporaire. Le point d’échec était l’étape 5, mais les effets externes avaient commencé à l’étape 2.

Le vrai problème n’était pas la capacité du modèle. La progression de la tâche était cachée en langage naturel dans le prompt, sans snapshot d’état récupérable. Les messages portés par un prompt sont du contexte de modèle, pas des faits d’exécution.

Pour corriger ce type d’incident, ajouter une phrase au prompt du genre “vérifier la progression avant de continuer” ne suffit pas. La solution plus robuste consiste à écrire le nœud courant, les effets déjà produits, l’action suivante et la compensation d’échec dans une table d’état récupérable.

Points clés de l’incident

Flux d’exécution de l’agent de reporting :

ÉtapeOpérationEffet externeIdempotence
Étape 1Requête de donnéesAppel de la base de données et lecture des données utilisateurIdempotent (lecture)
Étape 2Génération du rapportAppel de l’outil de reporting et génération du PDFNon idempotent (écrase un fichier)
Étape 3Attente d’approbationEnvoi d’une demande d’approbation et attente d’un humainIdempotent (API compatible)
Étape 4Approbation reçueRéception de l’event approveIdempotent (lecture de statut)
Étape 5Envoi d’e-mailAppel de l’API e-mail et envoi du rapportÉchec (timeout)

Cause de l’échec : l’envoi d’e-mail à l’étape 5 a expiré à cause d’une limite de l’API externe, et la tâche a été marquée FAILED.

Logique de relance : lire la “progression actuelle” dans le prompt. Le prompt ne disait que “approuvé, continuer le traitement”. Exécution réelle : repartir de l’étape 1 -> régénérer le rapport à l’étape 2 (écrasement de la version approuvée) -> redemander l’approbation à l’étape 3 -> envoyer avec succès à l’étape 5.

Impact métier : le rapport approuvé a été remplacé, les enregistrements d’approbation ne correspondaient plus au rapport livré, l’utilisateur a signalé que le rapport approuvé et le rapport reçu étaient différents, et le processus d’approbation a été gaspillé : deux versions approuvées, une seule envoyée.

Tableau de détection des anti-patterns

Vérifiez si votre agent tombe dans ces anti-patterns :

Anti-patternSymptômeRisque cachéCorrection
Progression écrite dans le PromptRésumé en langage naturel, par exemple “actuellement à l’étape 3”Perdu après redémarrage, non récupérableEnregistrer le nœud courant dans un champ State
Trace pris pour StateUne trace complète donne l’impression d’avoir un étatLa trace ne décide pas de l’étape suivanteLe State enregistre ce qui doit arriver ensuite
Retry sans contrôle d’idempotenceEn cas d’échec, tout recommencerLes effets externes se répètentClé d’idempotence + vérification déjà exécutée
Resume après approval sans vérificationContinuer directementRetour au mauvais point d’exécutioncheckpoint + thread_id

1. Bases de la State Machine : State, Event, Transition, Guard, Action

Une state machine n’est pas nécessaire pour tous les agents. Un simple support Q&A peut fonctionner avec un tableau de messages. Mais une tâche complexe, avec plusieurs étapes, une approbation, des appels à des systèmes externes et une reprise après échec, doit rendre la progression explicite.

1.1 Tableau des termes clés

Les termes de base viennent de la documentation Stately :

TermeDéfinitionExemple côté AgentSource
StateMode dans lequel se trouve la machine, avec une intention sémantique uniqueINIT, PLAN_READY, TOOL_RUNNING, APPROVAL_PENDING, FAILED, COMPLETEDStately state machines
EventSignal externe qui déclenche un changement d’étattimeout, approve, reject, retry, resume, task_receivedStately state machines
TransitionChemin autorisé entre deux états, sous forme de mapping déterministeINIT -> PLAN_READY (event: task_received)Stately state machines
Guard/ConditionPrécondition pour entrer dans un étatEntrer dans TOOL_RUNNING uniquement si le budget est suffisantStately state machines
ActionOpération exécutée pendant une transitionAppeler un outil en entrant dans TOOL_RUNNINGStately state machines
CheckpointSnapshot d’état utilisé pour la récupérationUn checkpointer LangGraph sauvegarde le graph stateLangGraph Persistence

Principe de déterminisme : une même combinaison State + Event doit pointer vers un seul next state afin d’éviter l’ambiguïté. Ensemble fini d’états : une state machine n’est pas un flowchart infini, mais un ensemble fini d’états atteignables plus des règles de transition explicites.

1.2 Comparaison Trace vs State vs Audit

Trace, Audit Log et State Snapshot répondent à trois problèmes différents :

ConceptProblème résoluEst-ce un état métier ?Décide-t-il de l’étape suivante ?Exemple côté Agent
TraceOssature d’observabilité et de diagnosticNonNonTrace OpenAI Agents SDK (workflow_name, trace_id)
Audit LogHistorique de conformité et traçabilité d’auditNonNonChamps d’audit du modèle de permissions (actor, traceId, action, result)
State SnapshotÉtat courant qui décide de l’étape suivanteOuiOuiCheckpoint LangGraph (nœud courant, étapes exécutées, prochaine action)

La différence est centrale : une trace aide à observer ce qui s’est passé, mais ce n’est pas l’état métier. Un audit log garde l’historique de conformité. Un state snapshot décide ce qui doit se passer ensuite, et c’est le cœur de la récupération. Ces objets ne se remplacent pas : avoir une trace ne signifie pas avoir un state ; avoir un audit log ne signifie pas pouvoir récupérer.

2. Comment LangGraph gère la persistance d’état

Un checkpoint n’est pas un résumé en langage naturel dans le prompt. C’est un snapshot d’état récupérable, inspectable et rejouable. La documentation LangGraph persistence définit un checkpoint comme un graph state snapshot qui contient l’état complet et les nœuds à exécuter ensuite.

2.1 Checkpointer et Thread State

Mécanismes clés (documentation LangGraph Persistence) :

  • Checkpointer : sauvegarde les snapshots d’état scoped par thread (graph state snapshots)
  • Store : sauvegarde les données long terme entre threads (application-defined store)
  • Thread_id : point d’entrée unique pour récupérer l’état d’un thread précis
  • Quatre usages : conversation continuity, human-in-the-loop, time travel, fault tolerance

LangGraph persistence place l’état court terme scoped par thread dans les checkpointers, et les données long terme entre threads dans les stores. Un checkpoint inclut le state snapshot et l’application-defined store. Thread_id est l’entrée de récupération : avec la même thread_id, on peut continuer depuis le point de pause.

Un checkpoint LangGraph contient graph state, la liste des nœuds à exécuter ensuite, checkpoint_id, timestamp et version. Les données sensibles ne doivent pas entrer aveuglément dans le checkpoint : certains champs de graph state peuvent contenir des informations sensibles et doivent être explicitement exclus de la persistance.

2.2 Interrupts et mécanisme de récupération

Mécanismes clés (documentation LangGraph Interrupts) :

  • interrupt() : met dynamiquement en pause l’exécution dans un nœud du graphe, sauvegarde le graph state et attend une entrée externe
  • Méthode de reprise : utiliser la même thread_id et Command(resume=…)
  • Patterns courants : approval, review/edit, tool call review, human input validation
  • Avertissement sur les effets idempotents : les effets avant interrupt doivent être idempotents, car à la reprise le nœud redémarre au début du nœud qui a appelé interrupt

Une pause d’approbation doit être un état de pause dans la state machine, pas une consigne laissée au modèle pour “se souvenir d’attendre l’approbation”. La reprise exige le même thread cursor.

La reprise utilise la même thread_id et Command(resume=…). L’idempotence des effets externes est une condition préalable. Si un effet externe précède l’approbation, par exemple un appel d’API externe, il doit être idempotent ; sinon, le nœud repris appellera de nouveau l’API.

3. Analogie d’ingénierie : Temporal Durable Execution

La fiabilité des tâches longues n’est pas un problème nouveau. Temporal durable execution offre une analogie solide.

3.1 Définition de Durable Execution

Concepts clés (documentation Temporal Durable Execution) :

  • Durable Execution : une workflow execution conserve state/progress malgré les échecs, crashs ou interruptions de service
  • Event History : enregistre l’état de chaque étape afin de reprendre depuis le dernier event enregistré après un échec
  • Trois propriétés : Resumable, Recoverable, Reactive

La fiabilité d’une tâche longue vient de l’event history et d’une exécution récupérable, pas de la mémoire d’un processus unique ni du contexte du prompt. Une state machine d’agent a besoin d’un mécanisme comparable : checkpoint/event log + état métier, pas seulement une nouvelle inférence du modèle.

L’Event History de Temporal et le checkpoint de LangGraph sont proches conceptuellement : ils enregistrent l’historique d’exécution et permettent de reprendre depuis le point d’échec. La différence est que Temporal est un moteur complet de workflow, tandis que LangGraph est un framework de gestion d’état pour agents. La leçon à retenir : durable execution exige un historique d’état structuré, pas la mémoire du process ni le contexte du modèle.

4. Modèle de table d’état : une Agent State Table réutilisable

Les concepts de state machine sont abstraits. Pour les appliquer, il faut un modèle d’état concret. Voici trois modèles : table d’état, table d’événements et exemple tiré de l’incident.

4.1 Modèle de table d’état (bloc d’étapes exécutable)

Structure du modèle :

StateEventGuardAction obligatoireNext
INITtask_receivedAucunInitialiser le contexte et enregistrer l’heure de débutPLAN_READY
PLAN_READYplan_generatedplan_validGénérer le plan d’exécution et enregistrer la séquence d’outilsTOOL_RUNNING
TOOL_RUNNINGtool_completedbudget_sufficientAppeler l’outil, enregistrer le résultat et mettre à jour le budgetAPPROVAL_PENDING ou COMPLETED
APPROVAL_PENDINGapproveapproval_requiredEnvoyer la demande d’approbation et enregistrer l’approbateurCOMPLETED
APPROVAL_PENDINGrejectAucunEnregistrer le motif de rejet et notifier l’utilisateurFAILED
FAILEDretryretry_count < maxVérifier l’idempotence et revenir au checkpoint précédentTOOL_RUNNING ou APPROVAL_PENDING
COMPLETEDAucunAucunEnregistrer l’heure de fin et nettoyer les ressourcesTerminal

Explication : la colonne State définit les états atteignables (INIT, PLAN_READY, TOOL_RUNNING, APPROVAL_PENDING, FAILED, COMPLETED). La colonne Event définit les événements qui déclenchent les transitions (task_received, approve, reject, retry). La colonne Guard définit les préconditions (budget_sufficient, retry_count < max). La colonne Action définit les opérations obligatoires pendant la transition. La colonne Next définit la transition déterministe.

4.2 Modèle de table d’événements (complément de la table d’état)

Structure du modèle :

EventCondition de déclenchementÉtat préalable requisÉtat aprèsProduit un effet externe ?
task_receivedL’utilisateur soumet une tâcheINITPLAN_READYNon
plan_generatedLe LLM génère un plan d’exécutionPLAN_READYTOOL_RUNNINGNon
tool_completedL’outil termine son exécutionTOOL_RUNNINGAPPROVAL_PENDING ou COMPLETEDOui (appel d’API externe)
approveL’approbateur valideAPPROVAL_PENDINGCOMPLETEDOui (envoi d’e-mail, débit de budget)
rejectL’approbateur refuseAPPROVAL_PENDINGFAILEDNon
retryDemande de retry après échecFAILEDTOOL_RUNNING ou APPROVAL_PENDINGVérification d’idempotence requise
timeoutTimeout d’exécutionTOOL_RUNNINGFAILEDNon

Explication : l’état préalable rend explicite dans quels états un event peut être reçu. La colonne des effets externes marque les events qui nécessitent idempotence ou compensation.

4.3 Exemple de table d’état tiré de l’incident de rapport écrasé

Exemple complet : state table de l’agent de reporting déduite de l’incident d’ouverture

StateEventGuardActionNextVérification d’idempotence/compensation
INITtask_receivedAucunInitialiser thread_id et enregistrer l’heure de débutQUERY_RUNNINGInutile
QUERY_RUNNINGquery_completedAucunInterroger les données et sauvegarder le résultat dans stateREPORT_GENERATINGInutile
REPORT_GENERATINGreport_generatedAucunGénérer le rapport et sauvegarder le report ID dans stateAPPROVAL_PENDINGVérification d’idempotence : si le rapport existe déjà, sauter la génération
APPROVAL_PENDINGapproveAucunEnregistrer l’approbateur et l’heure d’approbationEMAIL_SENDINGInutile
APPROVAL_PENDINGrejectAucunEnregistrer le motif de rejetFAILEDInutile
EMAIL_SENDINGemail_sentAucunEnvoyer l’e-mail et enregistrer l’email IDCOMPLETEDVérification d’idempotence : si l’e-mail est déjà envoyé, sauter
EMAIL_SENDINGtimeoutretry_count < 3Enregistrer l’échec et vérifier l’idempotenceEMAIL_SENDING (retry) ou FAILEDClé d’idempotence : email_id + thread_id
FAILEDretryretry_count < maxVérifier l’idempotence et récupérer depuis le checkpoint précédentQUERY_RUNNING ou REPORT_GENERATING ou EMAIL_SENDINGDécider le point de reprise selon le checkpoint
COMPLETEDAucunAucunEnregistrer l’heure de fin et nettoyer les ressourcesTerminalInutile

Correction de l’incident : si l’étape 5 échoue (EMAIL_SENDING -> timeout), la reprise doit partir de EMAIL_SENDING, pas de QUERY_RUNNING. Le checkpoint doit enregistrer le nœud courant (EMAIL_SENDING), les étapes déjà exécutées (QUERY, REPORT_GENERATED, APPROVAL_APPROVED) et la prochaine action (EMAIL_SENDING). La génération du rapport et l’envoi d’e-mail exigent des clés d’idempotence pour éviter les doublons.

5. Idempotence et compensation : récupérer ne se limite pas au checkpoint

Avoir un checkpoint ne signifie pas que tous les effets externes sont récupérables en sécurité. La reprise exige aussi idempotence, transactions, compensation et vérification de l’état du système externe.

5.1 Concepts d’idempotence et de compensation

Définitions :

  • Idempotent : plusieurs exécutions produisent le même résultat sans créer d’effet externe en double
  • Compensation : annuler un effet externe déjà produit afin de restaurer la cohérence
  • Rollback transactionnel : une opération atomique s’annule automatiquement en cas d’échec
  • Vérification d’état externe : vérifier l’état du système externe avant la reprise afin d’éviter une opération en double

Les trois piliers de la cohérence d’état : identité d’idempotence (action_id + schema_hash), chaîne de state snapshots (snapshot + prev_hash + delta), action de compensation enregistrée (undo_op).

5.2 Checklist idempotence et compensation

Pour décider quelles opérations exigent idempotence ou compensation :

Type d’opérationIdempotence nécessaire ?Compensation nécessaire ?Conception de clé d’idempotencePlan de compensation
Requête de données (sans effet externe)NonNon--
Génération de rapport (écrase un fichier)OuiOuireport_id + thread_idSupprimer le nouveau rapport et restaurer la version approuvée
Envoi d’e-mail (API externe)OuiDifficileemail_id + thread_idEnvoyer un e-mail de correction ou d’annulation dans certains cas
Déduction de stock (base de données)OuiOuiinventory_id + order_idRéajouter le stock
Création de ticket (système externe)OuiOuiticket_id + thread_idFermer le ticket
Déduction de budget (état interne)OuiOuibudget_id + thread_idRéajouter le budget
Envoi de demande d’approbation (sans effet durable)NonNon--

Logique de décision : la création d’un effet externe détermine le besoin d’idempotence. Les opérations réversibles ont besoin de compensation. Les appels inter-systèmes doivent inclure un identifiant du système externe dans la clé d’idempotence. Les opérations atomiques peuvent s’appuyer sur un rollback transactionnel.

La récupération n’est pas seulement un checkpoint. Elle exige idempotence, transactions, compensation et vérifications d’état externe. Dire qu’un checkpoint suffit à récupérer tous les effets externes en sécurité est inexact.

6. Checklist des états de tâche Agent : récupérable vs non récupérable

Tous les checkpoints ne permettent pas une reprise. Un terminal state est l’état final d’une workflow execution : terminé, échoué, expiré ou annulé. Un terminal state ne se reprend pas ; il se relance ou se compense.

6.1 Tableau de classification des états

Type d’étatRécupérable ?Condition de récupérationMéthode de récupérationExemple
FailedOuiretry_count < maxReprendre depuis le checkpoint précédentTimeout d’appel d’outil
RetryOuiVérification d’idempotence réussieRéexécuter depuis le nœud en échecÉchec d’envoi d’e-mail
CompensationPartiellementUn plan de compensation existeExécuter undo_opÉchec de déduction de stock
Approval PauseOuievent approve/rejectCommand(resume=…)Attente d’approbation
TerminalNonAucuneAucun chemin de repriseCOMPLETED, FAILED (retry_count = max)

Explication : un état Failed peut reprendre par retry si retry_count < max. Un état Retry exige un contrôle d’idempotence et réexécute depuis le nœud en échec. Un état Compensation est partiellement récupérable si un plan de compensation existe. Un état Approval Pause reprend via un event approve/reject. Un Terminal State n’est pas récupérable, par exemple COMPLETED ou FAILED après le nombre maximal de retries.

7. Pour aller plus loin

La state machine n’est qu’un point de départ. Le modèle d’état doit coller au scénario métier : chaque tâche a sa granularité d’état et sa stratégie de récupération.

ArticleRelationLien
Human-in-the-loop Agent : quelles étapes doivent passer par une approbation humaineDétails de la pause d’approbation/blog/fr/posts/ai/20260707-human-in-the-loop-agent-approval-design/
Contrôle des coûts Agent : model routing, budget d’outils et retry d’échecBudget et stratégie de retry/blog/fr/posts/ai/20260707-agent-cost-control-model-routing-tool-budget-cache-retry/
Gestion d’état LangGraph en pratique : bonnes pratiques d’architecture Agent 2026Gestion d’état LangGraph/blog/fr/posts/ai/20260424-langgraph-agent-architecture/
Monitoring, alerting et récupération d’échec pour AI Agent : des logs à la state machineMonitoring et récupération/blog/fr/posts/ai/20260527-ai-agent-monitoring-recovery/
LangGraph vs AutoGen : suivi d’étatComparaison de frameworks/blog/fr/posts/ai/20260526-langgraph-autogen-state-tracking/
Jeux de données d’évaluation Agent et tests de régression : éviter qu’un changement casse toutÉvaluation et tests de régressionÀ venir, prochain article de la série

Références externes

Sources à forte confiance :

SourceConfianceSujetLien
Documentation LangGraph PersistencehighCheckpointer, Store, Thread State, Checkpointhttps://docs.langchain.com/oss/python/langgraph/persistence
Documentation LangGraph Interruptshighinterrupt(), Command(resume=…), thread_idhttps://docs.langchain.com/oss/python/langgraph/interrupts
Documentation Temporal Durable ExecutionhighEvent History, Durable Execution, Resumable/Recoverablehttps://docs.temporal.io/temporal
Documentation OpenAI Agents SDK TracinghighTrace, Span, workflow_name, trace_idhttps://openai.github.io/openai-agents-python/tracing/
Documentation AWS Step Functions State MachineshighState Machine, Flow State, Task State, StartAt, Nexthttps://docs.aws.amazon.com/step-functions/latest/dg/concepts-statemachines.html
Stately: State machines and statechartsmediumState, Event, Transition, Guard, Action, Hierarchyhttps://stately.ai/docs/state-machines-and-statecharts

Une state machine n’est pas nécessaire pour tous les agents, mais les tâches complexes doivent rendre leur progression explicite. La prochaine étape n’est pas d’ajouter plus de frameworks. Elle consiste à concevoir les bons State, Event, Transition, Guard et Action pour votre scénario métier, puis à sortir la progression de la tâche du langage naturel du prompt pour la placer dans un état structuré.

Concevoir la state machine d'un agent IA complexe

Découper une tâche d'agent IA complexe en state, event, guard, action, checkpoint, retry, compensation et terminal state afin que la progression ne soit pas cachée uniquement dans le prompt.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: Lister les points à risque

    Listez les effets externes, les points de pause humaine, les points d'échec et les conditions terminales de la tâche.
  2. 2

    Step 2: Définir l'ensemble minimal d'états

    Définissez l'ensemble minimal d'états utiles : pending, running, waiting_approval, retrying, compensating, succeeded, failed, cancelled.
  3. 3

    Step 3: Relier events et états suivants

    Pour chaque state, écrivez les events acceptés et le next state produit par chaque event.
  4. 4

    Step 4: Ajouter les conditions de guard

    Ajoutez des guards aux transitions dangereuses : permission, budget, approval, clé d'idempotence et état de ressource externe.
  5. 5

    Step 5: Isoler les actions d'outils

    Placez les appels d'outils dans la couche action et enregistrez le résumé d'input, le résumé d'output, le traceId et le résultat de l'effet externe.
  6. 6

    Step 6: Définir les politiques d'échec

    Définissez la retry policy, le terminal state et la compensation policy pour chaque chemin d'échec.
  7. 7

    Step 7: Persister la base de récupération

    Définissez un checkpoint ou un event log pour la récupération, et traitez le prompt comme un contexte temporaire plutôt que comme l'unique source de vérité.

FAQ

Si l'agent échoue à l'étape 5, faut-il repartir de l'étape 1 ou continuer depuis un checkpoint ?
Cela dépend de l'idempotence des effets externes et de la qualité du checkpoint. Sans effet externe, on peut repartir du début. Avec des effets idempotents, il faut continuer depuis le checkpoint. Avec des effets non idempotents, il faut compenser d'abord, puis reprendre. Sans checkpoint, il ne reste qu'un redémarrage complet, avec le risque de dupliquer les effets externes.
L'état de la tâche doit-il vivre dans le prompt, une base de données, un checkpoint LangGraph ou un job de queue ?
Pour une tâche simple, le prompt peut servir de contexte temporaire. Une tâche complexe a besoin d'un checkpoint ou d'un event log plus un état métier. En production, on stocke souvent le thread state dans un checkpoint LangGraph, tandis que commandes, approbations, permissions et faits de facturation restent dans la base métier. Un job de queue est utile pour l'asynchrone, mais il ne remplace pas la gestion d'état.
Quelle est la différence entre une state machine et un diagramme de workflow ?
Une state machine met l'accent sur un ensemble fini d'états atteignables, des transitions déterministes, des guards et des actions. Un workflow décrit davantage une séquence d'étapes d'exécution. Un agent a besoin des concepts centraux de la state machine, sans forcément adopter toutes les fonctions d'un statechart comme la hiérarchie et la concurrence.
Comment garantir qu'un agent revient au même point d'exécution après approval ?
Utilisez la même thread_id et restaurez depuis un checkpoint, par exemple avec le modèle Command(resume=...) décrit dans la documentation LangGraph Interrupts. Le checkpoint doit enregistrer le nœud courant, les étapes terminées et l'action suivante, et les effets avant l'interrupt doivent être idempotents.
Les règles de retry et de compensation doivent-elles être dans le prompt ou dans les règles de transition d'état ?
Elles doivent être dans des règles de transition côté serveur, pas seulement dans le prompt. retry_count, max retry, clés d'idempotence, undo_op et terminal states doivent être testables, auditables et récupérables. Le prompt peut aider à juger, mais ne doit pas être le seul support des règles de fiabilité.
Un agent de support client simple a-t-il besoin d'une state machine ?
Un bot FAQ à un seul tour n'a généralement pas besoin d'une state machine lourde. Dès que l'agent consulte des commandes, crée des tickets, gère une approbation de remboursement, déclenche un paiement ou appelle des API externes, il lui faut un état explicite, des checkpoints, de l'idempotence et de la compensation.

14 min de lecture · Publié le: 17 sept. 2026

Commentaires

Connectez-vous avec GitHub pour laisser un commentaire

Easton BlogEaston Blog