Générer un bot de conversation de classe entreprise

Bot Service
Cognitive Services

Cette architecture de référence décrit comment générer un bot de conversation (chatbot) de classe entreprise à l’aide d’Azure Bot Framework. Chaque bot est différent, mais ils ont en commun des modèles, des workflows et des technologies à connaître. Pour ce qui est des bots au service de charges de travail d’entreprise, il existe de nombreuses considérations liées à leur conception au-delà de leur simple fonctionnalité.

Les exemples d’utilitaires de bonnes pratiques utilisés dans cette architecture sont entièrement open source et sont disponibles sur GitHub.

Cas d’usage potentiels

Cette solutions est idéale pour le secteur d’activité des télécommunications. Cet article couvre les aspects les plus importants de cette conception et présente les outils nécessaires pour générer un bot robuste, sécurisé et actif dans son apprentissage.

Architecture

Diagram of the architecture

Téléchargez un fichier Visio de cette architecture.

Workflow

L’architecture présentée ici utilise les services Azure suivants. Votre bot personnel n’utilise peut-être pas tous ces services, ou peut-être en incorpore-t-il d’autres.

Logique de bot et expérience utilisateur

  • Bot Framework Service (BFS). Ce service connecte votre bot à une application de communication comme Cortana, Facebook Messenger ou Slack. Il facilite la communication entre votre bot et l’utilisateur.
  • Azure App Service . La logique d’application du bot est hébergée dans Azure App Service.

Cognition et intelligence du bot

  • Language Understanding (LUIS). Dans le cadre d’Azure Cognitive Services, LUIS permet à votre bot de comprendre le langage naturel en identifiant les intentions et les entités de l’utilisateur.
  • Recherche Azure . Recherche est un service géré qui fournit un index de documents dans lequel vous pouvez effectuer des recherches rapides.
  • QnA Maker . QnA Maker est un service d’API cloud qui crée une couche de questions-réponses conversationnelle sur vos données. En règle générale, il se charge avec du contenu semi-structuré comme des questions fréquentes (FAQ). Utilisez-le pour créer une base de connaissances afin de répondre à des questions en langage naturel.
  • Application web . Si votre bot a besoin de solutions d’intelligence artificielle (IA) non fournies par un service existant, vous pouvez implémenter votre propre IA personnalisée et l’héberger comme application web. Cette dernière fournit un point de terminaison web que votre bot peut appeler.

Ingestion de données

Le bot compte sur les données brutes que vous devez ingérer et préparer. Envisagez l’une des options suivantes pour orchestrer ce processus :

  • Azure Data Factory . Data Factory orchestre et automatise le déplacement et la transformation des données.
  • Logic Apps . Logic Apps est une plateforme serverless pour la création de workflows qui intègrent des applications, des données et des services. Logic Apps fournit des connecteurs de données pour de nombreuses applications, notamment Office 365.
  • Azure Functions . Vous pouvez utiliser Azure Functions pour écrire du code serverless personnalisé, appelé par un déclencheur, par exemple chaque fois qu’un document est ajouté au stockage blob ou à Cosmos DB.

Enregistrement et surveillance

  • Application Insights . Utilisez Application Insights pour journaliser les métriques d’application du bot à des fins de supervision, de diagnostic et d’analyse.
  • Azure Blob Storage . Stockage Blob est optimisé pour le stockage d’immenses quantités de données non structurées.
  • Cosmos DB . Cosmos DB convient parfaitement au stockage de données de journal semi-structurées comme les conversations.
  • Power BI . Utilisez Power BI pour créer des tableaux de bord de supervision pour votre bot.

Sécurité et gouvernance

Assurance qualité et améliorations

  • Azure DevOps . Fournit de nombreux services de gestion des applications, notamment le contrôle de code source, la génération, le test, le déploiement et le suivi de projet.
  • VS Code. Éditeur de code léger pour le développement d’applications. Vous pouvez utiliser n’importe quel autre environnement de développement intégré (IDE) doté de fonctionnalités similaires.

