Desarrollo de Chatbots con Rasa
Rafa Haro Ramos
@rafa_haro
rafa_haro
Agenda
What’s a Chatbot?
Hype, Hype Everywhere
Chatbots Landscape
Disclaimer: Manage The Expectations
Rasa Framework
Why Rasa?
Demo
Rasa Architecture
Starting a Project with Rasa
Rasa NLU
Rasa NLU: Select a Pipeline
pipeline: "pretrained_embeddings_spacy"
pipeline: "supervised_embeddings"
Rasa NLU: Select a Pipeline
Rasa NLU: Intents
## intent:saludo
- hola
- buenas
- hola, como estas?
- buenos días
- buenas tardes
- buenas noches
- que pasa
- saludos
## intent:a_que_hora
- a qué hora es la charla de [Rafa Haro](speaker)
- cuando es la charla de [Antonio David Perez](speaker)
- a qué hora presenta [María Marcos](speaker)
- cuándo es la charla de [Guillem Duran](speaker)
- cuando habla [Alberto](speaker)
- a que hora es la charla de [antonio](speaker)
- a qué hora es la presentación de [Orange](speaker)
- cuando presenta [Ravenpack](speaker)
- a que hora es la charla de [irene](speaker)
- cuando es la charla de [david garcia](speaker)
## intent:que_hay_a_las
- que charlas hay a las [11:30](time)?
- que hay a las [12](time)?
- que charlas hay [hoy](day) a las [17:00](time)
- que hay [mañana](day) a las [14:30](time)
- que charlas hay el [sabado](day) a las [11:00](time)
- charlas el [domingo](day) a la [13:00](time)?
- quién presenta el [sabado](day) a las [17](time)?
- que charlas hay el [sabado](day)
- charlas del [domingo](day)
- [hoy](day)
- [sabado](day)
- el [domingo](day)
- [12:10](time)
- [17](time)
- [1](time)
## regex:time
- ([01]?[0-9]|2[0-3])(:[0-5][0-9])?
## lookup:day
- hoy
- mañana
- el sabado
- el domingo
- el sábado
- sábado
- domingo
## lookup:speaker
data/speakers.txt
## lookup:talk
data/talks.txt
Rasa NLU: Input Processing
Rasa NLU: Entities
Rasa NLU: Entities
{
‘Python para calentar tu casa’: [‘python’, ‘calentar’, ‘casa’],
‘MI CASA: venturas y desventuras de una radioastrónoma en Python’: [‘casa’, ‘venturas’, ‘desventuras’, ‘radioastronoma’, ‘python’]
}
charla sobre calentar mi casa
2
1
Rasa NLU Demo
Rasa Core: Stories
Rasa Core: Stories
## say hello
* saludo
- action_hello
## say goodbye
* despedida
- utter_despedida
- action_restart
## estoy bien path
* como_estas
- utter_estoy_bien
- utter_como_estas
* estoy_bien
- utter_me_alegro
- utter_te_puedo_ayudar
templates:
utter_saludo:
- text: "Qué pasa pisha?"
- text: "Qué pasa cabesa?"
- text: "Qué pasa quillo?"
utter_despedida:
- text: "venga nos vemos"
utter_estoy_bien:
- text: "yo estoy de arte"
- text: "aquí estamos chatboteando"
- text: "de categoría"
utter_como_estas:
- text: "¿y tu como andas?"
- text: "¿y tu que te cuentas?"
utter_me_alegro:
- text: "me alegro"
- text: "wena esa"
utter_te_puedo_ayudar:
- text: "¿qué te hace falta?"
- text: "¿qué necesitas?"
- text: "¿en qué te puedo ayudar?"
Rasa Core: Flow Diagram Example
Hola cómo estás?
RASA NLU
intent: como_estas, 95%
entities: []
RASA CORE
next_action: utter_estoy_bien, 100%
slots: []
Aquí estamos chatboteando
utter_estoy_bien:
- text: "yo estoy de arte"
- text: "aquí estamos chatboteando"
- text: "de categoría"
RASA CORE
## estoy bien path
* como_estas
- utter_estoy_bien
- utter_como_estas
* estoy_bien
- utter_me_alegro
- utter_te_puedo_ayudar
Rasa Core: Slots
Rasa Core: Slots
## a que hora es la charla
* a_que_hora
- slot{"speaker":"Rafa Haro"}
- action_find_talk
- action_listen
## que hay a las sin hora
* que_hay_a_las
- action_find_talks_by_time{"day":"domingo"}
- form{"name": "talk_form"}
- action_find_talks_by_time{"time":"11:30","day":"domingo"}
Stories must reflect where the declared slots are filled
Rasa Core: Slots Example
Rasa Core: Actions
Rasa Core: Actions
class ActionFindNextTalks(Action):
def name(self) -> Text:
return "action_find_next_talks"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
now = datetime.now()
search = Talk.search()
query = search.sort('start').query('range', start={'gt': now})
if query.count() == 0:
dispatcher.utter_message("Pues ahora mismo no encuentro ninguna")
else:
message = "Las próximas charlas que he encontrado son:\n"
message += range_query_to_message(query)
dispatcher.utter_message(message)
return []
Rasa Core: Events
Rasa Core: Forms
Rasa Core: Forms
Rasa Core: Forms
Rasa Workflow
Rasa Interactive Demo
Rasa Channels
HTTPS
setWebhook(https://your_url.com/..)
ProxyPass
GRACIAS!
@adperezmorales
@rafa_haro
adperezmorales
rafa_haro