本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目关于Form的定义,如何激活一个form或者使当前运行的form进入不激活状态,如何在form中使用slots,以及如何对form收集的信息进行验证,关于dynamic form的行为等等内容进行详细分析。

一、Rasa对话机器人项目实战之教育领域Education Bot项目Form内幕解析及自定义全解

  1. Education Bot项目Form使用分析

Form在开发Rasa对话机器人时起核心作用,它是目前Rasa对话机器人用于收集用户信息的最好方式。

下面是项目使用的一个form的定义,可以看到需要收集的信息定义在required_slots中:

另外也可以通过form来控制对话流程,form运行时的优先级比rules高,可以把需要的内容放在form中以确保按照预期的方式来运行。

2.  Rasa form的定义与activation解析与案例剖析

Form是在domain文件中定义的,form的名称也是在stories或者rules中用于执行form的action的名称。你需要在required_slots中指定form需要收集的slots。下面是form定义样例:

可以使用key ignored_intents来定义需要form忽略的intents list,在这个key中定义的intents会被添加到每个slot mapping的key not_intent中。

通常使用rules来激活form和提交form,下面的rule用来激活form,步骤是先执行action “utter_ask_playground_help”,然后让用户进行确认,确认后会执行action “playground_form”来激活form:

下面的rule定义了如何提交一个form,条件是form需要处于激活状态,提交后需要设置active_loop为null:

为了使用Rasa提供的forms,你需要确保RulePolicy被添加到policies配置中:

当form通过action被激活后,会使用以下两个格式之一的response来请求用户提供form正在请求的slot信息:

utter_ask_<form_name>_<slot_name>

utter_ask_<slot_name>

3.  Deactivating a form解析及最佳实践

一旦一个form需要的slots信息收集完成,那么这个form就会自动进入不激活状态。可以使用rule或者story来描述当form终止时对话机器人的行为,如果没有这样做,那么form运行停止后就会进入监听用户下一条消息的状态。下面的样例显示结束form运行之后会执行action utter_submit和utter_slots_values:

4.  Writing stories/rules for unhappy form paths解析及案例剖析

当用户没有总是按照对话机器人要求提供信息时,那么form action的执行就会被拒绝,这时form会自动抛出异常ActionExecutionRejection,下面是针对这种情况的可能场景:

-一个slot被请求,但是用户没有使用最新的消息来填充slot,而且你没有定义一个自定义action用于slots验证或者提取

-一个slot被请求,但是用于slots验证或提取的自定义action没有返回任何SlotSet事件

为了明确拒绝form执行,可以让自定义action返回ActionExecutionRejected事件。为了处理form拒绝执行的情况,可以在rules或者stories中有针对性的进行处理,譬如下面的样例:

另外一种情况是,用户在form收集信息时改变决定不想再继续处理业务,这时form应该停止运行,具体做法是使用一个默认action action_deactivate_loop来使form进入不激活状态并且重置所请求的slot。样例如下:

强烈建议使用Rasa提供的interactive learning的方式来构建这些rules或者stories,如果自己写则可能会遗漏掉重要的内容。

5.  Form slot mappings剖析

由于从Rasa 3.0开始,所有的slots定义在domain文件的slots部分,那么同一个slot mapping就可以跨多个forms来使用,从而移除不必要的重复部分,下面是项目使用的一个slot mapping,可以看到加入了conditions,只有这个form运行时才会使用entity的值来填充这个slot:

6.  Validating form input解析及案例剖析

当从用户输入中提取到slot的值时,需要进行验证,Rasa默认只验证那些已经填充了值的slots。你可以实现一个自定义的验证action来验证任何提取的slots,需要确保这个action被添加到domain文件中:

这个自定义action可以继承自FormValidationAction,这样可以简化验证slots的过程,在这种情况下,需要为每一个提取的slot编写validate_<slot_name>方法。下面的validation方法样例显示了如何对slot进行验证,即只有slot的值存在于数据库中才能设置这个值,否则设置为None:

7.  Custom slot mappings解析及案例剖析

如果没有任何预定义的slot mapping可以满足需求的情况下,可以使用自定义action validate_<form_name>来写你自己的slots提取代码逻辑,Rasa在form运行时会触发这个action。如果使用Rasa SDK,那么推荐继承自FormValidationAction,为了提取自定义的slots,需要完成以下步骤:

-为使用custom类型的slot mapping中的每个slot定义一个方法:extract_<slot_name>

-在domain文件的form定义中的key required_slots中,列出所有使用预定义和自定义slot mappings的slots

下面的例子显示了如何根据用户输入文本中包含的outdoor信息来提取slot信息:

8.  Dynamic form behavior解析及案例剖析

默认情况下Rasa是通过domain中form定义所列出的slots来依次向用户请求还没有填充值的slot信息。如果你使用自定义slot mappings和FormValidationAction,那么Rasa会根据方法required_slots返回的第一个为空的slot来向用户请求信息。可以通过覆写方法required_slots来动态添加要请求的slots,譬如需要基于之前请求的slot的信息来进一步获取更多内容时,通过覆写这个方法也可以改变slots的请求顺序。

