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

更新日期: 2024-01-25 阅读次数: 2086 字数: 445 分类: AI

需求背景

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

这里用一个 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 聊聊, 查看更多联系方式

tags: rasa