# 构建对话

# 故事编辑器

Botfront 基于 Rasa,提供了可视化且高效的创建、编辑 Rasa 故事的工具。 翼虎快快乐乐把象eat了(- 。-)

故事是对话流的基本构建单元。Rasa 是一个用符号语言来设计对话的框架,如果你不知道什么是 Rasa 的话。

  • 你可以通过可视化的方式为你的虚拟助手创建一个真正的对话,感觉就像跟真人对话类似的。

  • 你可以创建一个对话流,为它创建分支,把多个对话链接起来(或者根据具体情况把他们自己的某一部分链接起来)。

  • 你可以标注用户的会话并添加到自己的训练数据中,这可以为你节省不少的开发时间。机器人回复也可以自动生成并保存,只需稍微修改一下即可,不用再在别的什么地方费力维护了。

# 对话流示例

当你在对话构建器里面创建一个新的对话时系统会提供给你一个初始界面,这里提供了你接下来动作所需的各种选项。

COB initial

# 用户对话

一个对话几乎总是从一个用户会话开始(除非你是在创建一个用于链接的故事).

COB user: text

这里我们选 text,接下来会出现一个文本框

COB user: text input empty

用户输入 Hi there.

COB user: text input

如果你已经有一个已经训练好的模型(一般情况下都是这样),用户输入的内容会首先被拿来做语法分析,然后根据训练好的模型做标注(新的输入也会重复这个过程)。如果你还没有训练模型的话就无法获取用户的意图,这时你应该先选择或者创建一个意图并保存下来。

COB user: text parsed

点击下来菜单我们可以选择系统中已有的意图或者也可以从这里创建一个新的。

COB user: intents

我们可以非常灵活的任意创建、修改意图和实体标注(前提是标注合理),然后方便的保存。

COB user: saved

注意

已保存会话不支持二次编辑,一旦你编辑并保存了一个用户会话,又想重新编辑的话你只能删掉然后在同一位置重新创建一个新的。

一旦用户会话被保存,就会同时被添加到训练语料库中用来增强你的模型。如果你把这条用户会话删掉,对应的训练数据仍然会保存在你的训练语料中,如果你想彻底删除这条语料,目前只能通过手动到语料库中删除。

# 机器人回复

在这个简单的对话流中,接下来我们会根据你用户的会话,为对话机器人做一个回复,这个回复也可以是一个slot 或者 action,一次只能处理一个会话。

简单文本的回复例子:

COB bot: responses

如你所见,我们可以跟日常聊天一样的键入回复内容,这个输入框支持 Markdown 语法。

COB bot: text response

再为这个会话加一个带快捷方式的 Button 回复(Quick reply):

COB bot: quick reply

COB bot: quick reply

这里我们可以根据需要添加任意多的可点选按钮选项,这些用户选项有两种类型:PostbackWeb URL:

  • Postback 这种类型的按钮直接把内容模拟用户输入的方式返回回来,效果就像"说"的一样。你只需要选择一下当用户点了这些按钮时,对话机器人应该识别的对应意图、实体就可以了。
  • Web URL 这种类型直接打开一个 Web URL。

COB bot: quick reply

COB bot: quick reply

COB bot: quick reply

# 对话分支

这里我们提供两个对话分支给到用户,根据用户选择不同对话流将流向不同的两个分支。

COB branch

不同的按钮选项我们会获得不同的 payload,我们来看下如何处理根据这些 payload 做处理:

COB user: good payload

可以为这些 payload 选择一个对应的意图,或者干脆创建一个新的。

COB user: good payload

本例中我们选择 chitchat.i_am_good 意图,然后为这个意图配备一个简短的文本回复。

COB user: chitchat.i_am_good

提示

选择了 payload 选项之后,这里可能根据 payload 的输入出现一句来自模型的内容,放心,这并不会影响故事的效果或者任何按钮选择的逻辑。

同样的逻辑处理一下 Sad 分支。

COB user: chitchat.i_am_sad

COB user: chitchat.i_am_sad

搞定!我们已经创建了一个简单但强大的故事脚本,到了训练模型然后尝试一下的时候了!

# 标注实体

接下来是一个在对话编辑器中,如何标注和使用实体的例子:

Entity annotation flow

提示

选中把你想要标注的实体,在弹出菜单中你可以选择一个你模型中已有的实体或者创建一个新的。

# 槽和动作

# Slots

根据对话需要,还可以使用 slot,slot 可以被用来创建一个对话的分支,如下例:

COB slot

COB slot

# Actions

如果你已经创建了自定义动作,就可以如下使用这些自定义动作了:

COB action

COB action

# 多轮对话

Rasa 在处理上下文对话方面的强大功能在 Botfront 里面得到了完全的发挥。所谓一个会话的上下文,指的是该对话过去的所有对话中提到的内容合集,作为一个合格的对话机器人,给用户的回复不应该仅限于用户的最新一条会话,还要通篇考虑用户之前提到的对话内容。

下面的示例演示了一个简单的、上下文敏感的对话,可以看到,当用户几次输入完全相同的问题时,对话机器人会做出不同的反应。

在接下来的章节中,你会找到更多的上下文相关的例子,比如使用 slot 方式来描述对话分支等。