Components

Recommandations

Globalement, un bot de conversation comporte, d’un côté, la fonctionnalité du bot (le « cerveau ») et de l’autre, un ensemble de critères environnants (le « corps »). Le cerveau comprend les composants qui tiennent compte du domaine, notamment la logique de bot et les fonctionnalités ML (Machine Learning). Les autres composants ne dépendent pas du domaine et s’occupent des exigences non fonctionnelles comme les CI/CD, l’assurance qualité et la sécurité.

Logical diagram of bot functionality

Avant d’aborder les spécificités de cette architecture, commençons par nous intéresser au flux de données qui traverse chaque sous-composant de la conception. Le flux de données inclut ceux lancés par l’utilisateur et par le système.

Flux de messages utilisateur

Authentification. Les utilisateurs commencent par s’authentifier à l’aide du mécanisme fourni par leur canal de communication auprès du bot. Le framework du bot prend en charge plusieurs canaux de communication, notamment Cortana, Microsoft Teams, Facebook Messenger, Kik et Slack. Pour obtenir la liste des canaux, consultez Connecter un bot à des canaux. Quand vous créez un bot avec Azure Bot Service, le canal Web Chat est automatiquement configuré. Ce canal permet aux utilisateurs d’interagir avec votre bot directement dans une page web. Vous pouvez également connecter le bot à une application personnalisée à l’aide du canal Direct Line. L’identité de l’utilisateur est utilisée pour fournir un contrôle d’accès en fonction du rôle, ainsi que pour servir du contenu personnalisé.

Message utilisateur. Une fois authentifié, l’utilisateur envoie un message au bot. Le bot lit le message et le route vers un service de compréhension du langage naturel comme LUIS. Cette étape permet d’obtenir les intentions (ce que l’utilisateur veut faire) et les entités (ce à quoi l’utilisateur s’intéresse). Le bot génère ensuite une requête qu’il transmet à un service qui sert des informations, comme Recherche Azure pour récupérer des documents, QnA Maker pour des questions fréquentes (FAQ) ou une base de connaissances personnalisée. Le bot utilise ces résultats pour construire une réponse. Pour obtenir les meilleurs résultats d’une requête donnée, le bot peut effectuer plusieurs appels bidirectionnels à ces services à distance.

Réponse. À ce stade, le bot a déterminé la meilleure réponse et l’envoie à l’utilisateur. Si le score de confiance de la meilleure réponse est faible, la réponse peut être une question visant à lever les ambiguïtés ou une reconnaissance de l’incapacité du bot à répondre de manière adéquate.

Journalisation. Lors de la réception d’une demande de l’utilisateur ou de l’envoi d’une réponse, toutes les actions de conversation doivent être journalisées dans un magasin de journalisation, ainsi que les mesures de performances et les erreurs générales des services externes. Ces journaux d’activité se montreront utiles ultérieurement pour diagnostiquer les problèmes et améliorer le système.

Commentaires. Une autre bonne pratique consiste à collecter les commentaires des utilisateurs et les niveaux de satisfaction. Dans le cadre d’un suivi consécutif à la réponse finale du bot, ce dernier doit demander à l’utilisateur d’évaluer s’il est satisfait de la réponse. Les commentaires peuvent vous aider à résoudre le problème lié à la compréhension du langage naturel lors du démarrage à froid, afin d’améliorer constamment la précision des réponses.

Flux de données système

ETL. Le bot s’appuie sur les informations et les connaissances extraites des données brutes par un processus ETL dans le back-end. Ces données peuvent être structurées (base de données SQL), semi-structurées (système CRM, questions fréquentes (FAQ)) ou non structurées (documents Word, PDF, journaux d’activité web). Un sous-système ETL extrait les données selon une planification fixe. Le contenu est transformé et enrichi, puis chargé dans un magasin de données intermédiaire, comme Cosmos DB ou Stockage Blob Azure.

