Procédures structurées
Procédures structurées
Une séquence fixe d’étapes typées que votre agent exécute de la même manière à chaque fois
Présentation
Une procédure structurée est une procédure qui exécute une séquence fixe d’étapes. Une procédure en langage naturel fournit des indications en langage naturel que l’agent interprète et adapte à la situation. Une procédure structurée est une liste ordonnée d’étapes typées que l’agent exécute dans l’ordre chaque fois que la procédure s’applique.
Utilisez une procédure structurée lorsque certaines étapes doivent se dérouler de la même manière à chaque appel : vérifier l’identité d’un appelant, faire remonter un ticket ou effectuer un paiement. Vous la rédigez sous la forme d’une courte liste d’étapes en langage clair.
Comme toute procédure, une procédure structurée comporte un déclencheur qui décrit quand elle s’applique. Lorsqu’une conversation correspond au déclencheur, l’agent exécute les étapes de la procédure dans l’ordre, puis revient au reste de la conversation.

Quand utiliser une procédure structurée
Utilisez une procédure structurée lorsque certaines étapes doivent toujours s’exécuter de la même façon, tout en vous permettant de les rédiger rapidement sous forme d’étapes simples. Les procédures structurées sont plus faciles à rédiger qu’un workflow, mais moins expressives. Pour découvrir comment elles se comparent aux procédures en langage naturel, aux workflows et au prompt système, consultez Quand utiliser des procédures.
Anatomie d’une procédure structurée
Une procédure structurée comporte trois éléments : un nom, un déclencheur et une liste ordonnée d’étapes.
Nom
Un libellé court qui identifie la procédure dans le Dashboard. Le nom n’est jamais envoyé au LLM ; il n’affecte donc pas le comportement de l’agent.
Déclencheur
Une description en langage naturel du moment où l’agent doit exécuter cette procédure, par exemple Lorsque l’utilisateur demande le remboursement d’une commande. L’agent compare l’intention de l’utilisateur au déclencheur de chaque procédure et exécute celle qui correspond ; les déclencheurs doivent donc être concrets et distincts. L’agent ne voit que le texte du déclencheur, jamais le nom ni l’ID de la procédure. Un déclencheur fonctionne comme pour toute autre procédure ; consultez Rédiger des déclencheurs.
Laissez le déclencheur vide pour faire de la procédure une sous-procédure qui ne s’exécute que lorsqu’une autre procédure l’appelle.
Étapes
Le corps de la procédure est une liste ordonnée d’étapes typées. Il existe plusieurs types d’étapes, que vous combinez pour décrire la tâche.

