Bonnes pratiques générales de conception d'agents

Ce guide présente les bonnes pratiques générales pour concevoir tous les types d'agents.

Consultez également le guide de conception d'un agent vocal, qui est spécifiquement destiné à la conception d'agents vocaux, ainsi que le guide des bonnes pratiques pour utiliser le service d'agents de conversation (Dialogflow CX).

Conseils généraux

Créer des agents de manière itérative

Si vous souhaitez concevoir un agent complexe ou de grande taille, commencez par créer une boîte de dialogue qui ne traite que les requêtes de niveau supérieur. Une fois la structure de base établie, perfectionnez le fil de la conversation pour vous assurer que toutes les voies qu'un utilisateur final pourrait emprunter sont envisagées.

À mesure que votre agent évolue, envisagez d'utiliser la fonctionnalité Scénarios de test pour le développement piloté par les tests.

Agents prédéfinis

Les agents de conversation (Dialogflow CX) proposent des modèles d'agents pour vous aider à démarrer. Les agents prédéfinis couvrent les cas d'utilisation courants tels que les services financiers, les télécommunications et les voyages. Ces agents sont fournis avec des intents et des entités couvrant les requêtes utilisateur les plus répandues. Ajoutez des itinéraires et des modes de traitement spécifiques à votre entreprise, et vous disposerez rapidement d'un agent opérationnel.

Intégrations et connexion de vos services

Il existe plusieurs façons d'intégrer des agents de conversation (Dialogflow CX). Cette section présente les bonnes pratiques à suivre pour choisir la méthode d'intégration.

Intégrations

Les intégrations des agents de conversation (Dialogflow CX) fournissent une interface utilisateur prête à l'emploi pour votre agent. Si vous utilisez une intégration, vous n'avez pas besoin d'appeler directement l'API des agents conversationnels (Dialogflow CX), car les intégrations s'en chargent. Ces intégrations peuvent fournir un agent de chat que vous pouvez intégrer à votre site Web, vous connecter à d'autres plates-formes de messagerie ou fournir une interface de téléphonie.

API Conversational Agents (Dialogflow CX)

Si aucune des intégrations prêtes à l'emploi ne convient ou si vous souhaitez personnaliser l'interface pour votre système, vous pouvez utiliser directement l'API des agents conversationnels (Dialogflow CX). Avec cette approche, vous devrez implémenter l'interface utilisateur de votre agent ou utiliser une interface utilisateur existante.

Webhooks

À moins que votre agent puisse être entièrement défini à l'aide de données statiques, vous devez utiliser des webhooks pour connecter votre service et fournir un agent capable de gérer des scénarios dynamiques. Cette règle s'applique que vous utilisiez des intégrations ou l'API des agents de conversation (Dialogflow CX).

Ressources pour les agents

Les ressources des agents de conversation (Dialogflow CX) peuvent être utilisées de différentes manières pour obtenir le résultat souhaité. Cette section fournit des conseils pour choisir les ressources appropriées pour les scénarios appropriés.

Flux et pages

Les flux et les pages apportent de la structure à votre agent. Vous pouvez considérer les pages comme des nœuds dans une machine à états et les flux comme des groupes de pages associées. Vous contrôlez les transitions entre les nœuds à l'aide de gestionnaires d'état, qui sont appelés lorsqu'un intent est mis en correspondance, qu'une condition est remplie ou qu'un événement est appelé.

Un agent simple peut fonctionner correctement avec un seul flux, mais les agents complexes sont presque toujours mieux conçus avec plusieurs flux. Chaque flux doit représenter un sujet d'ordre général pour votre agent, et chaque page associée au flux doit l'aider à gérer le sujet. De plus, chaque flux peut avoir ses propres paramètres et peut être géré par un sous-ensemble de membres de l'équipe, ce qui permet de répartir le travail lors de la conception d'agents volumineux.

Lorsque vous concevez un agent volumineux et complexe, vous devez tenir compte des limites de flux par agent et de pages par flux. Ces limites permettent de maintenir les performances de votre agent.

Si votre conception d'agent comporte trop de flux par agent, combinez les sujets associés dans un seul flux. Par exemple, vous pouvez combiner les sujets suivants dans un seul flux "Obtenir le solde" :

  • Obtenir le solde du compte courant
  • Obtenir le solde de vos économies
  • Obtenir le solde d'un prêt hypothécaire
  • Obtenir le solde de crédit

Si la conception de votre agent comporte trop de pages par flux, combinez les pages associées et utilisez de nombreux itinéraires par page.

Si vous rencontrez toujours des difficultés avec le flux et les limites de pages, cela peut être dû au fait que vous avez intégré trop de logique métier dans l'agent lui-même. Envisagez de déplacer cette logique vers des webhooks.

Le tableau suivant liste la précision du contrôle des conversations des ressources de l'agent par ordre croissant de précision:

  1. Agents (un agent gère toutes les conversations)
  2. Flux (un flux gère un ou plusieurs sujets de conversation associés)
  3. Pages (une page gère une ou plusieurs phases de conversation associées)
  4. Routes (une route gère un intent utilisateur ou une vérification de condition)

Paramètres d'intent par rapport aux paramètres de formulaire

La principale façon dont votre système obtient des données structurées de l'utilisateur final est via des paramètres. Vous pouvez utiliser des paramètres pour les intents (paramètres d'intent) ou les pages (paramètres de formulaire).

L'objectif principal de certaines pages est de collecter des informations spécifiques auprès de l'utilisateur final. Par exemple, une page peut être conçue pour collecter les coordonnées de l'utilisateur final. Dans ce cas, vous devez toujours utiliser des paramètres de formulaire pour collecter ces informations.

Dans certains cas, vous pouvez souhaiter collecter des informations sur l'utilisateur final lors de la transition d'une page à une autre. Par exemple, si l'utilisateur final demande un produit particulier au début de la conversation, vous devez saisir le produit souhaité tout en passant à la page de commande appropriée. Dans ce cas, utilisez des paramètres d'intent dans le cadre de parcours d'intent.

Il existe également des situations où il est idéal d'utiliser à la fois des paramètres d'intent et des paramètres de formulaire. Par exemple, si l'utilisateur final demande un t-shirt de taille S au début de la conversation, vous devez capturer le paramètre de taille souhaité (S) lors de la transition vers la page de commande de t-shirt. La page de commande de la chemise peut demander des informations supplémentaires, comme la couleur souhaitée. La page de commande de t-shirts doit comporter des paramètres de formulaire pour la taille et la couleur. Dans cet exemple, le paramètre de taille a déjà été fourni et est propagé. L'agent ne demande donc que la couleur. Toutefois, d'autres conversations peuvent suivre un chemin différent, où l'utilisateur final n'a pas indiqué la taille souhaitée lorsque la page de commande de chemises devient active. En définissant ce paramètre dans les deux sens, votre agent est plus flexible dans la manière dont il extrait les informations.

Routes et groupes de routes

Si vous souhaitez passer à une autre page, mettre en file d'attente un message de réponse ou appeler un webhook lorsqu'un intent est mis en correspondance ou qu'une condition est remplie, utilisez des routes.

Si vous utilisez le même ensemble d'itinéraires sur plusieurs pages, utilisez des groupes d'itinéraires. Vous éviterez ainsi toute duplication inutile dans la conception de votre agent.

Réutilisation des intents

Si vous vous trouvez à définir plusieurs intents avec des expressions d'entraînement similaires, envisagez de réutiliser les intents sur plusieurs pages. Idéalement, vous devez définir des intents à usage général utilisés sur de nombreuses pages et des intents spécifiques utilisés sur une seule page. Vous éviterez ainsi toute duplication inutile dans la conception de votre agent.

Par exemple, les intents de confirmation sont généralement mieux définis comme des intents réutilisables. Un intent confirmation.yes peut comporter des phrases d'entraînement telles que:

  • oui
  • oui
  • ouais
  • OK
  • oui
  • complètement
  • tout à fait
  • oui s'il te plaît

Un intent confirmation.no peut comporter des phrases d'entraînement telles que:

  • non
  • nah
  • non
  • pas moyen
  • pas pour moi
  • absolument pas
  • non, merci

Ces intents de confirmation réutilisables peuvent être utilisés dans de nombreux scénarios pour votre agent.

