Sous le capot du chatbot: ce que RocketBot peut et comment cela fonctionne

RocketBot est un bot de chat programmable qui s'intègre à VK, Telegram et Bitrix24. Aujourd'hui, nous allons parler de l'infrastructure et des autres technologies sur lesquelles elle est construite.


/ photo Darryl Braaten CC BY-SA

Boîte à outils


Lors du développement de RocketBot, nous nous sommes concentrés sur la vitesse de développement et de prototypage. Pour cette raison, le système est écrit en Python et MySQL est sélectionné comme base de données.

À ce jour, Python occupe le troisième rang dans le classement TIOBE en popularité. Cela signifie que la langue a une grande communauté et une quantité infinie de littérature de référence: livres, sites, cours et codes sources. Par exemple, sur GitHub, vous pouvez trouver des collections de meilleures pratiques pour le développement en Python , et sur StackOverflow, un grand nombre de threads sont ouverts . La maison d'édition O'Reilly a consacré beaucoup de livres à ce langage, on peut le distinguer avec « Hitchhiking in Python » et « Machine Learning with Python ».

Outre un grand nombre de sources, l'un des principaux avantages de Python est la variété des bibliothèques et des cadres ML fonctionnels. Les exemples sont PyTorch et SciKit-learn - ce sont des outils puissants qui simplifient le traitement de la parole naturelle, des dialogues et des scripts.

En particulier, pour le développement de modèles de formation, nous avons utilisé PyTorch, car il possède de larges capacités de prototypage. De plus, nous avons implémenté scikit-learn, qui effectue le prétraitement des données, ainsi que pymorth2 et gensim (pour travailler avec la morphologie et la vectorisation de texte, respectivement). Nous expérimentons également DeepPavlov - nous évaluons ses capacités.

Quant à la base de données, nous l'avons choisie pour des raisons de ne pas la compliquer. MySQL reste également la plus populaire des puissantes bases de données de serveurs. Pour cette raison, vous pouvez trouver beaucoup d'informations à ce sujet sur Internet (par exemple, il y a un manuel détaillé des développeurs ), et une communauté étendue vous indiquera toujours une solution au problème, le cas échéant. De plus, MySQL offre de nombreuses fonctionnalités, bien qu'il ne respecte pas toutes les normes SQL.

Ce que notre robot de chat peut faire


Notre chatbot vous permet de configurer des réponses automatiques aux questions des utilisateurs (par exemple, pour la mise en œuvre de la FAQ), ainsi que d'automatiser les opérations de routine (par exemple, les sondages) à l'aide de scripts.

Le système est capable de travailler avec deux types de questions: personnalisées et standard. Dans le premier cas, l'administrateur prescrit indépendamment l'essence du problème et les mots clés auxquels le bot va répondre. La liste de tous les mots clés est facultative. Les algorithmes RocketBot évalueront la signification de la phrase et trouveront la réponse en fonction de la proximité sémantique.

Pour évaluer la proximité sémantique, une représentation vectorielle de la requête est utilisée. Il identifie les principaux composants ( PCA ) et recherche l'option de distance la plus proche dans la base de données. Dans notre cas, la métrique cosinus_similarity (sciki-learn) a donné les meilleurs résultats.

Dans le second cas, le propriétaire du bot n'a pas besoin de configurer quoi que ce soit. Il sélectionne simplement une question standard dans la liste - puis le bot lui-même comprend ce qui lui sera demandé. Nous utilisons maintenant le service Dialogflow pour mettre en évidence des thèmes standard, mais nous allons le changer pour notre propre implémentation. Nous ne sommes pas satisfaits de la dépendance vis-à-vis du service Google, qui introduit un retard dans la synchronisation des données. Notez que l'utilisateur peut modifier le modèle standard à tout moment en créant sa propre version de phrases et en attribuant une action appropriée.

Dans les deux cas, le chatbot peut répondre soit par SMS, soit par script. Un message texte n'est qu'une réponse standard à une situation. Quant au script, il implique une arborescence du dialogue. En fait, ce sont des scénarios de communication à part entière dans lesquels le chatbot effectue des actions programmées en fonction des réponses de l'utilisateur. Par exemple, cette fonction peut être utilisée pour mener des enquêtes ou recueillir des commentaires.

Pour compiler un script, trois types de blocs sont utilisés:

  1. Bloc de questions - pose une question à l'utilisateur et écrit la réponse dans une variable.
  2. Bloc de conditions - implémente la ramification du script.
  3. Bloc de contrôle variable - contrôle l'itinéraire de l'utilisateur en fonction du script.

