Manejo de conversaciones con ConversationHandler en Python: Creación de bots y asistentes
Introducción
En el desarrollo de bots y asistentes conversacionales, es importante poder manejar las conversaciones de una manera eficiente y efectiva. Esto es lo que hace el módulo ConversationHandler
de la biblioteca rasa
.
ConversationHandler
es una clase que permite definir un flujo de conversación paso a paso. Cada paso del flujo se conoce como un handler. Un handler es una función que se ejecuta cuando la conversación llega a un punto determinado.
Creando un ConversationHandler
Para crear un ConversationHandler
, debemos importar la clase ConversationHandler
y definir una instancia de la clase.
from rasa.shared.core.handlers import ConversationHandler
# Creamos una instancia de la clase ConversationHandler
conversation_handler = ConversationHandler()
Definiendo handlers
Un handler es una función que se ejecuta cuando la conversación llega a un punto determinado. Los handlers pueden tomar dos parámetros:
user_utterance
: El mensaje del usuario.tracker
: Un objeto que contiene información sobre la conversación.
El handler debe devolver un objeto Action
. El objeto Action
indica qué acción debe realizar el bot a continuación.
# Creamos un handler que responde al mensaje "Hola"
def greet(user_utterance, tracker):
return Action("utter_greet")
# Creamos un handler que responde al mensaje "Adiós"
def goodbye(user_utterance, tracker):
return Action("utter_goodbye")
Agregando handlers a un ConversationHandler
Para agregar un handler a un ConversationHandler
, debemos llamar al método add_handler()
. El método add_handler()
toma dos parámetros:
pattern
: Una expresión regular que coincide con los mensajes del usuario.handler
: El handler que se ejecutará cuando la conversación coincida con la expresión regular.
# Agregamos los handlers a nuestro ConversationHandler
conversation_handler.add_handler(greet, pattern="hola")
conversation_handler.add_handler(goodbye, pattern="adiós")
Ejecutando un ConversationHandler
Para ejecutar un ConversationHandler
, debemos llamar al método handle()
. El método handle()
toma un mensaje del usuario como parámetro.
# Obtenemos un mensaje del usuario
user_utterance = "Hola"
# Ejecutamos el ConversationHandler
conversation_handler.handle(user_utterance)
Ejemplo completo
El siguiente ejemplo muestra cómo crear un ConversationHandler
simple que responde al mensaje «Hola» con el mensaje «Hola, ¿en qué puedo ayudarte?» y al mensaje «Adiós» con el mensaje «Adiós, ¡hasta luego!».
from rasa.shared.core.handlers import ConversationHandler
# Creamos un ConversationHandler
conversation_handler = ConversationHandler()
# Creamos un handler que responde al mensaje "Hola"
def greet(user_utterance, tracker):
return Action("utter_greet")
# Creamos un handler que responde al mensaje "Adiós"
def goodbye(user_utterance, tracker):
return Action("utter_goodbye")
# Agregamos los handlers a nuestro ConversationHandler
conversation_handler.add_handler(greet, pattern="hola")
conversation_handler.add_handler(goodbye, pattern="adiós")
# Obtenemos un mensaje del usuario
user_utterance = "Hola"
# Ejecutamos el ConversationHandler
conversation_handler.handle(user_utterance)
Salida:
-- Bot start --
User: Hola
Bot: Hola, ¿en qué puedo ayudarte?
-- Bot end --
Conclusión
ConversationHandler
es una herramienta poderosa que permite crear bots y asistentes conversacionales de manera eficiente y efectiva. Con ConversationHandler
, podemos definir un flujo de conversación paso a paso que el bot seguirá para interactuar con los usuarios.