Guía completa para desarrollar tu chatbot en RASA

Karen White
14 min readOct 2, 2020

Has estado desarrollando tu asistente localmente y ahora puedes manejar un conjunto de tareas básicas, siempre y cuando los usuarios no se alejen demasiado del chappy path que has definido. Ahora es el momento de poner tu asistente en manos de usuarios reales para que este aprenda con datos que no son solo una conjetura. Y es que, para llegar a la siguiente etapa de desarrollo, debes poner en producción tu bot y compartirlo con el mundo real.

El framework de Rasa se ejecuta de forma local o en tu propia cuenta cloud, lo que significa que tienes opciones cuando tienes que lanzar tu chatbot. La estrategia de implementación que elijas depende de una variedad de factores: la cantidad de complejidad que deseas asumir como desarrollador, las limitaciones de hardware y el volumen de llamadas que crees que podría recibir tu asistente.

Con Rasa X 0.26.0 , lanzamos un nuevo método de implementación que facilita mucho esta elección. Nuestro nuevo script de implementación de una línea activa un clúster de Kubernetes para lanzar a producción Rasa X y tu asistente en aproximadamente cinco minutos. Este nuevo método no solo es rápido, también es ideal para la mayoría de los casos de uso.

En esta guía, compararemos el script de implementación de una línea con otros dos métodos para implementar tu asistente conversacional de Rasa (Docker Compose y una instalación manual de Kubernetes) para ayudarte a tomar una decisión informada sobre el método de implementación más adecuado para ti. Una vez que hayas seleccionado una estrategia de implementación, te proporcionaremos una lista de verificación de lanzamiento que detalla cómo configurar tu asistente en un entorno de producción.

¿Deberías implementar tu asistente con Rasa X?

La respuesta corta: sí.

Cuando te estás preparando para lanzar a producción tu asistente, es posible que no estés pensando en Rasa X, pero esta es la razón por la que debería hacerlo: implementar Rasa X es la forma más fácil de lanzar tu asistente a producción mientras aprovechas al máximo todo el framework de Rasa

Los métodos que discutiremos en esta guía implementan Rasa X y Rasa Open Source. Una vez que conectes tu asistente a través del Control de versiones integrado y actives un modelo, tu asistente estará listo para que lo compartas con los usuarios. Cuando los usuarios comienzan a hablar con tu asistente, todas sus conversaciones se recopilan en Rasa X, por lo que puedes revisar y anotar mensajes para comenzar a mejorar tu chatbot.

Docker Compose frente a Kubernetes

Comencemos analizando las diferencias entre los dos modelos de implementación principales disponibles para los asistentes Rasa: Docker Compose y Kubernetes.

Docker Compose es una herramienta para ejecutar aplicaciones de varios contenedores en una sola máquina host. Kubernetes, por otro lado, es una plataforma de orquestación de contenedores que ejecuta aplicaciones de múltiples contenedores en múltiples máquinas host.

El docker-compose.yml describe cómo se deben configurar los contenedores y servicios de tu aplicación. Por ejemplo, cada componente de la arquitectura Rasa se ejecuta en su propio contenedor, como puedes ver en el diagrama siguiente. Los servicios como las bases de datos y la transmisión de eventos también se ejecutan en tus propios contenedores. Docker Compose interconecta los contenedores, permitiendo que los servicios se comuniquen entre sí y haciendo posible iniciar o detener todos los contenedores con un solo comando.

Al igual que Docker Compose, Kubernetes (y las plataformas basadas en Kubernetes, como Openshift) también usan un archivo YAML para configurar la implementación. En Kubernetes, un contenedor, o en ocasiones varios contenedores, se ejecutan dentro de un pod. En la implementación de Rasa, por ejemplo, rasa-production, rasa-worker, rasa-x, etc., se ejecutan dentro de sus propios pods.

El archivo de implementación de Kubernetes define la configuración de los pods y también cuántas réplicas de pods deben crearse y distribuirse en varios host o nodos. El servicio de Kubernetes mantiene la cantidad de réplicas de pod definidas en la implementación, incluso si uno de los nodos deja de funcionar. En esa situación, el servicio crearía suficientes réplicas de pod para alcanzar el número deseado y redistribuirlas en los nodos restantes. Kubernetes también se puede configurar para escalar automáticamente la infraestructura en respuesta al tráfico externo, lo que lo convierte en la opción preferida para aplicaciones donde la latencia y el tiempo de actividad son críticos.

Pero Kubernetes no tiene que ejecutarse en varias máquinas; también puede ejecutar Kubernetes en un solo host. Cuando ejecutas el script de implementación con un solo clic en una máquina virtual, crea un clúster de Kubernetes liviano con k3s , que se ejecuta en un solo nodo de servidor. Si necesitas la garantía de tiempo de actividad de varios nodos, puedes instalar el script de implementación de una línea en un clúster de Kubernetes que ya ha creado según tus especificaciones o agregar nodos trabajadores al clúster más adelante.

Entonces, ¿qué opción de implementación elijo?

Rasa ofrece tres métodos diferentes que puedes utilizar para implementar tu asistente Rasa: el script de implementación de una línea, Kubernetes / Openshift y Docker Compose. Cada uno de estos métodos implementa Rasa X + tu asistente Rasa. A continuación, analizaremos las diferencias para que pueda elegir el método que más te encaja.

Si deseas una implementación rápida y escalable

Utiliza el nuevo script de implementación de una línea. Este método instala Rasa X en un clúster de Kubernetes, o creará uno específico para ti si aún no tienes un clúster ejecutándose en tu sistema.

curl -s get-rasa-x.rasa.com | sudo -E bash

¿Qué sucede cuando usas el script de implementación de una línea para crear tu clúster e instalar Rasa X al mismo tiempo? Cuando ejecutas el script en una máquina virtual nueva, se activa un clúster ligero de Kubernetes, utilizando k3s. Esto te brinda el beneficio de la escalabilidad de Kubernetes, pero con menos gastos generales. Luego, Rasa X se instala automáticamente usando el gráfico Rasa X Helm. Si estás ejecutando el script en un clúster que ya existe, kubectl debe instalarse en tu máquina y conectarse con el cluster.

Puedes personalizar el script para configurar algunas de las configuraciones más comunes durante la instalación, como su contraseña Rasa X, la imagen del servidor de acciones y las credenciales del canal de mensajería. Con esto te ahorrarás el tener que configurarlos más tarde.

export INITIAL_USER_PASSWORD="my-safe-password" export ADDITIONAL_CHANNEL_CREDENTIALS='facebook.verify="rasa-bit",facebook.secret="secret",facebook.page-acess-token="token"' 
# -E flag applies environment variables from the current user for `sudo`
curl -s get-rasa-x.rasa.com | sudo -E bash

Hemos presentado algunas de las configuraciones más comunes para que puedas usarlas, pero esas no son las únicas configuraciones que puedes personalizar. Debido a que el script de una línea instala Rasa X usando el gráfico de Helm, puedes utilizar configuraciones adicionales usando el gráfico en cualquier momento después de la instalación. En resumen, el script de implementación de una línea hace que sea rápido y fácil comenzar, pero si deseas más opciones de configuración más adelante, también las tendrás disponibles.

Ten en cuenta que el script de implementación de una línea es compatible con Linux. Puedes encontrar todos los detalles, incluidos los requisitos mínimos del sistema, en los documentos.

Si quieres un control total sobre tu clúster

Utiliza Kubernetes u OpenShift. Antes de que lanzáramos el script de implementación de una línea, el gráfico Rasa X Helm era el método de referencia para implementar tu asistente en un clúster de Kubernetes. Aún puedes elegir este método hoy si tienes requisitos complejos o específicos para tu infraestructura, algo que a menudo vemos en las grandes empresas. El gráfico de Helm te brinda acceso a opciones de configuración adicionales, como conectar una base de datos externa a Rasa X o especificar que los pods Rasa deben ejecutarse en máquinas con GPU.