Le propriétaire du bot remplit tous les blocs indépendamment dans l'éditeur de script. Jusqu'à présent, l'éditeur ne dispose pas d'outils de visualisation (mais ils apparaîtront dans un futur proche). D'après notre expérience, la présence d'un concepteur visuel dans l'application de chat bot n'aide pas à créer un schéma pour son travail. La plupart des utilisateurs ne réfléchissent pas à l'avance aux algorithmes, il n'y a donc tout simplement rien à transférer vers l'éditeur.


Un exemple de paramètres avec la sortie du script avec la réponse "Non" à la question "Avez-vous 18 ans?"

Mais avec tout cela, nous pouvons aider le client à personnaliser ses scripts selon l'organigramme, qu'il dessinera dans un éditeur graphique comme xmind ou draw.io. Nous vérifierons indépendamment l'algorithme et effectuerons la configuration initiale - cela prend généralement plusieurs heures.

En plus de répondre aux questions et d'implémenter des scripts, le bot peut fonctionner avec des systèmes de traitement du langage naturel. Cependant, alors qu'ils effectuent une gamme de tâches très étroite: ils recherchent la réponse à la question dans la base de connaissances et déterminent les intentions de l'utilisateur (le même Dialogflow est utilisé pour cela).

Nous avons limité la gamme de tâches pour les solutions intelligentes en raison de difficultés potentielles avec un comportement imprévisible. Les systèmes d'IA modernes sont toujours sujets aux erreurs, et lors de la création de services aux entreprises, il est impossible pour le bot de répondre à 80% des questions d'une manière et aux 20% restants d'une autre.

Pour implémenter le système de traitement de la parole naturelle, un algorithme de recherche très simple est utilisé jusqu'à présent. Au fil du temps, nous voulons implémenter une nouvelle version basée sur les réseaux LSTM qui utilise l'apprentissage par renforcement. Très probablement, la nouvelle implémentation sera basée sur le framework DeepPavlov déjà mentionné.

Une autre caractéristique de notre bot est l'intégration avec les systèmes CRM. RocketBot peut créer automatiquement une piste et une tâche dans CRM (Bitrix24) après avoir exécuté les scripts. Le bot transmet tout ce que l'utilisateur a écrit, ainsi que des informations sur lui à partir du messager ou du réseau social. Tout fonctionne selon les protocoles standard et via l'API principale des systèmes CRM sous forme de requêtes HTTP et de données en JSON.

Dans les versions futures, nous prévoyons d'ajouter au bot la possibilité de créer des entonnoirs automatiques. Cela permettra à l'entreprise de familiariser le client potentiel avec les marchandises et de conclure l'affaire directement dans le chat. Le système ajoutera indépendamment les entités nécessaires au CRM - prospects, offres, tâches - en fonction des réponses et des questions saisies.


/ photo spencer cooper CC BY-ND

L'infrastructure sur laquelle le chatbot est construit


Tous nos services fonctionnent dans le cloud IT-GRAD - des serveurs frontaux, des bases de données et des serveurs d'applications y sont hébergés. En général, l'infrastructure cloud nous aide à faire évoluer rapidement nos services, à faire face à la charge croissante et aux soudaines augmentations de trafic. Pour cette raison, à l'avenir, nous prévoyons uniquement d'étendre notre présence dans le cloud.

Le bot lui-même est un ensemble de cinq microservices qui interagissent entre eux via HTTP - JSON (toutes les communications internes entre les services sont effectuées dans un segment sécurisé). Bien que cela entraîne des retards dans la réponse à la question en une à deux secondes, cette architecture a un grand potentiel de mise à l'échelle et nous permet de modifier des blocs individuels sans affecter les autres. Par exemple, la mise à jour du microservice de recherche dans la FAQ n'affectera pas l'intégration du microservice avec CRM.

Pour tester et créer des modèles d'apprentissage automatique et des réseaux de neurones, nous utilisons le Nvidia Tesla M40 16GB. Mais même là-dessus, l'entraînement n'est pas très rapide. Les ensembles de données que nous utilisons pour les tâches de traitement du langage naturel sont des dizaines de gigaoctets. Pour cette raison, dans certains cas (par exemple, pour la vectorisation d'ensembles de données), nous avons utilisé des machines virtuelles avec 64 CPU.



Lecture supplémentaire - messages du premier blog d'entreprise IaaS:


Depuis notre chaîne Telegram:

Source: https://habr.com/ru/post/fr438536/


All Articles