你需要为每个不使用预定义slot mapping的slot定义一个方法extract_<slot name>,下面的样例演示了如何根据一个slot的值来控制是否需要请求另一个slot的信息:

如果想从domain中的form定义中的required_slots中移除一个slot,你应该先把上面例子中的domain_slots的值赋予另外一个新变量,然后在这个变量的基础上进行移除slot的操作,而不是去直接修改domain_slots,因为这样做可能会造成非预期的行为,样例如下:

9.  Requested_slot slot解析及案例剖析

Requested_slot是一种text类型的slot,会被自动添加到domain中,在对话中requested_slot的值默认会被忽略,如果想改变这种行为,那么需要添加requested_slot到domain文件中,类型为categorical,属性influence_conversation设置为true。如果你想基于当前请求的slot对非预期情况进行处理时,譬如针对下面的样例,当用户使用其它的问题来响应当前对话的slot请求时:

10.  Custom action to ask for the next slot解析及案例剖析

一旦form决定了需要向用户收集的下一个slot,就会执行相关的action utter_ask_xxx,如果这种常规的做法不能满足需求,也可以使用自定义action如action_ask_<form_name>_<slot_name> 或者action_ask_<slot_name>来向用户请求下一个slot,样例如下:

Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Form解析及自定义全解(七十五)相关推荐

  1. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目NLU Data详解(七十一)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目NLU Data的分层结构,数据格式,在意图分类和实体提取时如何使用正则表达式以及lo ...

  2. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Slots解析、Slot Validation Action剖析(七十四)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目Slots的各种类型及运用实践.如何通过Slot Validation Action来 ...

  3. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Policies Data详解(七十二)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目Policies Data,end-to-end的训练方式及使用时需要注意的事项,ch ...

  4. Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目NLU Pipeline、Dialogue Policies、及多意图识别(七十)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目NLU Pipeline的各个组件.Dialogue Policies使用的组件,以及 ...

  5. Gavin老师Transformer直播课感悟 - 图解Rasa对话机器人项目实战之教育领域Education Bot项目及综合调试Debugging实战解密(七十七)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目的架构进行分析,并通过debug模式演示与分析Rasa Agent如何与核心组件NLU ...

  6. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十九)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试 ...

  7. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人配置详解与Debugging演示(八十七)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之电商零售智能业务对话机器人系统所使用的各项配置进行详细剖析,并通过debug模式来理解在下面展示的Rasa graph archite ...

  8. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(八十一)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人的主要业务功能所使用的微服务进行解析,并通过Rasa Interactive的调试 ...

  9. Gavin老师Transformer直播课感悟 - Rasa项目实战之银行金融Financial Bot智能业务对话机器人架构与流程及Rasa Interactive实验剖析(八十)

    本文继续围绕工业级业务对话平台和框架Rasa,对Rasa项目实战之银行金融Financial Bot智能业务对话机器人架构.流程进行解析,并通过Rasa Interactive分析配置文件中各个组件的 ...

最新文章

  1. 共享文件迁移(fileserver)——从windows server 2003到windows server 2008
  2. 【Docker实战之入门】Dockerfile详细分析:构建docker镜像(4)构建动态网站WordPress...
  3. navicat保存查询语句_MySQL数据库安装创建及Navicat客户端连接
  4. labview如何进行串口通讯(转)
  5. 【安全漏洞】ProxyShell漏洞复现详解
  6. 3 汪博士解读pmp_备考两月,我顺利通过PMP考试
  7. 北斗导航 | 学习PPP和PPP-RTK
  8. 力扣530. 二叉搜索树的最小绝对差(JavaScript)
  9. Ubuntu 16.04中iptables的工具简介(iptables/iptables-restore/iptables-xml/iptables-apply/iptables-save)...
  10. 字符编码方式及大端小端
  11. 你猜一个 TCP 连接上面能发多少个 HTTP 请求
  12. 想要学习Java开发.应该从哪方面入手
  13. 火狐html5播放器,可能用户已经发现你在火狐内建HTML5音视频播放器
  14. 遇到 java.io.EOFException 异常的解决办法
  15. openkore 207cn 中文加强版 2010.01.12【彪彪修改】
  16. Arduino 电机测速
  17. Jersey框架一:Jersey RESTful WebService框架简介
  18. iTube Studio for Mac(高清视频下载器) V7.3.2破解版
  19. 算是我看源码时的一个小技巧吧~
  20. csp字符画c语言,CCF-CSP:201909-3字符画

热门文章

  1. mac截图快捷键+截图工具软件+方法教程
  2. 已安装对应模块,但报无法找到模块“XXX”的声明文件的解决方案
  3. flash的不同分类
  4. 白话机器学习算法——笔记
  5. Hoops编程指南:03_4_viewing_windows
  6. Python 线性回归计算r-squared方法
  7. 计算机文件夹操作教案,文件和文件夹的基本操作教案
  8. jquery几种书写格式
  9. sql常用语句(呜呜呜,求求点个赞吧!)
  10. Strom实时热力图展示项目