Toutes les étapes ne peuvent pas apparaître partout. Dans une branche Si, vous pouvez utiliser n’importe quelle étape, sauf un autre Si ou Réessayer. Dans le gestionnaire d’échec d’une étape Outil, vous pouvez utiliser n’importe quelle étape, sauf Si ou un autre Outil.
Référence des étapes de l’API
Le content d’une procédure structurée est un document encodé en JSON qui contient un tableau steps. Chaque étape est un objet identifié par son type. Le déclencheur est un champ distinct de premier niveau dans la procédure, et ne fait pas partie de content. Les charges utiles de l’API et des SDK utilisent type: "deterministic" pour la procédure elle-même.
Ask
Une étape Ask demande à l’agent de solliciter des informations et d’attendre que l’utilisateur fournisse une réponse appropriée.
- Type API :
ask instruction: chaîne non vide obligatoire.
Tell
Une étape Tell demande à l’agent de générer un message unique avec ses propres mots. Elle n’attend pas de réponse de l’utilisateur avant de continuer.
- Type API :
tell instruction: chaîne non vide obligatoire.
Say
Une étape Say prononce le texte fourni exactement tel qu’il est écrit, puis continue. Fournissez message_translations pour donner à l’agent un message exact pour chaque langue supplémentaire qu’il prend en charge, indexé par code de langue.
- Type API :
say message: chaîne non vide obligatoire.message_translations: objet facultatif qui associe un code de langue à{ "value": "..." }.
If, else if et else
Une étape If contient un ou plusieurs embranchements conditionnels ordonnés. Le premier embranchement correspondant s’exécute. Le tableau fallback facultatif correspond à l’embranchement Else.
- Type API :
branch branches: liste non vide d’embranchements conditionnels obligatoire.fallback: liste facultative d’étapes Else.- Chaque embranchement requiert une
conditionet une listestepsnon vide.
Le comportement est celui d’un if/else-if/else :
- Les conditions sont évaluées dans l’ordre.
- Le premier embranchement correspondant s’exécute.
- Si aucune condition ne correspond,
fallbacks’exécute. - Une fois l’embranchement terminé, la procédure rejoint la séquence principale.
L’exemple ci-dessus utilise une condition textuelle, que le modèle évalue en langage naturel. Les conditions peuvent également être des expressions appliquées à des variables dynamiques :
Une condition d’expression teste des variables dynamiques, renseignées par les résultats d’outils ou définies au démarrage de la conversation. Elle ne peut pas lire la réponse la plus récente de l’utilisateur. Pour créer un embranchement selon ce que l’utilisateur a dit, utilisez une condition textuelle.
Tous les embranchements d’une même étape If doivent utiliser le même type de condition : llm ou expression.
Tool
Une étape Tool appelle un outil spécifique.
- Type API :
tool_call tool_id: ID d’outil non vide obligatoire. L’outil doit être associé à l’agent.tool_name: nom d’outil obligatoire, correspondant à l’outil.instruction: instruction facultative décrivant comment appeler l’outil.schema_overrides: valeurs fixes facultatives pour les paramètres de l’outil.on_failure: gestionnaire d’échec facultatif.
Valeurs fixes des paramètres
Utilisez schema_overrides lorsqu’un paramètre doit toujours prendre une valeur spécifique. Le modèle ne voit pas un paramètre remplacé et ne le choisit pas. Les clés sont des chemins de paramètres dans le schéma de l’outil ; chaque valeur désigne une source :
Gestion des échecs
Sans on_failure, l’échec d’un appel d’outil met fin à la conversation. Ajoutez on_failure pour exécuter plutôt des étapes de récupération.
fallback: liste non vide obligatoire des étapes exécutées lorsque l’outil échoue.branches: réservé à la gestion conditionnelle des échecs. Laissez ce champ vide.
Un gestionnaire d’échec peut contenir des étapes Ask, Tell, Say, Sub-procedure, System tool et Retry. Il ne peut pas contenir d’étapes Tool ou If. Une fois le gestionnaire exécuté, la procédure continue avec l’étape qui suit l’étape Tool.
Retry
Une étape Retry réexécute le gestionnaire d’échec qui la contient, y compris l’appel d’outil. Chaque tentative appelle à nouveau l’outil et, s’il échoue de nouveau, réexécute chaque étape du gestionnaire. Lorsque toutes les tentatives sont épuisées, la conversation prend fin.
- Type API :
retry max_retries: entier facultatif de 1 à 3. La valeur par défaut est 1.- La valeur compte les tentatives après l’appel d’outil initial.
- Retry n’est valide qu’à l’intérieur de
on_failure. - Retry doit être la dernière étape de son gestionnaire d’échec, car les étapes suivantes seraient inaccessibles.
Sub-procedure
Une étape Sub-procedure exécute une autre procédure structurée. Lorsque les étapes de cette procédure sont terminées, l’exécution revient à l’étape qui suit l’étape Sub-procedure.
- Type API :
sub_procedure procedure_id: ID de procédure non vide obligatoire.- La cible doit exister sur le même agent.
- La cible doit être une procédure structurée.
- Une procédure ne peut pas s’appeler elle-même.
System tool
Une étape System tool exécute une action système intégrée.
- Type API :
system_tool system_tool_name: nom d’outil système obligatoire.- Actuellement, seul
end_callest pris en charge. D’autres outils système pourront être ajoutés ultérieurement. - Puisque
end_callest terminal, il doit être la dernière étape de la séquence, de l’embranchement ou du gestionnaire d’échec qui le contient.
Règles de validation
La publication de l’agent ou l’enregistrement de son brouillon rejette toute procédure structurée qui enfreint l’une de ces règles. L’erreur indique l’étape concernée par son chemin.
- Deux étapes If ne peuvent pas être placées l’une à la suite de l’autre.
- Les étapes If ne peuvent pas être imbriquées.
- Une étape If avec des conditions d’expression ne peut pas suivre directement une étape Ask.
- Toutes les conditions d’une même étape If doivent être du même type :
llmouexpression. - Retry ne peut apparaître qu’à l’intérieur de
on_failureet doit y être la dernière étape. end_calldoit être la dernière étape de la liste dans laquelle il apparaît.- Le
fallbackd’un gestionnaire d’échec doit contenir au moins une étape. - Une Sub-procedure doit pointer vers une procédure structurée existante sur le même agent, et non vers elle-même.
tool_iddoit correspondre à un outil de l’agent,tool_namedoit correspondre à cet outil etschema_overridesdoit correspondre au schéma de l’outil.- La liste
steps, chaqueinstructionet chaquemessagedoivent être non vides.
Pour savoir comment restructurer une procédure qui enfreint l’une de ces règles, consultez les bonnes pratiques.
Exemple complet d’API
Cet exemple gère l’annulation d’une commande selon le statut de l’expédition. Il fixe un paramètre d’outil, traite l’échec d’un appel d’outil, appelle une autre procédure structurée, puis met fin à l’appel.
Exécution d’une procédure structurée
La transformation des étapes d’une procédure structurée dans le format exécuté par l’agent s’appelle la compilation. La plateforme compile chaque procédure structurée lors de la publication ; vous n’avez rien à compiler vous-même. Le résultat compilé est actuellement visible sous forme de nœuds en lecture seule dans l’onglet Workflow.
Lorsque la demande de l’utilisateur correspond au déclencheur d’une procédure, l’agent entre dans la procédure et exécute ses étapes dans l’ordre. Au sein de la procédure structurée, l’agent se concentre sur chaque étape isolément. Lorsqu’il arrive à la fin, il reprend le reste de la conversation.
Les règles suivantes décrivent le comportement des étapes à l’exécution.
Seule l’étape Ask attend l’utilisateur
Toutes les étapes autres que Ask s’exécutent immédiatement, puis le contrôle passe à l’étape suivante du même
tour. Une étape Tell ou Say transmet son message et continue. Aucune étape, à l’exception de Ask, ne met la
conversation en pause, et aucune étape ne termine le tour en cours. Si vous avez besoin d’une information de
l’utilisateur, utilisez une étape Ask. Si la conversation doit se terminer, utilisez l’outil système end_call.
La fin d’une procédure ne termine pas le tour
Lorsque la dernière étape se termine, la procédure prend fin et l’agent reprend le reste de la conversation, le tour étant toujours ouvert, il peut donc continuer à parler. Lorsqu’une sous-procédure se termine, le contrôle revient à l’étape suivante de la procédure qui l’a appelée.
Les étapes Tool distinguent uniquement la réussite de l’échec
Une étape Tool ne peut pas créer d’embranchement selon un code de statut ou le corps de la réponse. Si l’outil réussit, la procédure continue. S’il échoue et que l’étape n’a pas de gestionnaire d’échec, la conversation prend fin. Si elle en a un, les étapes du gestionnaire s’exécutent et la procédure passe à l’étape suivante. Un Retry dans le gestionnaire réexécute l’outil et, s’il échoue à nouveau, chaque étape du gestionnaire, jusqu’à ce que l’outil réussisse ou que les tentatives soient épuisées. Si elles sont épuisées, la conversation prend fin.
Les étapes If continuent lorsqu’aucune condition ne correspond
Les conditions sont évaluées dans l’ordre et la première correspondance s’exécute. L’embranchement Else s’exécute lorsqu’aucune condition ne correspond. En l’absence de Else et si aucune condition ne correspond, la procédure passe à l’étape suivant le If. Un cas non géré n’est pas une erreur.
Les embranchements If ne conservent pas l’état
Aucune décision prise au sein d’un embranchement If n’est mémorisée par les étapes suivantes. Si une information obtenue dans un embranchement est nécessaire ultérieurement, conservez-la explicitement avec un appel d’outil ou une variable dynamique.
Les étapes Ask, Tell et Say n’ont pas accès aux outils
Seules les étapes Tool peuvent appeler des outils. Il n’est pas nécessaire d’indiquer à une étape Ask, Tell ou Say de ne pas appeler d’outils, elle ne le peut pas.
Gérer une procédure structurée
Créer via le Dashboard
Gérer via la CLI
Gérer via l’API
Ouvrez votre agent dans le Dashboard, puis sélectionnez Procedures. Utilisez + pour créer une procédure structurée. Ajoutez un déclencheur, sélectionnez un type pour chaque étape et publiez les modifications de l’agent.
Le Dashboard valide les procédures structurées à mesure que vous les modifiez. Si une procédure enfreint une règle de validation, le bouton Publish affiche un état d’erreur, l’onglet Procedures affiche un badge d’erreur et l’aperçu ne peut pas démarrer tant que la procédure n’est pas corrigée. Sélectionnez l’indicateur d’erreur pour voir quelle procédure et quelle étape sont concernées.