Les données contenues dans le magasin intermédiaire sont ensuite indexées dans Recherche Azure à des fins de récupération de documents, chargées dans QnA Maker pour créer des paires question/réponse ou chargées dans une application web personnalisée à des fins de traitement de texte non structuré. Les données sont également utilisées pour entraîner un modèle LUIS à l’extraction des intentions et entités.

Assurance qualité. Les journaux d’activité de conversation sont utilisés pour diagnostiquer et corriger des bogues, fournir un aperçu de la façon dont le bot est utilisé et effectuer le suivi des performances globales. Les données de commentaires s’avèrent utiles pour réentraîner les modèles d’intelligence artificielle afin d’améliorer les performances du bot.

Création d’un bot

Avant même d’écrire la moindre ligne de code, il est important d’écrire une spécification fonctionnelle pour donner à l’équipe de développeurs une idée précise de ce que le bot est censé faire. Cette spécification doit inclure la liste relativement complète des entrées utilisateur et les réponses attendues du bot dans différents domaines de connaissances. Ce document vital constitue un guide précieux pour développer et tester votre bot.

Réception de données

Ensuite, identifiez les sources de données qui vont permettre au bot d’interagir de façon intelligente avec les utilisateurs. Comme mentionné précédemment, ces sources de données peuvent contenir des jeux de données structurées, semi-structurées ou non structurées. Dans un premier temps, une bonne approche consiste à effectuer une copie unique des données dans un magasin central, comme Cosmos DB ou Stockage Azure. Par la suite, il est préférable de créer un pipeline d’ingestion de données automatisée pour tenir ces données à jour. Les options utilisables pour un pipeline d’ingestion automatisée incluent Data Factory, Functions et Logic Apps. Selon les magasins de données et les schémas, vous pouvez peut-être utiliser une combinaison de ces approches.

À vos débuts, il est judicieux d’utiliser le portail Azure pour créer manuellement des ressources Azure. Par la suite, pensez plutôt à automatiser le déploiement de ces ressources.

Logique de bot principale et expérience utilisateur

Une fois que vous avez une spécification et quelques données, il est temps de commencer à confronter votre bot à la réalité. Concentrons-nous sur la logique de bot principale. Il s’agit du code qui gère la conversation avec l’utilisateur, notamment la logique de routage, la logique de levée d’ambiguïté et la journalisation. Commencez par vous familiariser avec Bot Framework, notamment les éléments suivants :

  • Concepts et terminologie de base utilisés dans le framework, en particulier les conversations, les tours et les activités.
  • service Bot Connector, qui gère les réseaux entre le bot et vos canaux.
  • Gestion de l’état de la conversation, soit dans la mémoire, soit, encore mieux, dans un magasin comme Stockage Blob Azure ou Azure Cosmos DB.
  • Middleware (intergiciel) et la façon dont il peut servir à raccorder votre bot avec des services externes, comme Cognitive Services.

Pour enrichir l’expérience utilisateur, il existe de nombreuses options.

  • Vous pouvez utiliser des cartes pour inclure des boutons, des images, des carrousels et des menus.
  • Un bot peut prendre en charge des fonctions vocales.
  • Vous pouvez même incorporer votre bot dans une application ou un site web pour utiliser les fonctionnalités de l’application qui l’héberge.

Pour commencer, vous pouvez générer votre bot en ligne à l’aide d’Azure Bot Service, en sélectionnant parmi les modèles C# et Node.js disponibles. À mesure que votre bot devient plus sophistiqué, en revanche, vous avez besoin de le créer localement, puis de le déployer sur le web. Choisissez un environnement de développement intégré (IDE), comme Visual Studio ou Visual Studio Code, ainsi qu’un langage de programmation. Des SDK sont disponibles pour les langages suivants :

Pour démarrer, vous pouvez télécharger le code source du bot que vous avez créé à l’aide d’Azure Bot Service. Vous pouvez également rechercher un exemple de code, qu’il s’agisse de simples bots d’écho ou de bots plus sophistiqués qui s’intègrent à divers services d’intelligence artificielle.

