¿Cómo enviar una respuesta Json personalizada desde la acción personalizada de Rasa Chatbot?

Rasa es un marco de aprendizaje automático de código abierto para automatizar el Asistente contextual basado en texto y voz. Rasa NLU entiende la Intención correcta con la ayuda de sus datos nlu pre-entrenados. Rasa Core decide qué hacer a continuación y responde de acuerdo con las historias de entrenamiento. También tiene la capacidad de almacenar Entidades (Información específica del tipo de sustantivo almacenada para uso futuro). De forma predeterminada, puede responder con textos, enlaces de imágenes, objetos de botón, etc.

Instalación

Para comenzar con su propio asistente contextual, simplemente instale Rasa con la ayuda del comando mencionado a continuación:

pip install rasa

Asegúrese de tener instalada la última versión de  PIP , esto instalará la última versión de rasa 2.0, si tiene alguna dificultad con la versión de python, instale Python 3.6.8 creando un entorno virtual.

Crear un proyecto Rasa

Crear un proyecto rasa es muy simple, rasa le brinda un comando incorporado para crear un proyecto de muestra para usted. 

rasa init 

rasa python init

Después de ejecutar este comando con éxito, obtendrá una estructura de directorio que contiene una lista de archivos, puede verificar los archivos creados escribiendo «ls -la» en su terminal. Trabajando en él, podremos entrenar nuestro modelo rasa para realizar varias tareas de acuerdo con nuestros requisitos.

  • El archivo nlu.yml dentro de la carpeta «datos» contiene los diversos datos de entrenamiento para extraer intenciones y entidades.
  • El archivo stories.yml dentro de la carpeta «datos» contiene las historias de usuario de muestra para entrenar el chatbot que rasa core utilizará y predice la siguiente acción/respuesta adecuada.
  • El archivo config.yml contiene la configuración relacionada con la canalización de Machine Learning mediante la cual el modelo nlu y core preprocesará una oración y la usará.
  • El archivo domain.yml contiene una lista de Intenciones, Entidades, Respuestas y Acciones, cada una de estas cosas debe incluirse en el archivo de dominio. 
  • El archivo actions.py dentro de la carpeta de acciones contiene varias funciones de Python para cada acción personalizada definida en el archivo domain.yml. Este es un archivo muy útil ya que contiene las definiciones de acción que realizará el bot en intentos específicos, ya sea realizando algunos cálculos en los datos, llamando a las API y muchas más que puede realizar una función de python.

El formato de escritura de estos archivos lo proporcionará automáticamente el proyecto de muestra que creamos con la ayuda de «rasa init». Solo tenemos que agregar nuestros propios datos de entrenamiento, enumerar las intenciones, las respuestas y escribir la acción personalizada requerida y estamos listos para comenzar.

Podemos entrenar nuestro modelo con la ayuda de un simple comando escrito a continuación:

rasa train

Después de entrenar el modelo, podemos probar nuestro modelo en la propia terminal a través de un comando simple que se proporciona a continuación:

rasa shell 

Con esto, podemos iniciar la conversación con el bot y probar nuestro modelo entrenado. También podemos usar el indicador –debug para ver los diversos parámetros, como la confianza, las intenciones detectadas, la siguiente respuesta, las entidades capturadas, etc. Esto nos ayudará a conocer los conocimientos del modelo y puede entrenar aún más el modelo de una mejor manera para obtener respuestas más precisas.

Acciones personalizadas

Rasa proporciona a su usuario muchas capacidades, puede realizar cualquier tarea simplemente escribiendo una clase de python con algunos métodos para cumplir con los requisitos. Estas funciones están escritas en el archivo actions.py. Cada función se adjunta con un nombre de acción específico que comienza con la palabra clave «action_» que debe mencionarse con precisión en el archivo domain.yml, así como en las historias de usuario escritas en el archivo stories.yml. Esta acción personalizada se activa después de que la nlu captura una intención específica, realizará las tareas codificadas y luego devolverá las respuestas requeridas.