Sin embargo, ten en cuenta que el script de implementación de una línea te permite trabajar con un cluster ya existente, además no pierdes la capacidad de configurar los valores del gráfico de Helm, todavía están disponibles si necesitas usarlos después de la implementación. El script de una línea es una buena opción para la mayoría de los escenarios de implementación, a menos que tengas requisitos de personalización muy amplios.

Si deseas una opción de desarrollo reducida

Utiliza Docker Compose. Recomendamos Docker Compose para situaciones en las que necesitas una arquitectura reducida adecuada para implementaciones más pequeñas, desarrollo o proyectos personales. Si estás ejecutando Rasa en producción, especialmente en situaciones de alto tráfico o de situaciones críticas, te recomendamos que optes por Kubernetes.

También hay un método de Docker Compose para implementar un asistente Rasa independiente. A diferencia de los otros métodos que hemos discutido en esta guía, este método solo implementa tu asistente, no Rasa X. Si usas este método pero te gustaría probar Rasa X más adelante, puedes consultar nuestra guía de migración actualizada para conectar tu asistente a Rasa X cuando se ejecutan en dos sistemas separados.

Después de implementar Rasa X …

Ahora que has implementado Rasa X, ¿qué sigue? Independientemente del método que hayas elegido para implementar Rasa X, el proceso de implementación también crea un contenedor listo para producción para tu asistente. Ese contenedor está vacío en este momento, pero a continuación discutiremos cómo hacer que tu asistente esté en vivo y en producción, conectando tu repositorio Git a Rasa X.

Lleva a tu asistente a GIT

Si aún no has enviado el código de tu asistente a un repositorio de Git, ahora es el momento. Tu repositorio puede ser público o privado, en cualquier plataforma de alojamiento de código basada en Git, como GitHub, GitLab o Bitbucket. Tu repositorio remoto de Git es el registro de la verdad del estado del código de su asistente. Ya sea que estés realizando cambios en el código en tu máquina local o trabajando con tus datos de entrenamiento en Rasa X, todos los cambios se envían al repositorio remoto.

Ten en cuenta que hay algunos archivos que no querrás enviar a tu repositorio de Git. Excluye tus modelos y cualquier archivo que contenga tokens API o contraseñas, como credentials.ymlo .env. Puedes enumerarlos en un archivo para evitar enviarlos al control remoto. Más tarde, puedes volver a crear tus credenciales de forma segura en el servidor.

Conecta el control de versiones integrado

El control de versiones integrado sincroniza tu slot de Rasa X con un repositorio de Git remoto. Es una sincronización bidireccional; los cambios en el repositorio de Git se introducen automáticamente en Rasa X y los cambios que realizas en tus datos de entrenamiento en Rasa X se pueden enviar a Git. Cuando tienes cambios en Rasa X que aún no están en tu repositorio, Integrated Version Control te permite enviar los cambios a una rama nueva o existente en tu control remoto. Desde allí, puedes crear un RP, ejecutar pruebas y revisar los cambios antes de fusionarlos.

La primera vez que conectas Integrated Version Control, extrae los archivos de proyecto de tu asistente de tu repositorio de Git a un contenedor Rasa Open Source listo para usar, implementando su asistente.

Una vez que hayas conectado el Control de versiones integrado y entrenado o cargado un modelo, puedes hablar con tu asistente a través del aprendizaje interactivo y enviarlo a los probadores con Share your bot. Pero, antes de que tu asistente sea completamente funcional, deberás realizar los pasos adicionales para configurar el servidor de acciones personalizadas y proporcionar las credenciales del canal de mensajería; verás más detalles sobre esto en los siguientes puntos.

Puedes encontrar todas las instrucciones para conectar Integrated Version Control en los documentos.

Sube tu modelo