Donner de la jugeote à votre bot

Pour un bot simple doté d’une liste de commandes bien définie, vous pouvez peut-être utiliser une approche qui s’appuie sur des règles pour analyser l’entrée utilisateur par le biais de l’expression régulière. Cela présente l’avantage d’être déterministe et compréhensible. Toutefois, quand votre bot a besoin de comprendre les intentions et les entités d’un message en langage plus naturel, des services d’intelligence artificielle peuvent aider.

  • LUIS est particulièrement conçu pour comprendre les intentions et les entités de l’utilisateur. Vous l’entraînez avec une collection ni trop grande ni trop petite d’entrées utilisateur pertinentes et de réponses souhaitées, et il retourne les intentions et les entités du message donné d’un utilisateur.

  • Le service Recherche Azure peut fonctionner de concert avec LUIS. Avec Recherche, vous créez des index de recherche sur toutes les données pertinentes. Le bot interroge ces index pour obtenir les entités extraites par LUIS. Recherche Azure prend également en charge les synonymes, ce qui permet d’élargir le champ des correspondances de mots corrects.

  • QnA Maker est un autre service conçu pour retourner des réponses à des questions données. En règle générale, il est entraîné sur des données semi-structurées comme les questions fréquentes (FAQ).

Votre bot peut utiliser d’autres services d’intelligence artificielle pour enrichir davantage l’expérience utilisateur. La suite Cognitive Services des services d’intelligence artificielle prédéfinis (qui inclut LUIS et QnA Maker) propose des services de vision, voix, langue, recherche et localisation. Vous pouvez ajouter rapidement des fonctionnalités comme la traduction linguistique, la vérification orthographique, l’analyse des sentiments, la reconnaissance optique de caractères, la localisation et la modération du contenu. Ces services peuvent être connectés sous forme de modules de middleware dans votre bot pour interagir de manière plus naturelle et intelligente avec l’utilisateur.

Une autre option consiste à intégrer votre propre service d’intelligence artificielle personnalisé. Cette approche est plus complexe, mais elle vous donne une entière flexibilité dans l’algorithme de machine learning, l’entraînement et le modèle. Par exemple, vous pouvez implémenter votre propre modélisation et utiliser un algorithme comme LDA pour rechercher des documents similaires ou pertinents. Une bonne approche consiste à exposer votre solution d’intelligence artificielle personnalisée en tant que point de terminaison de service web, puis à appeler le point de terminaison à partir de la logique de bot principale. Le service web peut être hébergé dans App Service ou dans un cluster de machines virtuelles. Azure Machine Learning propose plusieurs services et bibliothèques pour vous aider à entraîner et à déployer vos modèles.

Assurance qualité et amélioration

Journalisation. Journalisez les conversations de l’utilisateur avec le bot, notamment les mesures de performances sous-jacentes et les erreurs éventuelles. Ces journaux d’activité s’avèrent très précieux pour déboguer les problèmes, comprendre les interactions de l’utilisateur et améliorer le système. Différents magasins de données peuvent convenir à différents types de journaux d’activité. Par exemple, envisagez d’utiliser Application Insights pour les journaux d’activité web, Cosmos DB pour les conversations et Stockage Azure pour les grosses charges utiles. Consultez Écrire directement dans Stockage Azure.

Commentaires. Il est également important de comprendre le niveau de satisfaction des utilisateurs vis-à-vis de leurs interactions avec le bot. Si vous avez recueilli les commentaires des utilisateurs, vous pouvez utiliser ces données pour concentrer vos efforts sur l’amélioration de certaines interactions et sur le réentraînement des modèles d’intelligence artificielle à des fins d’amélioration des performances. Utilisez les commentaires pour réentraîner les modèles, comme LUIS, dans votre système.