A continuación se muestra el código de acción personalizado de muestra para obtener una mejor comprensión:

Podemos iniciar el servidor de acción abriendo una nueva ventana de terminal, navegar al directorio del proyecto y ejecutar el comando que se proporciona a continuación:

rasa run actions

Recuperar entidades almacenadas dentro del método de acción personalizado

Veamos el siguiente comando que nos ayudará a recuperar las entidades almacenadas presentes dentro de la memoria del bot local:

variable_name = tracker.latest_message['entities']

El «rastreador» mantiene el registro de las conversaciones recientes y la entidad almacenada. El comando anterior devolverá una array de entidades almacenadas. Tendremos que iterar a través de esta array para obtener nuestro valor de entidad deseado. 

Envío de respuesta JSON personalizada

Normalmente, un bot envía un mensaje de texto (string) como respuesta (consulte la captura de pantalla anterior), pero el desafío surge cuando tenemos que enviar una respuesta personalizada en forma de datos JSON para satisfacer las necesidades de los usuarios finales de el bot

Definamos un caso de uso en el que tendremos que usar una respuesta personalizada y enviar los datos JSON al canal de interfaz de usuario.

Suponga que el Rasa-bot almacenó algunos datos de usuario entre la conversación y ahora el usuario quiere una lista de los detalles proporcionados. Aquí viene la tarea de enviar una respuesta personalizada en forma de datos JSON que ayudarán al desarrollador front-end a segregar la respuesta y completar fácilmente los datos en la interfaz de usuario.

A continuación se muestra el código de Python para escribir el método de acción personalizada, que recuperará las entidades almacenadas por el usuario y devolverá los valores apropiados:

Python3

class ListUserDetails(Action):
  
    def name(self) -> Text:
        # Name of the action mentioned in the domain.yml file
        return "action_list_user_details"
  
    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
  
        # It will return array of entities
        entities = tracker.latest_message['entities']
  
        # Iterating through the array to retrieve the desired entity
        for e in entities:
            if e['entity'] == "user_name":
                entity_name = e['value']
            elif e['entity'] == "city_name":
                entity_city = e['value']
            elif e['entity'] == "designation":
                entity_designation = e['value']
  
        dispatcher.utter_message(
            template="utter_user_details",
            name=entity_name,
            city=entity_city,
            designation=entity_designation
        )
  
        return []

Escrito arriba hay un ejemplo de código de Python de acción personalizada del chat-bot Rasa para realizar una acción deseada particular para comprender la intención exacta del usuario. Aquí, Rasa NLU toma el mensaje del usuario y descubre la intención correcta, que en el caso anterior es «Enumerar todos los detalles del usuario». 

Después de esto, Rasa llama a la acción personalizada (action_list_user_details) asociada con la intención particular y realiza la tarea. En el código anterior, obtenemos los detalles del usuario almacenados como una entidad dentro de la memoria local del bot, como el nombre, la ciudad y la designación con la ayuda del rastreador y enviamos el resultado obtenido como una respuesta única a la plantilla «utter_user_details». con la ayuda de dispatcher.utter_message()

El código anterior llamará a la respuesta «utter_user_details» mencionada en el archivo domain.yml con los detalles del usuario obtenidos como argumentos. Por último, tenemos que escribir la respuesta «utter_user_details» en el archivo domain.yml usando la palabra clave personalizada para enviar un objeto JSON al canal como respuesta al mensaje del usuario. A continuación se muestra el formato de la respuesta:

Siguiendo este método, se enviará una respuesta JSON con el atributo proporcionado al canal de salida respectivo. La salida del siguiente código se verá similar a esto:

De manera similar, al usar la respuesta personalizada, podemos enviar los datos requeridos en formato JSON, que el desarrollador front-end puede manejar bien.

Publicación traducida automáticamente

Artículo escrito por mdaqshahab619 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *