简介
rasa是一个开源的对话机器人。主要是针对任务型对话机器人,代码开源:
教程地址:https://rasa.com/docs/rasa/
github地址:https://github.com/RasaHQ/rasa
一个例子
教程提供了一个入门的交互式例子了解rasa的基本概念。
创建助手
这个例子创建一个帮助用户订阅新闻的聊天助手,执行以下的步骤了解一个简单的助手是如何被创建的:
- NLU数据
不管用户的表达方式如何,为了让机器理解用户说的话,必须提供一些机器可以学习的消息样本。将这些样本按照消息的意图进行分组。在下面的这个例子中,添加了 “greet"的意图,这个意图包括的消息有:“hi",“Hey”,"good morning"等。
nlu:
- intent: great
examples:|
- Hi
- Hey!
- Hallo
- Good day
- Good morning
- intent: subscribe
example:|
- I want to get the newsletter
- can you send me the newsletter?
- can you sign me up for the newsletter?
- intent: inform
example:|
-My email is example@example.com
-random@example.com
- please send it to anything@example.com
意图和它们的例子用来作为机器人语言理解模块的训练数据。
- Response
通过语言理解部分,机器理解了用户表达的用途。之后它需要回复信息给用户。下面是回复的一些例子,如果一个回复对应多个文本,这些文本会随机的被选作为回复内容。
responses:
utter_greet:
- text: |
Hello! How can I help you?
- text: |
Hi!
utter_ask_email:
- text: |
What is your email address?
utter_subscribed:
- text: |
Check your inbox at {email} in order to finish subscribing to the newsletter!
- text: |
You're all set! Check your inbox at {email} to confirm your subscription.
stories
stories是对话的样例,用来训练机器人基于用户的对话内容做出相对应的回复。它的格式是用户的意图,紧接着是机器的回复或者应该采取的行动。
第一个故事应该是一个机器人帮助用户完成目标的直接过程。然后,可以添加用户不提供信息或者转向其他主题的故事。在下面的例子中,添加了一个用户与机器人交换问候,用户提出订阅需求然后机器请求用户信息的故事。
stories:
- story: greet and subscribe
steps:
- intent: greet
- action: utter_greet
- intent: subscribe
- action: newsletter_form
- active_loop: newsletter_form
Forms
在很多情况下机器需要收集用户的信息,例如用户订阅新闻,需要知道用户的邮箱。在Rasa里面,收集信息使用表格来完成。下面的例子展示了一个收集用户邮箱的表格。
slots:
email:
type: text
mappings:
- type: from_text
conditions:
- active_loop: newsletter_form
requested_slot: email
forms:
newsletter_form:
required_slots:
- email
Rules
Rules定义了一些固定的规则,对于某些意图,使用规则来定义机器对这些意图的固定反应。例如下面的例子中,第一个规则定义了当识别用户是subscribe的意图时,采用启动newsletter_form的行为。第二个规则只有在newsletter_form启动之后才会开启,当active loop状态不在处于激活时,表格就算完成了。
rules:
- rule: activate subscribe form
steps:
- intent: subscribe
- action: newsletter_form
- active_loop: newsletter_form
- rule: submit form
condition:
- active_loop: newsletter_form
steps:
- action: newsletter_form
- active_loop: null
- action: utter_subscribed
训练并和助手对话
有了上面的数据,就可以对模型进行训练了。原文中提供了训练的交换见面,通过按下训练按钮就可以训练模型,训练完以后还可以直接对话。
可以按照教程提供的例子,修改代码,适应一个新的任务。
你已经构建了助手,下一步是什么?
训练完模型之后,可以通过对话的方式去验证机器人是否满足自己的要求。但是对于复杂的任务来说,手工测试效率低下。rase 提供了自动化测试的方法,构建用于测试的stories,然后执行rasa test就可以自动化测试。测试的stories长下面这样:
stories:
- story: test for greet and subscribe
steps:
- user: |
Hello there
intent: greet
- action: utter_greet
- user: |
I want to subscribe to the newsletter. My email is example@email.com
intent: subscribe
- action: utter_subscribed
总结
正如程序语言的hello world一样,这部分介绍了rasa机器人的一个hello world程序。了解使用rasa需要提供的数据和部件:用于训练语言理解模块的NLU数据,用于机器对用户意图产生对应回复的Response数据,用于对话流程的Stories数据,收集用户信息的部件以及机器人必须遵守的Rules设置。最后,还介绍了自动化测试的rasa test命令。