Después de conectar tu chatbot a través del Control de versiones integrado, tus datos de entrenamiento están presentes en Rasa X, pero no tu modelo. Deberás presionar el botón Entrenar o cargar un modelo que hayas entrenado localmente usando la API REST (verifique la pantalla Modelos en Rasa X para un comando cURL preformateado que puedes copiar / pegar).

Configura tu servidor de acciones

Si tu asistente ejecuta acciones personalizadas, deberás crear una imagen de Docker para tu servidor de acciones personalizadas y hacer referencia a la imagen en tu implementación. Para hacer esto, crea un Dockerfile que use la imagen rasa / rasa-sdk como parent. A continuación, se muestra un Dockerfile de ejemplo que copia el código de acción en el contenedor, instala las dependencias del código e inicia el servidor.

FROM rasa/rasa-sdk:latestCOPY actions.py /app/actions.py
COPY requirements-actions.txt /app
USER root
RUN pip install --no-cache-dir -r requirements-actions.txt
USER 1001
CMD ["start", "--actions", "actions"]

Crea la imagen a partir del Dockerfile y envíalo a un registro de contenedor público (o privado), como Dockerhub.

Si estás implementando usando el script de una línea, puedes pasar la imagen para tu servidor de acciones como un argumento adicional cuando ejecuta el script de instalación:

export INITIAL_USER_PASSWORD="<your secure password>" export ACTION_SERVER_IMAGE="<username/customaction>" export ACTION_SERVER_TAG="<version1.0>" 
# -E flag applies environment variables from the current user for `sudo`
curl -s get-rasa-x.rasa.com | sudo -E bash

¿no especificaste tu servidor de acciones la primera vez que lo lanzaste? Puedes vincular tu servidor de acciones más adelante volviendo a ejecutar el script de implementación de una línea, con el argumento ACTION_SERVER_IMAGE. Esto actualiza tu implementación a la última versión de Rasa X y aplica los cambios. Utilizará un proceso similar para actualizar tu servidor de acciones si realizas cambios en tu códgio personalizado: primero, crea una nueva imagen basada en el código actualizado y etiquétala con una nueva versión, luego haz referencia a la nueva versión en tu implementación por volver a ejecutar el script de implementación.

Para vincular tu servidor de acciones a un clúster de Kubernetes implementado con Helm, consulta los documentos y consulta aquí las instrucciones sobre cómo conectar un servidor de acciones personalizado con una implementación de Docker Compose.

Agregar dominio y SSL

Asegurar su servidor con un certificado SSL es una buena práctica, y es necesario para conectarse con muchas plataformas de mensajería. Antes de que pueda agregar un SSL, deberá configurar DNS para su servidor. Consulte con su proveedor de alojamiento para obtener instrucciones específicas, pero en la mayoría de los casos, deberá crear un registro A con su registrador de dominio, apuntando su dominio a la dirección IP externa de su VM.

Recomendamos utilizar cert-manager para emitir el certificado SSL para su clúster. Cert-manager es un controlador de gestión de certificados y se incluye con Kubernetes de forma predeterminada. Puede utilizar el método siguiente para instalar un certificado SSL en su clúster (implementado mediante el script de una línea o el gráfico de Helm).

Primero, instala CustomResourceDefinitions y cert-manager ejecutando este comando en tu servidor:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.14.0/cert-manager.yaml

A continuación, crea un nuevo archivo en tu servidor y asígnale un nombre letsencrypt-issuer-production.yml. Agrega lo siguiente al contenido, reemplazando el marcador de posición con tu dirección de correo electrónico:

apiVersion: cert-manager.io/v1alpha2
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: <your email address>
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: traefik

Guarda el archivo y luego aplícalo a tu clúster con este comando:

sudo kubectl apply -f letsencrypt-issuer-production.yml

Ahora, crea otro archivo y asígnale un nombre cert-request.yml. Agrega lo siguiente al contenido, reemplazando el marcador de posición por el nombre secreto y el nombre de dominio.

apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: letsencrypt-prod
namespace: rasa
spec:
secretName: <name for your secret, e.g. rasa-tls>
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
commonName: <domain name for your Rasa X server, e.g. myassistant.com>
dnsNames:
- <domain name for your Rasa X server>

Guarda el archivo y luego aplícalo a tu clúster con este comando:

sudo kubectl apply -f cert-request.yml

Finalmente, actualiza la entrada en la configuración de tu gráfico de Helm. Crea un archivo llamado values.yml y agrega lo siguiente, reemplazando los marcadores de posición para el nombre secreto y el dominio:

ingress:
annotations:
ingress.annotations.certmanager.k8s.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: traefik
hosts:
- host: <your domain name>
paths:
- /
tls:
- secretName: <secret name you specified in cert-request.yml>
hosts:
- <your domain name>

Ejecuta el comando de actualización para que la nueva configuración del gráfico pueda tener efecto:

sudo -E helm upgrade \
--values values.yml \
--namespace rasa \
--reuse-values \
rasa rasa-x/rasa-x

¡Eso es! Puedes probar tu configuración navegando hasta https://<your domain>en el navegador; ahora deberías ver un símbolo de candado seguro.

Para agregar un SSL a una implementación de Docker Compose, puedes consultar estos documentos.

Conectar canales de Mensajería

Al igual que el proceso para conectar tu servidor de acciones, también puedes pasar las credenciales del canal de mensajería cuando ejecutas el script de implementación de una línea.

export ADDITIONAL_CHANNEL_CREDENTIALS='facebook.verify="rasa-bit",facebook.secret="secret",facebook.page-acess-token="token"'

Si implementaste Kubernetes con el gráfico de Helm, conecta los canales de mensajería proporcionando tus credenciales en un archivo de anulación de values.yml .

Para ver un tutorial paso a paso sobre la configuración de canales de mensajería con una instalación de Docker Compose, echa un vistazo al episodio 11 de Rasa Masterclass.

Más recursos

Para ver un tutorial en video sobre cómo implementar Rasa X en Kubernetes usando el gráfico de Helm, vea el episodio 12 de Rasa Masterclass. Este video le muestra cómo crear y hacer referencia a una imagen de Docker para su servidor de acciones, así como también cómo personalizar la configuración usando el archivo de anulación de values.yml, útil si ha implementado Rasa X en su clúster usando el script de implementación de una línea o usando la tabla de Helm.

Y aunque desde entonces hemos simplificado el proceso de configuración para Integrated Version Control, el episodio 9 de Rasa Masterclass muestra cómo Integrated Version Control carga tu asistente en Rasa X y demuestra cómo configurar un servidor de acciones para un asistente implementado usando Docker Compose. Independientemente del método de implementación que elijas, este video es un excelente punto de partida conceptual para comprender cómo ejecutar Rasa X en un servidor.

Conclusión

No existe un método de implementación único que encaje a todos por igua, pero con la combinación de velocidad, simplicidad y arquitectura escalable, el script de implementación de una línea se acerca bastante. Ya sea por que tengas requisitos especiales o desees una configuración rápida y sencilla, tienes la libertad de implementar tu chatbot utilizando el método que más te encaje.

Después de implementar tu asistente, el trabajo no está terminado; es importante tomar lo que aprendes de los usuarios y canalizarlo nuevamente para mejorar el entrenamiento. Rasa X te permite convertir las interacciones con los usuarios en valiosos datos de entrenamiento e identificar patrones en las conversaciones que pueden ayudarte a iterar y refinar la experiencia del usuario. Ahora que has implementado tu asistente, estás listo para llevarlo al siguiente nivel.

Queremos que todos los desarrolladores Rasa tengan éxito cuando den el salto del desarrollo local a la producción. Pero si te quedas atascado, estamos aquí para ayudarte. Dirígete al foro para hacer preguntas, compartir tus comentarios o cuéntanos qué estás construyendo, y mantente en contacto en Twitter para recibir las últimas noticias de Rasa.

--

--

Karen White

Developer Marketing at Atlassian. Formerly at BigCommerce, Rasa. I think Voyager was the best Star Trek.