需求背景
例如,诊所之类的预约场景下,到店需要核对预约号码,与预约的身份证号码,两个数据匹配成功,才能进入下一步的操作。
这里用一个 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 变得异常复杂。我尝试了一下,发现很难搞定。
查看合集
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式