案例分享:用SAP Conversational AI构建聊天机器人
- 让Bot理解人类的语言。
- 由强人工智能所驱动的复杂对话流。
- 将该Bot部署到外部渠道上(如:Facebook Messenger、Twitter等)。
下面让我们从一个简单的Bot开始吧。下图是它与人类对话的界面:
在此,该Bot需要达到的智能程度为:
- 理解各种问候和告别语。
- 理解用户要求讲个笑话,能够从列表中随机挑选一个笑话,并回复。
- 理解至少两种反馈(大笑或咧嘴笑)的意义,并能以有趣的GIF图片或深深的道歉作出回复。
- 在Facebook Messenger上部署该Bot。
前期要求
1. 在SAP Conversational AI上创建一个免费帐户。
2. 在登录之后,单击“Start with a template”按钮,或直接单击右边标签处的“+ NEW BOT”按钮。
3. 您可以为Bot选择一项或多项预定义的技能。这将有助于您更快地上手。此处,我们只选择“Greetings”,不过稍后您还可以添加其他技能。
4. 将它命名为“joke-Bot”。
5. 将其描述为“我的第一个有趣的joke-Bot”。
6. 您可以设置6个主题来改进对Bot的培训。同时,您可以将主题的关键字定义为:“时尚”、“游戏”或“工作”。
7. 根据数据的使用情况,选择适当的数据策略选项。注意:考虑到可能会被问及用户的个人健康信息,因此我们没有勾选“健康”类Bot。
8. 将默认语言设为英语。
9. 由于暂时没有隐私信息,您可以将其设置为公开状态,稍后再酌情调整。
至此,我们已经为构建Bot做好了前期准备工作。
Bot的构建阶段
常规情况下,Bot会在平台上经历如下5个阶段:
1. 训练 - 教会Bot需要理解的东西。
2. 构建 - 使用Bot Builder工具来创建对话流。
3. 代码 - 使用外部API或数据库来连接Bot。
4. 连接 - 将Bot发送到一个或多个消息传输平台上。
5. 监控 – 持续训练Bot,使之更智能、更能灵活地应对各种情况。
由于我们暂时不需要任何外部的信息,因此我们在此跳过“代码”部分。当然,如果您想进一步了解Bot与代码的连接,请参阅:https://cai.tools.sap/blog/nodejs-chatBot-movie-Bot/ 。
第1步:训练Bot理解人类语言
作为Bot,它需要能够理解自己收集到的信息,并区分不同的意图(intent)。此处,意图是指不同表达方式的句子,所具有相同的含义。因此,当用户向Bot发送一些文本信息时,我们的算法会将它们与意图中的短语进行比较,检查并匹配出最接近的一个,进而判断出文本消息的意图是什么。
例如:
- 您是机器人吗?
- 您答复得这么快,我相信您一定是某种机器人吧。
- 我是在与人类交谈吗?
可见,上述三句的表达方式不同,但都是在问同一个问题:您是机器人吗?因此,如果您的Bot能够识别该问题,那么就可以准备好一个明智的回答,例如“我是机器人,我骄傲。”
“叉”入意图(Fork Intents)
在与用户交流时,所有类型的Bot都能够识别诸如:“问候”、“同意”、“不同意”等基本内容。因此,如果您在前期给Bot选择设置了预定义的“Greetings”技能,那么它已经具备了告别和问候,这两种意图的判断能力。
而且,由于SAP Conversational AI是协作式的,因此您无需每次都重新创建新的意图。您完全可以将其他人已经创建的意图“叉”入(克隆)进来。例如,当获悉用户想要听笑话时,我们就可以在社区中检索是否有已经创建好的此类意图。
如上图所示,您可以在搜索栏中输入“joke”,以获取结果列表。如果想查看其具体内容,您也可以直接单击不同意图的名称。
创建一个新的意图
如果您想要自定义一个新的意图,那么就需要从头开始构建它。在此,我们希望Bot能够理解到对方在听到笑话时笑了。因此,您可以单击搜索字段右侧的“+ Create”,然后为您的意图起一个名称。
重复上述过程,您可以创建对方觉得不可笑的意图:
第2步:添加表达式
既然创建了意图,我们就需要用各种表达式表示它们。我们可以单击不同的意图,然后添加不同的表达式语句。我的建议是:请为单个意图添加至少30个表达式,理想情况为50个。
下面是一些表达式的例子:
大笑
- 哈哈哈,这很有趣。
- ROFL(笑得在地上打滚,rolling on the floor laughing)您很棒!
- 朋友,真有你的!这是一个超赞的笑话。
- 我很久没有如此大笑了。
不可笑
- 看来,您缺乏幽默细胞。
- 这个既糟糕又令人反感。
- 这到底表达了什么?
- 这个笑话一点都不好笑,换一个试试。
提示:您可以通过单击界面中蓝色的“You have X expressions suggested to enrich your intent”,来查看更多可添加的表达式示例。这样能够加快对Bot的训练。
第3步:测试Bot
在控制台上,单击右上角的TEST气泡图标。键入一个您从没训练过的句子,例如:“您能给我讲个笑话吗?”
根据您输入的内容,Bot会检索出意图、并做出答复。如果现有算法没能检测到相应的意图、或是检测到了无效的意图,那么您就需要添加新的、或是修改现有的表达,来进一步训练它。这似乎有些繁琐,但这是确保Bot能够正确识别用户语句的最佳方式。
在Bot的意图检测效果达标之后,我们就可以进入下一阶段:构建Bot的对话流。
第4步:构建和管理对话流
现在,让我们在Bot Builder中找到Build选项卡,它能够帮助我们根据Bot的技能来构建对话流。
什么是技能?
每一个技能都代表Bot“知道”如何做的某件事,它们之间通过相互排列组合,会变得逐渐复杂起来。
在创建一个新的Bot时,您已经为它选择了预定义的技能。当然为了避免“重复制造轮子”,您也可以在平台上查找并“叉”入其他人创建好的技能。
例如:如果您在创建时选择了预定义技能“Greetings”,那么它就会出现在您的界面上。
单击其名称,可获取如下详细的信息:
通常,一项技能会包含四个部分:
- 自述文件:对该技能进行描述。
- 触发器:定义在收到用户何种消息后,应激活此技能。
- 需求:描述此技能需要进一步收集哪些信息,以及收集这些信息的条件。
- 动作:在需求满足的条件下,应采取何种动作?
通过浏览该问候技能,您会发现其结构为:
- 如果问候或告别的意图匹配成功,则触发。
- 由于不需要收集更多的信息,因此没有其他需求。这意味着它会在被触发后,直接采取动作。
- 在此,它有两个可能的动作:如果匹配的意图是问候语,它会从列表中随机选取欢迎的消息发送出去;如果意图是告别,则从另一个列表中选取并发送消息。
第5步:建立自己的技能
让我们回到Build选项卡,单击左侧的“+ Create”技能,以建立自己的技能。
在此有三种不同类型的技能:商业(Business)、浮动(Floating)和后备(Fallback)。
- 商业与浮动并无结构上的差异。它们足以涵括常用的大多数技能。
- 在接到用户的消息但无法触发任何技能时,后备技能就派上用场了。多数情况下,您只能使用其中一种类型。当然您也可以通过提示用户有关Bot能做什么,以建议他们改写问题。
在此,我们的技能属于浮动类型。我将其命名为“tell-me-a-joke”。
通过单击新创建的技能,以及“Triggers”选项卡,我们可以针对匹配上的意图,激活不同的技能。
如上图所示,由于默认是AND条件,而我们却希望在任何一个意图被匹配时,都激活我们的技能,因此不要忘记将条件更改为OR(单击其中的蓝色按钮“AND”)。
由于对此案例并无任何额外的需求,因此我们不做额外的设置。当然您也可以通过询问更多信息来改进Bot,例如:喜欢什么类型的笑话,或是为成人笑话添加年龄要求等。
下面,我们通过点击“动作”选项卡,来创建第一个消息组。
单击“ADD NEW MESSAGE GROUP”,以及“ADD CONDITION”,来添加消息触发的条件,例如:If @ask-joke is-present。此处“@”代表意图的类型。我们稍后会介绍到。
然后,您可以选择动作为“SEND MESSAGE”,以及文本的格式。
最后,您就可以输入自己喜欢的笑话了。
当然,您也可以在两条消息之间设置5秒钟的延迟,以方便用户花时间读完Bot回复的那些长消息。
第6步:给Bot提供不同可能的答案
单击消息上的“+”,您可将新的消息添加到随机列表之中。这样您就不会总是发送一些千篇一律的笑话了。如果再次单击“SEND MESSAGE”的下方,您还可以同时发送多条消息。
下面我们来介绍另外两个意图。
请单击“ADD A NEW MESSAGE GROUP”,并将条件设置为:If @laughs is-present。
如果我想在这种情况下发送各种GIF图片,那么就可以点击“SEND MESSAGE”和“Image format”。
同理,我也可以对第三种意图进行此类操作。
第7步:与Bot聊天
接下来,我们就需要让Bot在真实情况下去与人类用户聊天了。当然,我建议您在构建的过程中,就尽可能多地与Bot聊天,以尽早识别出那些逻辑错误。
单击右下角的蓝色按钮“CHAT WITH YOUR BOT”,试着发送一些消息。同时,您也可以使用“Clear”来清屏。
第8步:将Bot连接到消息传输平台
一切准备就绪后,我们就可以将Bot部署到公共消息传输平台上了。
让我们转到“Connect”选项卡,选择您偏好的消息传输平台,然后按照其分步说明进行操作。
值得注意的是,不同的平台会有所差异。例如:Telegram虽然易于配置,却不支持GIF图像。因此,您应该适当地调整自己的Bot。如果您无从下手的话,我建议您使用Facebook Messenger,它是一个功能非常强大的平台,而且拥有着大量的用户。
第9步:监控并训练Bot
“Monitor”选项卡能够帮助您持续改进Bot的智能程度。它能够收集Bot所接收到的所有消息,并显示匹配了何种意图。通过密切监控,您可以针对那些匹配无效、或根本不存在的意图,进行动态调整与分配。
如上图所示,针对最后一条消息,Bot未能实现意图的匹配。如果此类消息持续出现的话,我们就需要为它创建一个新的意图了。
展望
如果您顺利地完成了上述9个步骤,并想持续地改进该聊天机器人的话,您还可以从如下三个方面入手:
- 学习如何从消息中提取丰富的关键信息。
- 将Bot与代码连接,实现与外部API的交互。
- 让Bot能够支持多种语言,以扩大自己的受众。