Rasa是一个开源的机器学习框架,主要用来构建文本和语音的自动对话。
一、构建自己的对话助手(简单示例)
在本指南中,我们将创建一个帮助用户订阅新闻稿(newsletter
)的助手。通过以下每个步骤了解如何创建简单助手:
1. NLU数据(NLU data)
为了让助手能够识别用户在说什么,不管用户如何表达他们的信息,我们需要提供助手可以从中学习的示例信息。我们根据信息所表达的想法或目标(也称为意图)对这些示例进行分组。在下面的代码块中,我们添加了一个名为greet
的intent
(意图),其中包含“Hi”
、“Hey”
和“good morning”
等示例消息。
意图及其例子被用作助手自然语言理解(NLU
)模型的训练数据。
nlu:
- intent: greet
examples: |
- Hi
- Hey!
- Hallo
- Good day
- Good morning
- intent: subscribe
examples: |
- I want to get the newsletter
- Can you send me the newsletter?
- Can you sign me up for the newsletter?
- intent: inform
examples: |
- My email is example@example.com
- random@example.com
- Please send it to anything@example.com
- Email is something@example.com
2. 响应(Responses)
既然助手理解了用户可能会说的一些消息,它就需要能够发送回用户的响应。
“你好,我能帮你什么忙吗?你的电子邮件地址是什么?“这是我们助理将使用的一些回答。在接下来的步骤中,您将看到如何连接用户消息和响应。
在下面的代码块中,我们列出了一些响应,并为每个响应添加了一个或多个文本选项。如果一个响应有多个文本选项,则在预测该响应时,将随机选择其中一个选项。
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.
3. 故事(Stories)
故事是训练助手根据用户之前在对话中所说的内容做出正确反应的示例对话。故事格式显示用户消息的意图,后跟助手的操作或响应。
你的第一个故事应该展示一个对话流程,在这个流程中,助手帮助用户以一种直截了当的方式完成他们的目标。稍后,您可以为用户不想提供信息或切换到其他主题的情况添加故事。
在下面的代码块中,我们添加了一个故事,在这个故事中,用户和助手交换问候,用户请求订阅新闻稿,助手开始通过新闻稿表单收集所需的信息。您将在下一步学习表单。
stories:
- story: greet and subscribe
steps:
- intent: greet
- action: utter_greet
- intent: subscribe
- action: newsletter_form
- active_loop: newsletter_form
4. 表单(Forms)
在许多情况下,助手需要从用户那里收集信息。例如,当用户想要订阅时事通讯时,助理必须询问他们的电子邮件地址。
您可以在Rasa
中使用表单来完成此操作。在下面的代码块中,我们添加了新闻稿表单(newsletter_form
),并使用它来收集用户的电子邮件地址。
forms:
newsletter_form:
email:
- type: from_text
5. 规则(Rules)
规则描述了会话中应该始终遵循相同路径的部分,无论之前在会话中说了什么。
我们希望助手总是用一个特定的动作来回应某个意图,所以我们使用一个规则来将该动作映射到意图。
在下面的代码块中,我们添加了一个规则,每当用户表示“subscribe”
意图时触发“newsletter_form”
。我们还添加了一个规则,一旦提供了所有必需的信息,它就会触发“utter_subscribed”
操作。第二条规则仅在“newsletter_form”
开始时处于活动状态时适用;一旦它不再处于活动状态(active\u loop
:null),表单就完成了。
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