对话机器人 Rasa(三十一):Form 的进阶用法,动态话术及 slot

文章目录

    需求背景

    例如,诊所之类的预约场景下,到店需要核对预约号码,与预约的身份证号码,两个数据匹配成功,才能进入下一步的操作。

    这里用一个 form 包含两个 slot 来实现信息录入,看起来是典型的 form 使用场景,没什么可说的。

    但是如果在输入预约号码后,需要拉取身份证的掩码格式,让用户填写掩码部分,以减少用户输入。那么就需要在输入第一个 slot 后,调用其他服务的 api,获取身份证掩码。然后影响到第二个slot 的 utter ask 提示话术内容。

    第二个需求是,如果第一个 slot 输入的预约号码查询不到,就不需要再提示身份证号码的输入了。那么就变成了一个动态的 form。

    第二个 slot 的动态提示话术实现

    这个参考 Rasa 官方文档中 “ Using a Custom Action to Ask For the Next Slot ” 的介绍:

    https://rasa.com/docs/rasa/forms/#using-a-custom-action-to-ask-for-the-next-slot

    动态调整 form 中 slot 的数量

    这个参考 Rasa 官方文档中 “Dynamic Form Behavior” 的介绍:

    https://rasa.com/docs/rasa/forms/#dynamic-form-behavior

    走的弯路

    刚开始没有查看 rasa 官方 form 文档时,还不知道 form 已经支持了这种功能。

    于是将一个 form 拆成了两个 form,每个form 包含一个 slot,然后打算在对应的 custom action 中再调用其他服务的 api,并采用独立 utter 的方式去实现第二个 slot 的动态话术。虽然找到了通过 FollowUpAction 的方式返回 form,但是依然不好写规则。

    但这样带来的问题是,story 和 rule 变得异常复杂。我尝试了一下,发现很难搞定。

    查看合集

    📖 对话机器人 Rasa 中文系列教程

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式