Test. Tester un bot implique des tests unitaires, des tests d’intégration, des tests de régression et des tests fonctionnels. À des fins de test, nous recommandons d’enregistrer des réponses HTTP réelles des services externes, comme Recherche Azure ou QnA Maker, pour qu’elles puissent être lues pendant le test unitaire sans avoir à effectuer des appels réseau réels aux services externes.

Notes

Pour lancer votre développement dans ces domaines, reportez-vous à Botbuilder Utils pour JavaScript. Ce dépôt contient des exemples de code d’utilitaire pour les bots générés avec Microsoft Bot Framework v4 et exécutant Node.js. Il inclut les packages suivants :

  • Magasin de journalisation de Cosmos DB. Montre comment stocker et interroger des journaux de bot dans Azure Cosmos DB.
  • Magasin de journalisation d’Application Insights. Montre comment stocker et interroger des journaux de bot dans Application Insights.
  • Feedback Collection Middleware. Exemple de middleware (intergiciel) fournissant un mécanisme de demande de commentaires d’utilisateur de bot.
  • Enregistreur de test HTTP. Enregistre le trafic HTTP de services externes vers le bot. Ce package est préintégré avec la prise en charge de LUIS, Recherche Azure et QnAMaker, mais des extensions sont disponibles pour prendre en charge n’importe quel service. Ceci vous permet d’automatiser les tests de bot.

Ces packages sont fournis sous forme d’exemple de code d’utilitaire, sans aucune garantie de prise en charge ni mise à jour.

Considérations

Disponibilité

Quand vous lancez de nouvelles fonctionnalités ou de nouveaux correctifs de bugs dans votre bot, préférez utiliser plusieurs environnements de déploiement, tels que des environnements de préproduction et de production. L’utilisation des emplacements de déploiement Azure DevOps vous permet de le faire sans temps d’arrêt. Vous pouvez tester vos dernières mises à niveau dans l’environnement de préproduction avant de les passer à l’environnement de production. En termes de gestion de la charge, App Service est conçu pour effectuer un scale-up ou un scale-out manuellement ou automatiquement. Étant donné que votre bot est hébergé dans l’infrastructure mondiale des centres de données de Microsoft, vous bénéficiez de garanties sur la haute disponibilité du SLA App Service.

Sécurité

Comme avec toute autre application, le bot peut être conçu pour gérer des données sensibles. Ainsi, veillez à limiter les personnes qui peuvent se connecter au bot et l’utiliser. Limitez également les données accessibles, en fonction de l’identité ou du rôle de l’utilisateur. Utilisez Azure AD pour l’identité et le contrôle d’accès et Key Vault pour gérer les clés et les secrets.

DevOps

Surveillance et création de rapports

Une fois que votre bot s’exécute en production, vous avez besoin d’une équipe DevOps pour que cela continue. Supervisez en permanence le système pour maintenir le fonctionnement du bot à son niveau optimal. Utilisez les journaux d’activité envoyés à Application Insights ou Cosmos DB pour créer des tableaux de bord de supervision, en utilisant Application Insights lui-même, Power BI ou un tableau de bord d’application web personnalisé. Envoyez des alertes à l’équipe DevOps si des erreurs critiques se produisent ou si les performances chutent en dessous d’un seuil acceptable.

Déploiement automatisé des ressources

Le bot lui-même n’est qu’une partie d’un système plus large qui lui fournit les données les plus récentes et garantit son bon fonctionnement. Toutes ces autres ressources Azure (services d’orchestration des données comme Data Factory, services de stockage comme Cosmos DB, etc.) doivent être déployées. Azure Resource Manager fournit une couche de gestion cohérente à laquelle vous pouvez accéder par le biais du portail Azure, de PowerShell ou d’Azure CLI. À des fins de rapidité et de cohérence, il est préférable d’automatiser votre déploiement en utilisant l’une de ces approches.

Déploiement en continu du bot