Dans certains cas, vous devez également envisager de créer des intents de confirmation spécialisés. Par exemple, lorsque vous confirmez une commande, vous pouvez utiliser un intent order.confirmation.yes spécialisé avec des phrases d'entraînement telles que:

  • L'ordre me semble correct
  • J'accepte cette commande

Et un intent order.confirmation.no spécialisé avec des phrases d'entraînement telles que:

  • Je ne veux pas de cette commande
  • Je n'accepte pas cette commande

Lorsque votre page de confirmation de commande est active, les routes d'intent pour chacun de ces quatre intents doivent être incluses dans le champ d'application. Cela garantit que toute confirmation générique ou spécifique de l'utilisateur final sera gérée de manière appropriée.

Intent négatif par défaut

Vous devez renseigner l'intent négatif par défaut avec des expressions que vos utilisateurs finaux pourraient dire, mais qui ne doivent pas correspondre à un intent de votre agent.

Fulfillment

Il existe de nombreuses options pour utiliser le traitement pour répondre à l'utilisateur final. Lors d'un tour de conversation, l'agent peut ajouter plusieurs messages à la file d'attente de réponses. La file d'attente concaténée est envoyée à l'utilisateur final à la fin du tour de conversation. Cette section décrit chaque option permettant de créer des messages individuels.

  • Fulfillment d'entrée de la page : ce fulfillment est appelé lorsque la page devient active. Il est utile lorsque vous souhaitez qu'un message décrive l'objectif de la page. Il ne doit être lu qu'une seule fois lorsque la page est active. Exemple :
    • Que voulez-vous savoir sur votre compte courant ?
    • Quel type de produit souhaitez-vous acheter ?
    • J'ai besoin de quelques informations sur la chemise que vous souhaitez commander.
  • Routes : ce fulfillment est appelé lorsqu'une route d'intent ou une route de condition avec fulfillment est appelée. Cela est utile lorsque vous souhaitez qu'un message réponde à l'utilisateur final sur la correspondance d'intent, la condition remplie (qui peut être une condition de fin de remplissage de formulaire) ou la transition. Exemple :
    • Oui, le Japon est inclus dans votre forfait international. (correspondance d'intent)
    • Voulez-vous vraiment acheter 300 chemises ? (condition de comparaison remplie)
    • D\'accord. Votre rendez-vous est prévu pour demain matin à 7h. (finalisation du remplissage du formulaire)
    • OK, passons maintenant aux aardvarks. (transition)
  • Gestionnaires d'événements : ce traitement est appelé lorsqu'un événement est appelé. Elle est utile lorsque vous souhaitez qu'un message réponde à l'événement. Exemple :
  • Invites initiales pour formulaires : ce fulfillment est appelé lorsque l'agent remplit le formulaire. Ces messages doivent poser une question spécifique à l'utilisateur final. Chaque paramètre de formulaire dispose de son propre traitement de l'invite initiale. Exemple :
    • Quelle taille de t-shirt souhaitez-vous ?
    • De quelle couleur voulez-vous la chemise ?
  • Gestionnaires de nouvelles invites pour les formulaires : cette exécution est appelée lorsque l'agent remplit un formulaire et qu'il ne comprend pas la sélection de l'utilisateur final pour le paramètre actuel. Cette exécution n'est nécessaire que si vous souhaitez que le message de nouvelle invite soit différent du message d'invite initiale. Si aucun gestionnaire de nouvelles invites n'existe, l'agent utilisera simplement l'invite initiale comme message de nouvelle invite. Exemple :
    • Je ne comprends pas. Pouvez-vous indiquer une couleur valide pour la chemise ?

Dénomination

Cette section fournit des conseils pour nommer les ressources de l'agent.

Nommer les intents

Si votre agent dispose de nombreux intents, vous devez envisager un schéma de nommage qui vous aidera à les organiser. Il est courant de segmenter les noms d'intents avec des signes de ponctuation, avec une spécificité croissante de gauche à droite. De plus, un nom d'intent doit refléter l'intention de l'utilisateur final pour un tour de conversation.

Il existe de nombreux schémas de nommage. En voici un exemple :

  • phone-service.order.cancel
  • phone-service.order.create
  • phone-service.order.change
  • tv-service.order.cancel
  • tv-service.order.create
  • tv-service.order.change
  • account.balance.get
  • account.balance.pay
  • account.address.get
  • account.address.update

Transitions

Les transitions définies dans les gestionnaires d'état permettent de contrôler la conversation en modifiant la page active. Cette section fournit des conseils pour organiser les transitions de vos agents.

Transitions complémentaires

Lorsque vous définissez un parcours qui déclenche une transition, tenez compte du fait qu'il peut exister un parcours complémentaire ou inverse.

Exemple :

  • Si vous avez un parcours d'intent pour confirmation.yes, envisagez de définir un autre parcours pour confirmation.no.
  • Si vous définissez une route conditionnelle avec un opérateur booléen =, envisagez de définir une autre route qui utilise !=.

Gérer les entrées des utilisateurs finaux

Cette section fournit des consignes concernant les intents et les phrases d'entraînement afin que votre agent puisse gérer et traiter de manière optimale les entrées des utilisateurs finaux.

Définir au moins 20 phrases d'entraînement

Vous devez disposer d'au moins 20 expressions d'entraînement pour chaque intent. Sinon, le modèle de NLU risque de ne pas disposer d'informations suffisantes pour correspondre correctement à votre intention. Il s'agit d'une recommandation minimale. Idéalement, vous devez en définir davantage, en particulier pour les intents principaux des grands agents, où environ 50 est souhaitable.

Tenir compte des biais d'intention

Lorsqu'un ou plusieurs intents comportent beaucoup plus de phrases d'entraînement que les autres, le modèle de NLU est biaisé en faveur des intents plus importants en raison de données déséquilibrées. Ce biais d'intention peut se produire lorsque la quantité d'expressions d'entraînement diffère d'un ordre de grandeur ou plus.

Dans certains cas, il s'agit d'un comportement souhaité, car vous pouvez définir des intents qui doivent être mis en correspondance plus souvent que d'autres, car ils correspondent aux entrées des utilisateurs finaux les plus fréquemment observées dans le trafic en temps réel.

Dans d'autres cas, ce comportement peut être indésirable, car vous ne souhaitez pas de biais en faveur de ces intents plus importants. Dans ce cas, réduisez le nombre de phrases d'entraînement pour ces intents plus volumineux afin qu'il soit du même ordre de grandeur que celui des autres intents. Exemple :

Phrases d'entraînement de l'intent A Phrases d'entraînement de l'intent B Biais pour l'intent B
20 50 Non
20 200 Passable
20 2000 Oui

Utilisation des entités et quantité d'expressions d'entraînement

Pour tous les types d'entités utilisés dans un intent:

  • Annotez chaque exemple des types d'entités.
  • Pour chacun des types d'entités, fournissez au moins cinq expressions d'entraînement contenant des exemples annotés.
  • Fournissez au moins trois fois plus d'expressions d'entraînement que de types d'entités. Par exemple, si vous utilisez 10 types d'entités différents pour les annotations d'un intent, vous devez disposer d'au moins 30 expressions d'entraînement.

Les expressions d'entraînement doivent être naturelles

Les phrases d'entraînement doivent être naturelles et ressembler à des conversations. Dans la mesure du possible, utilisez les entrées des utilisateurs finaux qui ont eu lieu en production comme données d'entraînement, en accordant une attention particulière aux plus courantes.

Variété nécessaire des expressions d'entraînement

Incluez des variantes de questions, de commandes, de verbes et de synonymes pour les noms communs afin de vous assurer que les expressions couvrent un large éventail de requêtes possibles.

Il est préférable d'inclure des expressions courtes comme "payer ma facture", ainsi que des phrases plus longues comme "Je viens de recevoir un courrier m'indiquant que je dois payer le solde de mon relevé". Il n'existe pas de proportion recommandée entre les phrases courtes et longues, mais vous devez vous baser sur les entrées réelles des utilisateurs finaux envoyées à votre agent en production.

Il est important de définir des phrases d'entraînement dont la longueur, la formulation et la structure de phrase varient pour assurer une bonne formation de votre agent. Il n'est pas nécessaire d'ajouter de la variété pour le plaisir, mais il est nécessaire de fournir suffisamment de variété pour que le modèle de NLU puisse détecter avec succès l'intention de l'utilisateur final à partir d'un large éventail d'entrées de l'utilisateur final. Si vous ne disposez pas d'une variété suffisante, vous risquez de trop adapter le modèle. En d'autres termes, il existe un risque que le modèle soit trop étroitement lié aux exemples particuliers que vous fournissez et qu'il ne soit pas suffisamment généralisé à d'autres exemples.

Variété de la capitalisation

La sensibilité à la capitalisation varie selon le modèle de NLU utilisé par votre agent.

NLU standard

Le modèle de NLU standard n'est pas sensible à la casse. Dans de rares cas, vous devrez peut-être ajouter des expressions d'entraînement qui ne varient que par la casse. Cela s'applique généralement aux situations où vous attendez des utilisateurs finaux qu'ils fournissent des entrées textuelles en majuscules.

Voici quelques exemples d'approches alternatives:

  • Abaissement du seuil de classification du ML
  • Mettre les entrées des utilisateurs finaux en minuscules avant de les envoyer aux agents de conversation (Dialogflow CX)

NLU avancé

Contrairement au modèle de NLU standard, le modèle de NLU avancé est sensible à la casse. Nous vous recommandons de tester et d'ajouter les données d'entraînement en majuscules pertinentes pour augmenter les taux de correspondance d'intention.

Variété inutile des expressions d'entraînement

Évitez les variations insignifiantes dans les phrases d'entraînement, car elles fournissent des informations en double au modèle de NLU. Par exemple, n'incluez pas de variantes qui ne diffèrent que par:

  • Capitalisation: si vous utilisez le modèle de NLU standard, évitez les phrases en double, sauf "Commander un billet" et "commander un billet", sauf dans de rares cas. Toutefois, le modèle de NLU avancé est sensible à la casse et nécessite davantage de phrases d'entraînement pour améliorer les correspondances d'intention. Pour en savoir plus, consultez la section Variétés de majuscules.
  • Mots de remplissage : par exemple, "OK, commandez un billet" et "commandez un billet".
  • Ponctuation : par exemple, "Pouvez-vous m'aider ?" et "Pouvez-vous m'aider !?"

Cohérence des annotations

La partie de la phrase d'entraînement sélectionnée pour une annotation ne doit inclure que le texte nécessaire pour faire correspondre une entité. Assurez-vous également que les parties similaires des phrases d'entraînement sont annotées pour l'ensemble de l'intent.

Par exemple, le tableau suivant présente les bonnes et mauvaises façons d'annoter avec l'entité système @sys.date:

Bon Mauvais
Départ le 7 septembre Départ le 7 septembre
Départ le 4 juillet Départ le 4 juillet

Utiliser des annotations sémantiquement pertinentes pour les entités système

La signification sémantique d'une partie de phrase d'entraînement sélectionnée pour une annotation peut être affectée par le reste du texte de la phrase d'entraînement. Exemple :

Phrase d'entraînement annotée Signification sémantique du texte annoté
J'ai 7 ans Âge d'une personne
Le contrat est valable sept ans. Durée

Les modèles de machine learning des agents de conversation (Dialogflow CX) tiennent compte de la signification sémantique lors de la mise en correspondance des entités système. La signification sémantique de la partie de la phrase d'entraînement doit correspondre à la signification sémantique prévue de l'entité système.

Par exemple, n'utilisez pas l'entité système @sys.duration pour annoter le premier exemple "7 ans" ci-dessus. La signification sémantique de "7 ans" ne correspond pas à une simple durée. Vous devez plutôt sélectionner "7" pour l'annotation et utiliser l'entité système @sys.number.

Définir des intents pour gérer les réponses non conformes au remplissage de formulaires

Envisagez de définir des intents pour gérer les réponses non conformes au remplissage de formulaires. Par exemple, votre agent peut demander "Quelles sont vos dates de voyage ?", puis l'utilisateur final peut répondre "Je ne sais pas encore". Cette réponse ne répond pas à l'invite du paramètre de formulaire, mais si votre agent dispose d'un routage d'intent dans le champ d'application qui peut correspondre à cette réponse, il peut gérer la situation.

Éviter @sys.any

Évitez d'utiliser le type d'entité système @sys.any. N'utilisez cette option que si vous avez épuisé toutes les autres possibilités, y compris la création d'entités personnalisées. Ce type d'entité est très large et peut entraîner un comportement indésirable.

Si vous utilisez ce type d'entité, évitez d'annoter plusieurs parties d'une même phrase d'entraînement avec ce type d'entité, car cela crée une ambiguïté et le comportement de l'agent n'est pas défini.

Il est moins dangereux d'utiliser @sys.any avec des paramètres de formulaire, car l'agent attend des informations spécifiques lorsqu'il demande des paramètres de formulaire.

Les annotations doivent inclure différentes valeurs d'entité

Lorsque vous définissez des expressions d'entraînement annotées, vous devez utiliser différents exemples de valeurs d'entités dans les expressions. Vous ne devez pas utiliser systématiquement le même exemple d'entité pour les annotations. L'exemple suivant montre des annotations correctes et incorrectes pour un type d'entité de produit:

Bon Mauvais
Je souhaite acheter une chemise Je souhaite acheter une chemise
Commander une nouvelle casquette Commander une nouvelle chemise
Ajouter une montre à mon panier Ajouter une chemise à mon panier

Les entités personnalisées doivent inclure de la variété

Les entités personnalisées doivent couvrir un large éventail d'exemples. Le modèle de NLU fournira de la variété pour les formes grammaticales, mais vous devez inclure tous les éléments possibles.

Éviter les entités qui correspondent de manière agressive

Ne définissez pas d'entités pouvant correspondre à pratiquement n'importe quoi. Cela dégrade les performances et la qualité du ML. Chaque terme ou presque de chaque expression d'entraînement sera évalué comme une correspondance possible.

Les entités de carte et de liste doivent se concentrer sur des valeurs distinctes

Les types d'entités de carte et de liste doivent avoir une portée limitée qui capture les différentes valeurs possibles d'un type d'information. Veillez à ce que vos entités soient ciblées, simples et concises.

Si les valeurs de votre entité sont complexes, cela peut être dû au fait que des expressions d'entraînement de l'intent sont mieux adaptées à votre situation. Prenons l'exemple d'une entrée utilisateur final:

  • "Comment puis-je passer un appel international avec le forfait A ?"
  • "Utiliser l'itinérance des données à l'international avec le forfait B"

Évitez de créer des types d'entités à la fois pour les actions et les forfaits, comme suit:

Type d'entité "Actions" Type d'entité "Plans"
"Comment puis-je passer un appel international ?" "Plan A"
"Utiliser l'itinérance des données à l'international" "Plan B"

Utilisez plutôt d'un côté des expressions d'entraînement et des correspondances d'intent pour capturer les actions, et de l'autre, des entités pour capturer les forfaits.

Utiliser des entités d'expression régulière pour capturer des identifiants autres que des mots

Lorsque vous capturez l'entrée de l'utilisateur final qui implique des identifiants autres que des mots, vous devez utiliser des entités d'expression régulière. Par exemple, pour capturer des ID de produit tels que "AA-256" ou "AC-436", utilisez une entité regexp telle que "[A-Z]{2}-\d{3}".

Éviter d'imbriquer des entités composites

N'utilisez pas plus d'un niveau d'imbrication dans les entités composites. Chaque niveau d'imbrication dégrade considérablement la qualité.

Éviter les intents similaires

Chaque intent doit capturer l'intention de l'utilisateur final. Si vous définissez des intents différents avec des expressions d'entraînement similaires, la mise en correspondance peut être peu fiable, car le modèle de NLU ne peut pas déterminer avec suffisamment de confiance à quel intent correspondre.

Si deux phrases d'entraînement représentent la même intention, elles doivent appartenir au même intent. Par exemple, "modifier la date d'échéance de la facture actuelle" et "plus de temps pour payer" doivent tous deux appartenir au même intent, car ils demandent tous deux un changement de date d'échéance. Toutefois, les requêtes "Puis-je passer un appel international avec le forfait A ?" et "Puis-je utiliser l'itinérance des données à l'international avec le forfait A ?" peuvent appartenir à des intents différents, car l'utilisateur final souhaite une chose différente dans chaque cas.

Éviter les types d'entités similaires

Évitez de définir plusieurs types d'entités ayant des entrées d'entités similaires, car cela peut entraîner une ambiguïté pour le modèle de NLU.

Utiliser des événements de non-correspondance en production pour améliorer vos intents

Lorsque vous exécutez votre agent en production, il est inévitable que certaines entrées de l'utilisateur final génèrent des événements sans correspondance. Vous pouvez utiliser ces opportunités pour améliorer votre agent de l'une des trois manières suivantes:

  • Ajoutez l'entrée de l'utilisateur final en tant que phrase d'entraînement à l'intent souhaité. Toutefois, ce n'est pas toujours la meilleure option. Si vous le faites plusieurs fois pour l'intent, cela peut entraîner un biais d'intent.
  • Nettoyez les expressions d'entraînement pour l'intent souhaité afin qu'elles reflètent toutes précisément l'intention. Dans certains cas, les intents avec des expressions d'entraînement divergentes peuvent empêcher la mise en correspondance de l'intent.
  • Si des intents qui ne doivent pas être mis en correspondance avec l'entrée de l'utilisateur final comportent des expressions d'entraînement qui pourraient correspondre à l'entrée de l'utilisateur final, supprimez ces expressions d'entraînement.

Éviter les caractères spéciaux

Les caractères spéciaux des expressions d'entraînement ({, _, #, [, etc.) sont ignorés. Les émoticônes constituent toutefois une exception et fonctionnent comme prévu.

Éviter les mots de remplissage

Les mots de remplissage sont des mots que vous pouvez ignorer tout en comprenant le texte. Exemple :

  • s'il te plaît
  • peux-tu
  • hmmm
  • Que diriez-vous de

Il est inutile, mais inoffensif, d'utiliser des mots de remplissage dans les phrases d'entraînement, car ils sont ignorés par le modèle de NLU. Toutefois, vous ne devez pas définir de phrases d'entraînement qui ne varient que par des expressions de remplissage.

Ne définissez jamais d'entités composées de mots de remplissage.

Tester les paramètres de ML

Les paramètres de ML permettent d'ajuster le traitement des entrées de l'utilisateur final. Dans la plupart des cas, les paramètres par défaut fonctionnent correctement. Toutefois, vous pouvez affiner les paramètres pour améliorer les performances de votre agent.

Répondre à l'utilisateur final

Cette section fournit des instructions sur l'utilisation du traitement pour répondre à l'utilisateur final.

Accueillir l'utilisateur final

Un agent nouvellement créé dispose d'une route d'intent créée automatiquement pour l'intent d'accueil. Vous devez modifier cette route pour inclure un message de traitement qui accueille l'utilisateur final. Ce message doit décrire l'agent et donner à l'utilisateur final une idée de ses capacités.

Prendre en compte les informations des utilisateurs finaux

Il est souvent préférable de répéter les informations fournies par l'utilisateur final dans les réponses. Cela permet à l'utilisateur final de savoir que l'agent comprend sa demande.

Lorsqu'un intent est mis en correspondance et qu'une transition se produit, informez l'utilisateur final que la conversation progresse en fonction de sa requête. Exemple :

Dialogue Description
Utilisateur final: J'ai des questions sur mon compte courant.
Agent: D\'accord. Que voulez-vous savoir sur votre compte courant ?
L'entrée de l'utilisateur final a généré une correspondance d'intent, et un parcours a été suivi, qui comprenait un message de traitement et une transition vers une page qui gère les questions sur les comptes courants. Notez que l'agent confirme que l'utilisateur final souhaite obtenir des informations sur son compte courant.

Une fois le formulaire rempli, répétez les données fournies par l'utilisateur final. Exemple :

Dialogue Description
Utilisateur final: Demain
Agent: D\'accord, votre rendez-vous est prévu pour demain à 19h. Puis-je faire autre chose pour vous ?
L'utilisateur final a fourni le paramètre de formulaire de date, qui était le dernier paramètre de formulaire de la page active. L'agent a confirmé l'heure et la date d'un rendez-vous de coiffure.

Guider la conversation

L'agent doit toujours guider la conversation avec l'utilisateur final. Pour ce faire, terminez chaque réponse par une question comme:

  • Puis-je faire autre chose pour vous ?
  • Que voulez-vous savoir sur les beagles ?
  • Voulez-vous annuler ou envoyer cette commande ?
  • Que puis-je faire pour vous aujourd'hui ?
  • Voyagez-vous seul ou avec quelqu'un ?

Lorsque vous définissez ces questions, veillez à ne pas poser plusieurs questions comme:

  • Vous êtes toujours là ? Quel service vous intéresse ?
  • Voulez-vous toujours cette commande ? Avez-vous autre chose à ajouter ?

L'utilisateur final ne répondra peut-être qu'à l'une des questions, et votre agent ne gérera peut-être pas cette situation correctement.

Gérer les erreurs et les entrées inattendues de l'utilisateur final

Cette section fournit des conseils sur la gestion des erreurs et des entrées inattendues de l'utilisateur final.

Créer des gestionnaires d'événements pour les événements intégrés

Vous devez créer des gestionnaires d'événements pour les événements intégrés, le cas échéant. La gestion de ces événements est semblable à la capture d'exceptions dans la programmation logicielle. Selon la situation, vous pouvez gérer les événements avec des gestionnaires d'événements spécifiques aux paramètres, aux pages ou aux flux.

Gérer les erreurs de webhook

Lorsque votre service de webhook échoue, il est important que votre agent puisse gérer l'échec de manière élégante. Pour ce faire, définissez des gestionnaires d'événements pour les événements intégrés spécifiques au webhook. Voici une approche recommandée pour gérer les erreurs de webhook:

  • Ne fournissez pas de cible de transition à partir du gestionnaire d'état qui déclenche l'appel de webhook. Sinon, le gestionnaire d'événements d'erreur du webhook ne sera pas appelé. Définissez plutôt la cible de transition dans la réponse du webhook à partir du service de webhook.
  • Choisissez une page où un compteur d'erreurs peut être initialisé à zéro. Cette page doit être active avant la page qui déclenche un appel de webhook. Le traitement de l'entrée pour cette page doit initialiser le compteur d'erreurs sur 0 à l'aide d'un préréglage de paramètre de traitement. Exemple :

    Paramètre Valeur
    webhook-error-count 0
  • Créez une page d'erreur de webhook qui gère les événements d'erreur de webhook:

    • Le traitement de l'entrée doit confirmer l'échec pour l'utilisateur final et incrémenter un paramètre de session de compteur d'erreur à l'aide d'un préréglage de paramètre de traitement. Exemple :

      Paramètre Valeur
      webhook-error-count $sys.func.ADD($session.params.webhook-error-count, 1)
    • Définissez un parcours de condition avec une condition selon laquelle le nombre d'erreurs est inférieur au nombre maximal autorisé. (par exemple, $session.params.webhook-error-count <= 3). Ce parcours doit comporter un traitement qui informe l'utilisateur final que l'agent va réessayer. La cible de transition de ce parcours doit être définie sur PREVIOUS_PAGE ou sur n'importe quelle page pouvant effectuer une nouvelle tentative d'appel du webhook.

    • Définissez un parcours de condition dont la condition est que le nombre d'erreurs est supérieur au nombre maximal autorisé (par exemple, $session.params.webhook-error-count > 3). Ce parcours doit être rempli pour avertir l'utilisateur final que l'agent ne tentera plus de nouveau. La cible de transition de cette route doit être définie sur une page qui ne déclenchera pas de nouvelles tentatives de webhook.

  • Le gestionnaire d'événements du webhook doit avoir une cible de transition qui passe à la page d'erreur du webhook.

Outils

Cette section fournit des conseils sur l'utilisation d'outils pour améliorer la conception d'agents.

Utiliser l'outil de validation

Vous devez toujours utiliser l'outil de validation pour vérifier votre agent. Cet outil détecte certains des problèmes décrits dans ce guide.

Utiliser la fonctionnalité de cas de test

Vous devez toujours définir des cas de test pour votre agent. Ces scénarios de test peuvent aider à éviter les régressions pendant que votre agent évolue pour gérer davantage de scénarios.