Bonnes pratiques
Chaque type d’étape applique déjà son propre comportement, vous avez donc rarement besoin de le préciser. Décrivez l’objectif de chaque étape et laissez le type d’étape s’occuper du reste. Les recommandations ci-dessous couvrent les cas qu’il est important de bien configurer.
Choisir les types d’étapes
Posez une seule question par étape Ask
Une étape Ask attend une réponse. Si vous regroupez plusieurs questions dans une même instruction, l’agent a tendance à en ignorer certaines ou à les fusionner. Utilisez une étape Ask par information.
Utilisez Tell pour les déclarations et Ask pour les questions
Une étape Tell transmet son message et passe à la suite sans attendre. Une étape Tell formulée comme une question n’obtient jamais de réponse. Si une étape nécessite une réponse de l’utilisateur, utilisez Ask.
Donnez à une étape Ask une condition de sortie claire lorsque la question ne suffit pas
Une étape Ask avance dès qu’elle obtient une réponse appropriée. Si ce qui constitue une réponse n’est pas évident dans la question, précisez-le dans l’instruction, par exemple _Demandez l’identifiant de commande ; un identifiant valide comporte huit chiffres _.
Choisissez Tell pour la formulation, Say pour les mots exacts
Utilisez une étape Tell lorsque l’agent doit composer lui-même le message, et une étape Say lorsque la formulation doit être reproduite ou traduite à l’identique. Les deux transmettent exactement un message, il n’est donc pas nécessaire d’indiquer à une étape d’envoyer un seul message.
Ne demandez pas aux étapes sans outil d’éviter les outils
Les étapes Ask, Tell et Say ne peuvent pas appeler d’outils. Ajouter n’appelez aucun outil à ces étapes ajoute du bruit à l’instruction sans modifier le comportement.
Structurer la procédure
N’intercalez pas de contenu entre deux étapes If
Deux étapes If ne peuvent pas être placées l’une à la suite de l’autre. Insérer une étape Tell ou Say sans rapport entre elles pour respecter cette règle amène l’agent à dire quelque chose qu’il ne devrait pas. Intégrez plutôt la seconde décision dans la première étape If sous forme de branches Else if supplémentaires, ou placez-la dans une sous-procédure.
Placez les décisions imbriquées dans une sous-procédure
Les étapes If ne peuvent pas être imbriquées. Lorsqu’une décision dépend d’une autre, placez la décision interne dans sa propre procédure structurée et appelez-la avec une étape Sub-procedure depuis la branche qui en a besoin.
Ajoutez un Else lorsque « aucune des réponses ci-dessus » compte
Une étape If sans Else passe à l’étape suivante lorsqu’aucune condition ne correspond. Si le cas sans correspondance doit se comporter différemment, ajoutez une branche Else.
Conservez tout ce dont une étape ultérieure a besoin
Les décisions prises dans une branche If ne sont pas mémorisées ensuite. Si une étape ultérieure dépend d’une information apprise dans une branche, enregistrez-la avec un appel d’outil ou une variable dynamique dans cette branche.
Placez les conditions d’expression après l’outil qui les renseigne
Les conditions d’expression testent des variables dynamiques. Placez une étape If qui les utilise juste après l’étape Tool qui définit ces variables. Pour créer une branche selon ce que l’utilisateur a dit, utilisez une condition de texte.
Extrayez les étapes partagées dans une sous-procédure
Lorsque plusieurs procédures structurées partagent la même séquence, par exemple le transfert à un humain, placez-la dans une procédure structurée avec un déclencheur vide et appelez-la depuis chacune. Les séquences copiées divergent au fil du temps.
Utiliser des outils
Contrôlez une étape Tool avec une étape If, pas avec son instruction
Une étape Tool appelle toujours son outil. Une condition écrite dans l’instruction, comme _ignorez cette étape si le ticket est déjà étiqueté _, ne peut pas empêcher l’appel. Si l’appel ne doit pas toujours avoir lieu, placez la condition dans une étape If avant l’étape Tool.
Définissez les valeurs des paramètres au lieu de les décrire
Lorsqu’un paramètre doit toujours prendre une valeur précise, définissez-le avec un remplacement constant dans
schema_overrides. Une instruction comme définissez toujours le statut sur en attente demande au modèle de
s’y conformer ; un remplacement est appliqué et ne peut pas être ignoré.
Ajoutez un gestionnaire d’échec à chaque étape Tool
Sans on_failure, tout échec d’outil met fin à la conversation. Ajoutez un gestionnaire qui indique à l’utilisateur
ce qui s’est passé, puis réessaie, transfère ou poursuit.
Limitez les étapes Tool à l’appel d’outil
Une étape Tool exécute uniquement l’outil ; l’agent ne peut ni parler ni prendre de décision pendant son exécution. Pour parler à l’utilisateur ou créer une branche selon ce que l’outil a renvoyé, utilisez une étape distincte avant ou après l’étape Tool.
Rédiger les instructions
Décrivez uniquement l’étape en cours
La procédure contrôle l’exécution de la suite, et l’agent n’a pas connaissance des étapes ultérieures pendant l’exécution de l’étape en cours. Laissez l’ordre des étapes gérer l’enchaînement.
N’essayez pas de terminer le tour avec du texte
Les phrases écrites dans les instructions d’étape, comme ceci est le dernier message de ce tour, demandent
à l’agent d’appliquer une limite que la plateforme ne gère pas. Utilisez une étape Ask pour attendre l’utilisateur ou
l’outil système end_call pour terminer la conversation.
Conservez les règles globales dans le prompt système
Le ton, la mise en forme, les formules de clôture et les politiques de refus relèvent du prompt système. Une instruction d’étape doit indiquer uniquement ce qui est propre à cette étape.
Composer des procédures
Les recommandations générales pour composer des procédures s’appliquent aussi aux procédures structurées ; consultez Composer des procédures sur la page des procédures de forme libre.
Un modèle est propre au mélange des types : une procédure de forme libre peut référencer une procédure structurée. Conservez le traitement ouvert dans une procédure de forme libre et déléguez les parties qui doivent s’exécuter de la même manière à chaque fois, comme la vérification d’identité ou le transfert, à une procédure structurée.
Limites
- Les étapes If ne peuvent pas être imbriquées, et deux étapes If ne peuvent pas être placées l’une à la suite de l’autre.
- Le seul outil système pris en charge est
end_call. - Les procédures structurées ne peuvent pas référencer de documents de la base de connaissances.
- Il n’est pas possible de terminer le tour en cours lorsqu’une procédure se termine ; l’agent garde le tour ouvert et peut continuer à parler.
- Une procédure structurée ne peut pas être démarrée depuis un nœud de workflow spécifique dans le Dashboard.
- Démarrer une procédure ajoute de la latence : l’agent effectue un appel d’outil pour y entrer, puis parcourt le workflow généré.
Prise en charge par les fournisseurs de modèles
Les procédures structurées imposent des appels d’outil internes lors de l’entrée dans une sous-procédure et de l’exécution d’une procédure. Les principales familles de modèles OpenAI, Anthropic, Gemini et Grok prennent en charge le choix forcé d’outil. D’autres modèles ou fournisseurs personnalisés peuvent ne pas le garantir, ce qui peut rendre les transitions vers les sous-procédures ou la fin des procédures moins fiables. Vérifiez la prise en charge du choix forcé d’outil lorsque vous utilisez un autre fournisseur de modèles.
Consultez Procédures pour connaître les limites applicables à toutes les procédures, notamment la limite de taille du contenu et les différences entre procédures structurées et procédures de forme libre.