Vous pouvez déployer la logique de bot directement à partir de votre environnement de développement intégré (IDE) ou à partir d’une ligne de commande, comme Azure CLI. Toutefois, quand votre bot est plus abouti, il est préférable d’utiliser un processus de déploiement continu à l’aide d’une solution CI/CD comme Azure DevOps, comme décrit dans l’article Configurer le déploiement continu. Ainsi, vous réduisez les frictions liées au test des nouvelles fonctionnalités et nouveaux correctifs dans votre bot dans un environnement proche de celui de production. Il est également judicieux d’avoir plusieurs environnements de déploiement, en général au moins un environnement de préproduction et un environnement de production. Azure DevOps prend en charge cette approche.

Optimisation des coûts

Utiliser la calculatrice de prix Azure pour estimer les coûts. Voici quelques autres éléments à prendre en compte :

Application bot

Dans cette architecture, le principal coût est le service Azure App Service dans lequel la logique de l’application bot est hébergée. Choisissez un niveau de plan App Service qui répond le mieux à vos besoins. Voici quelques recommandations :

  • Utilisez les niveaux Gratuit et Partagé (préversion) à des fins de test car les ressources partagées ne peuvent pas faire l'objet d'un scale-out.
  • Exécutez votre charge de travail de production sur les niveaux De base, Standard et Premium car l'application s'exécute sur des instances de machine virtuelle dédiées et dispose de ressources allouées qui peuvent faire l'objet d'un scale-out. Les plans App Service sont facturés par seconde.

Vous serez facturé pour les instances dans le plan App Service, même si l’application est arrêtée. Supprimez les plans que vous n’envisagez pas d’utiliser à long terme, tels que les déploiements de test.

Pour plus d’informations, consultez Combien coûte mon plan App Service ?.

Ingestion de données

  • Azure Data Factory

    Dans cette architecture, Data Factory automatise le pipeline d’ingestion des données. Explorez une gamme de fonctionnalités d’intégration de données adaptées à vos besoins en matière de budget, des services gérés SQL Server Integration Services pour la migration transparente des projets SQL Server vers le cloud (option rentable), aux pipelines de données à grande échelle et serverless pour l’intégration de données de toutes les formes et de toutes les tailles.

    Pour obtenir un exemple, consultez Azure Data Factory : exemple d’analyse des coûts.

  • Azure Functions

    Dans cette architecture de référence, Azure Functions est facturé selon le plan de consommation. La consommation de ressources vous est facturée par seconde et chaque fois qu’un événement déclenche l’exécution de la fonction. Le traitement de plusieurs événements en une seule exécution ou par lots peut réduire les coûts.

    Azure met à l’échelle l’infrastructure requise pour exécuter les fonctions si nécessaire. Lorsque la charge de travail est faible, l’infrastructure est mise à l’échelle jusqu’à zéro sans coût associé. À chaque fois que la charge de travail augmente, Azure utilise une capacité suffisante pour répondre à toutes les requêtes. Étant donné que vous payez à l’usage réel, gérez le coût exact de chaque composant.

Logic Apps

Les tarifs de Logic Apps reposent sur le modèle de paiement à l’utilisation. Logic Apps dispose d’un modèle de tarification avec paiement à l’accès. Les déclencheurs, les actions et les exécutions de connecteur sont comptabilisés chaque fois qu’une application logique s’exécute. Toutes les actions qui réussissent et échouent, notamment les déclencheurs, sont considérées comme des exécutions.

Par exemple, votre application logique traite 1 000 messages par jour en provenance de Azure Service Bus. Un workflow de cinq actions coûte moins de 6 USD. Pour plus d’informations, consultez Tarifs Logic Apps.

Pour accéder à d’autres considérations de coût, consultez la section Coûts de Microsoft Azure Well-Architected Framework.

Contributeurs

Cet article est géré par Microsoft. Il a été écrit à l’origine par les contributeurs suivants.

Auteurs principaux :

  • Robert Alexander | Senior Software Engineer

Étapes suivantes

  • Passez en revue le modèle Virtual Assistant pour commencer à créer rapidement des bots conversationnel.

Documentation du produit :

Modules Microsoft Learn :