RocketBot es un bot de chat programable que se integra con VK, Telegram y Bitrix24. Hoy hablaremos sobre la infraestructura y otras tecnologías en las que se basa.
/ foto Darryl Braaten CC BY-SAKit de herramientas
Al desarrollar RocketBot, nos centramos en la velocidad de desarrollo y creación de prototipos. Por esta razón, el sistema está escrito en Python y MySQL se selecciona como la base de datos.
Hasta la fecha, Python
ocupa el tercer lugar en el ranking TIOBE en popularidad. Esto significa que el idioma tiene una gran comunidad y una cantidad infinita de literatura de referencia: libros, sitios, cursos y códigos fuente. Por ejemplo, en GitHub puede encontrar
colecciones de mejores prácticas para desarrollar en Python , y en StackOverflow hay
una gran cantidad de hilos abiertos . La editorial O'Reilly ha dedicado muchos libros a este lenguaje. Se puede distinguirlo con "
Autostop en Python " y "
Aprendizaje automático con Python ".
Además de una gran cantidad de fuentes, una de las principales ventajas de Python es la variedad de bibliotecas y marcos de trabajo ML funcionales. Algunos ejemplos son
PyTorch y
SciKit-learn : estas son herramientas poderosas que simplifican el procesamiento del habla natural, los diálogos y las secuencias de comandos.
En particular, para el desarrollo de modelos de entrenamiento, utilizamos PyTorch, ya que tiene amplias capacidades para la creación de prototipos. Además, implementamos scikit-learn, que realiza el preprocesamiento de datos, así como pymorth2 y gensim (para trabajar con morfología y vectorización de texto, respectivamente). También experimentamos DeepPavlov : evaluamos sus capacidades.
En cuanto a la base de datos, la elegimos por razones para no complicarla. MySQL también sigue siendo la más popular de las poderosas bases de datos del servidor. Por esta razón, puede encontrar mucha información al respecto en Internet (por ejemplo, hay un
manual detallado
de los desarrolladores ), y una comunidad extensa siempre le dará una solución al problema, si la hay. Además, MySQL ofrece una amplia funcionalidad, aunque no sigue todos los estándares SQL.
Lo que nuestro chat chat puede hacer
Nuestro chatbot le permite configurar respuestas automáticas a las preguntas de los usuarios (por ejemplo, para implementar las preguntas frecuentes), así como automatizar las operaciones de rutina (por ejemplo, encuestas) utilizando scripts.
El sistema puede trabajar con dos tipos de preguntas: personalizadas y estándar. En el primer caso, el administrador prescribe de forma independiente la esencia del problema y las palabras clave a las que responderá el bot. Listado de todas las palabras clave es opcional. Los algoritmos de RocketBot evaluarán el significado de la frase y encontrarán la respuesta basada en la proximidad semántica.
Para evaluar la proximidad semántica, se utiliza una representación vectorial de la consulta. Identifica los componentes principales (
PCA ) y busca la opción de distancia más cercana en la base de datos. En nuestro caso, la métrica cosine_similarity (sciki-learn) funcionó mejor.
En el segundo caso, el propietario del bot no necesita configurar nada. Simplemente selecciona una pregunta estándar de la lista, luego el propio bot entiende lo que se le preguntará. Ahora usamos el servicio Dialogflow para resaltar temas estándar, pero lo cambiaremos a nuestra propia implementación. No estamos contentos con la dependencia del servicio de Google, que introduce un retraso en la sincronización de datos. Tenga en cuenta que el usuario puede cambiar la plantilla estándar en cualquier momento creando su propia versión de frases y asignando una acción apropiada.
En ambos casos, el chatbot puede responder con un mensaje de texto o con un script. Un mensaje de texto es solo una respuesta estándar a una situación. En cuanto al guión, implica una estructura de árbol del diálogo. De hecho, estos son escenarios de comunicación completos en los que el chatbot realiza acciones programadas en función de las respuestas del usuario. Por ejemplo, esta función se puede utilizar para realizar encuestas o recopilar comentarios.
Para compilar un script, se utilizan tres tipos de bloques:
- Bloque de preguntas: hace una pregunta al usuario y escribe la respuesta en una variable.
- Bloque de condiciones: implementa la ramificación del script.
- Bloque de verificación variable: controla la ruta del usuario de acuerdo con el script.
El propietario del bot llena todos los bloques de forma independiente en el editor de scripts. Hasta ahora, el editor no tiene herramientas de visualización (pero aparecerán en un futuro cercano). En nuestra experiencia, la presencia de un diseñador visual en la aplicación de bot de chat no ayuda a crear un esquema para su trabajo. La mayoría de los usuarios no piensan en los algoritmos de antemano, por lo que simplemente no hay nada que transferir al editor.
Un ejemplo de configuración para salir del guión con la respuesta "No" a la pregunta "¿Tienes 18 años?"Pero con todo esto, podemos ayudar al cliente a configurar sus scripts de acuerdo con el diagrama de flujo, que dibujará en un editor gráfico como xmind o draw.io. Verificaremos independientemente el algoritmo y llevaremos a cabo la configuración inicial; por lo general, lleva varias horas.
Además de responder preguntas e implementar scripts, el bot puede trabajar con sistemas de procesamiento de lenguaje natural. Sin embargo, si bien realizan un rango muy reducido de tareas: buscan la respuesta a la pregunta en la base de conocimiento y determinan las intenciones del usuario (para esto se usa el mismo Dialogflow).
Hemos limitado el rango de tareas para soluciones inteligentes debido a posibles dificultades con un comportamiento impredecible. Los sistemas modernos de inteligencia artificial siguen siendo propensos a errores, y al crear servicios empresariales es imposible que el bot responda al 80% de las preguntas de una manera, y al otro 20% de otra.
Para implementar el sistema de procesamiento de voz natural, hasta ahora se utiliza un algoritmo de búsqueda muy simple. Con el tiempo, queremos implementar una nueva versión basada en redes LSTM que utilice el aprendizaje por refuerzo. Lo más probable es que la nueva implementación se base en el marco DeepPavlov ya mencionado.
Otra característica de nuestro bot es la integración con sistemas CRM. RocketBot puede crear automáticamente un cliente potencial y una tarea en CRM (Bitrix24) después de ejecutar los scripts. El bot reenvía todo lo que el usuario escribió, más información sobre él desde el messenger o la red social. Todo funciona según los protocolos estándar y a través de la API principal de los sistemas CRM en forma de solicitudes HTTP y datos en JSON.
En futuras versiones, planeamos agregar al bot la capacidad de crear embudos automáticos. Esto permitirá a la empresa familiarizar al cliente potencial con los productos y cerrar el trato directamente en el chat. El sistema agregará de forma independiente las entidades necesarias a CRM (leads, ofertas, tareas) en función de las respuestas y preguntas ingresadas.
/ foto spencer cooper CC BY-NDLa infraestructura sobre la cual se construye el chatbot
Todos nuestros servicios operan
en la nube IT-GRAD : los servidores frontend, las bases de datos y los servidores de aplicaciones están alojados allí. En general, la infraestructura de la nube nos ayuda a escalar rápidamente nuestros servicios, para hacer frente a la creciente carga y las repentinas oleadas de tráfico. Por esta razón, en el futuro solo planeamos expandir nuestra presencia en la nube.
El bot en sí es un conjunto de cinco microservicios que interactúan entre sí a través de HTTP - JSON (todas las comunicaciones internas entre servicios se llevan a cabo en un segmento seguro). Aunque esto lleva a retrasos en la respuesta a la pregunta en uno o dos segundos, esta arquitectura tiene un gran potencial para escalar y nos permite modificar bloques individuales sin afectar a otros. Por ejemplo, actualizar el microservicio de búsqueda en las preguntas frecuentes no afectará la integración del microservicio con CRM.
Para probar y crear modelos de aprendizaje automático y redes neuronales, utilizamos el Nvidia Tesla M40 16GB. Pero incluso en eso, el entrenamiento no es muy rápido. Los conjuntos de datos que utilizamos para las tareas de procesamiento del lenguaje natural son decenas de gigabytes. Por esta razón, en algunos casos (por ejemplo, para vectorizar conjuntos de datos) utilizamos máquinas virtuales con 64 CPU.
Lectura adicional: publicaciones del primer blog corporativo de IaaS:
Desde nuestro canal de Telegram: