Como crear un chatbot en español con RASA. Fácil y practico

Jose Pablo Ibarra Medrano
LCC-Unison
Published in
7 min readDec 9, 2021
Photo by Possessed Photography on Unsplash

Introducción.-

Comenzare explicando que los chatbots son programas de computadora que pueden hablar con humanos en Internet. Están programados para responder preguntas, dar consejos y brindar compañía. Todo esto por medio de una pagina web propia o así mismo por medio de una red social como ya puede ser facebook messenger, whatsapp, instagram, telegram entre muchos otros. En este blog lo haremos funcionar por medio de la aplicación de telegram, pero mas adelante subiré otro blog para saber como subirlo por medio de la plataforma de facebook messenger ya que esta es mas complicada y tiene un grado un poco mas complejo de hacer que funcione correctamente.

Nota: Todo el proyecto lo realizare en visual studio code.

Como empezar.-

Primero antes que todo yo recomiendo tener una versión de Python de la 3.7 a la 3.8 (yo utilice la versión 3.7.9) esto para que no tengas problemas al momento de instalar las librerías necesarias para que funcione correctamente.
Ahora comenzare diciendo todo lo que necesitas para poder utilizar rasa correctamente.-

Primero instalamos venv

pip install virtualenv

Después de esto nos localizamos en la carpeta donde desea hacer el proyecto yo en mi caso le pondré chatbotRasa. Paso siguiente colocamos el siguiente comando:

python -m venv ./venv
Así debería de salirte en el caso de que todo este funcionando correctamente. Esto indica que se creo correctamente el ambiente virtual.

Después activamos el ambiente virtual:

.\venv\Scripts\activate
El (venv) indica que estas dentro del entorno virtual es buena señal!

actualizamos pip e instalamos rasa:

pip install --upgrade pip
pip install rasa

Despues creamos un nuevo proyecto

rasa init

Después nos preguntará en cmd si deseamos crear el proyecto en el directorio que estamos y le damos a “yes” y cuando nos pregunte si deseamos entrenar el bot le damos que no.

Si todo salió bien se debería de ver tu vsc

Configurar tu proyecto para que funcione en español.-

Ahora tenemos que dirigirnos al archivo config.yml dentro de la carpeta donde creaste el proyecto y remplazar este código por el que ya esta:

# The config recipe.# https://rasa.com/docs/rasa/model-configuration/recipe: default.v1# Configuration for Rasa NLU.# https://rasa.com/docs/rasa/nlu/components/language: "es"pipeline:# # No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model.# # If you'd like to customize it, uncomment and adjust the pipeline.# # See https://rasa.com/docs/rasa/tuning-your-model for more information.#   - name: WhitespaceTokenizer#   - name: RegexFeaturizer#   - name: LexicalSyntacticFeaturizer#   - name: CountVectorsFeaturizer#   - name: CountVectorsFeaturizer#     analyzer: char_wb#     min_ngram: 1#     max_ngram: 4#   - name: DIETClassifier#     epochs: 100#     constrain_similarities: true#   - name: EntitySynonymMapper#   - name: ResponseSelector#     epochs: 100#     constrain_similarities: true#   - name: FallbackClassifier#     threshold: 0.3#     ambiguity_threshold: 0.1# Configuration for Rasa Core.# https://rasa.com/docs/rasa/core/policies/policies:# # No configuration for policies was provided. The following default policies were used to train your model.# # If you'd like to customize them, uncomment and adjust the policies.# # See https://rasa.com/docs/rasa/policies for more information.#   - name: MemoizationPolicy#   - name: RulePolicy#   - name: UnexpecTEDIntentPolicy#     max_history: 5#     epochs: 100#   - name: TEDPolicy#     max_history: 5#     epochs: 100#     constrain_similarities: true

Después instalamos estas dos librerías:

pip install rasa[spacy]
spacy download es_core_news_md

Con todo esto tu chatbot ya esta preparado para realizar respuestas en español. A continuación pondré unas imágenes en las que muestro como se ve el chatbot al comienzo y como lo configure yo para que acepte preguntas y respuestas en español y explicare brevemente cada archivo .yml para ayudar a comprender el funcionamiento de rasa.

Archivos .yml

nlu.-

En este apartado colocaremos todas las posibles respuestas que esperamos que nos hagan nuestros usuarios a nuestro chatbot en cuanto creemos nuestro entorno de rasa nos vendrán los siguientes intents que vienen siendo como la intención con la que nos hablan los usuarios de este tipo de ejemplos podemos hacer varios ya puede ser para un saludo, una despedida, en mi caso coloque varios como lo son: tiendafisica(Es cuando un usuario pregunta por la ubicación de mi local), puntomedio(Cuando me preguntan si podemos vernos en un punto medio que nos quede cerca ambos para poder entregarles su pedido de ropa), etc.

Asi viene los intents por default en rasa
Modificacion que hice al español para que pudiera reconocer los intentos que le hicieran al bot con el idioma deseado.

stories.yml

En este apartado crearemos algo así como la secuencia que queramos que identifique nuestro chatbot para reconocer con que intención responder cuando los usuarios nos hablen un caso simple es cuando un usuario nos saluda el bot lo reconocería como un intent de tipo “greet” a lo cual le respondería con el comando utter_greet(Todo comando de responder es representado con el nombre del intent mas un “utter_” antes del intent como se ve en la imagen) y así continua la charla hasta terminar usualmente con un “utter_goodbye”.

Imagen que muestra como viene por default el archivo stories.yml
En este ejemplo modifique el intent de greet por saludo y agregue otros intents al storie para que la conversación fluya como yo pensaría que los usuarios contestarían en una platica normal.

domain.yml

En este archivo colocaremos todas las posibles respuestas que queramos realizar al momento que los usuarios nos preguntan algo antes que nada en este archivo se deben de colocar todos los intent que tengamos en nuestro archivo de nlu.yml para que nuestro bot los pueda reconocer y despues de esto va el apartado de los “response” en donde pondremos las respuestas que les daremos a nuestros usuarios estos se calificaran como “utter_” +más el intent que le corresponda como por ejemplo si el intent es “greet” el response seria “utter_greet”.

Conversación de ejemplo con el chatbot en cmd en el cual se puede observar como responde correctamente todo lo consultado por el usuario.
Archivo domain.yml hecho por default al crear el proyecto de rasa
En este domain.yml muestro como en los intent coloco todos los que tengo en mi archivo nlu.yml y despues se colocan los response con sus respectivas respuestas que se le quieran hacer al usuario.

Entrenando tu chatbot y como saber como tener una conversación de prueba.

Entrenando tu chatbot y como saber como tener una conversación de prueba.

Para entrenar tu chatbot tendremos dos comandos muy utiles uno es:

rasa train

Lo que hace este comando es que entrena tu chatbot con las historias que le hayas enseñado a partir del archivo stories.yml y también toma los intents del archivo nlu.yml para entrenar al chatbot.
Tambien existe este siguiente comando:

rasa interactive

Lo que hace este comando es que te permite realizar una platica con tu chatbot de prueba y ver como responde a tus preguntas simulando ser tu mismo un usuario y según como crea el bot que debería tomar tus preguntas te manda el posible intent que piensa que es y ya le respondes si esta bien o mal. Y así se crea una platica interactiva en la cual cuando decidas terminarla solo “precionas control+c” y escoges la opción de “Export and quit” para guardar esa platica en la pagina de stories.yml. Este proceso lo puedes realizar múltiples veces para entrenar tu chatbot y que funcione cada vez mejor. También puede crear tus propias historias directamente desde stories.yml y despues solo entrenar el bot con el primer comando de esta sección.

A continuación muestro un ejemplo de una platica con el bot con el comando “rasa interactive”.

Como subir tu chatbot ya funcional a Telegram.

Lo primero que debes hacer para subir tu chatbot a Telegram es dar de alta tu bot en chat de telegram solo buscas botfather:

Asi te deberia salir

Después dentro del chat ingresas el siguiente comando, nombre y username de tu bot:

/newbot#Eliges el nombre de tu bot como por ejemplo:
myFirstChatBot
#Ahora elige el username de tu chatbot por ejemplo:
First_Bot

Después te dará un token, ese debes copiarlo e ir al archivo de credentials.yml despues eberás copiar y pegar las siguientes líneas de código y colocar el token en el apartado de token “acces_token” y el username de tu bot en el apartado de “verify”.

telegram:  access_token: "<your acces key>"  verify: "<your bot>"  webhook_url: "<your webhook>"

Así quedaría después de colocar el token y el username del bot

telegram:  access_token: "5034397508:BSErXamSehn8AKk-NcReWvrU9bCcjsLL18X"  verify: "First_Bot"  webhook_url: "<your webhook>"

Anexo la pagina de descarga de ngrok oficial: https://ngrok.com/download

Después descargamos el launcher de ngrok desde su pagina oficial y corremos el “ngrok.exe” e ingresamos la siguiente linea de comando:

ngrok http 5005

Después copiamos la siguiente linea de codigo subrayado con blanco:

Y la copiamos en la parte de “webhook_url” mas los siguiente.- “/webhooks/telegram/webhook” y nos deberias quedar algo asi pero con tus propios datos(Estos que puse aqui son de ejemplo solamente):

telegram:  access_token: "5034397508:BSErXamSehn8AKk-NcReWvrU9bCcjsLL18X"  verify: "First_Bot"  webhook_url: "https://9de8-2806-263-c480-8b9-dca5-3a57-9cc4-f47e.ngrok.io/webhooks/telegram/webhook"

Esto de descargar ngrok es para hacer nuestro propio servidor donde correr el chabot para que funcione en otros dispositivos.

Ya despues de todo esto solo nos quedaria correr el comando siguiente:

rasa run

Y con esto nuestro bot debería funcionar correctamente en telegram como muestro en la siguiente imagen.

Con esto deberías de ser capaz de realizar un primer chatbot en español sin ningún problema, espero que sea todo un éxito!

--

--