自学内容网 自学内容网

首次在rasa中使用form的个人小结

Form是rasa的一个很重要的组成,通过form可以引导user提交关键信息,从而配合完成相应的任务。在之前实现《让自家的智能语音助手实现todo任务的添加》的时候,我尝试使用了form,这是我第一次在rasa中使用form,今天空下来了,自己小结下。

首先需要在domain中定义form,同时也要定义这个form会引用那个entity,这些在slot中也要一起定义。然后是设计stories,即在什么场景下会使用这个form。和其他actions的story定义类似,先有一个用户的intent发起,比如我的“查找任务”story就如下定义:

## query_task   //这个是story名字

*query_task // 用户intent

  - utter_ask_task_id //chatbot询问任务编号

  - query_task_form //告诉chatbot要使用form

  - form{“name”: “query_task_form”} //告诉chatbot使用哪个form,只有按照这个格式写,form才真正被调用

  - form{“name”: null} //告诉chatbot结束使用form

定义好form,rasa train完成模型训练,接下来修改actions。和普通action的定义一样,先要定义一个class,如Class ActionQueryTaskForm(FormAction),注意括弧内要填写“FormAction”,代表这是一个form action。这个class里会包含四个def,分别定义如下:   

 def name(self) -> Text:

        return "query_task_form"

# 这个函数返回anctions名字,与domain中定义的form名字对应。



    @staticmethod

    def required_slots(tracker: Tracker) -> List[Text]:

        return ["id"]

 # 这个函数返回form关联的entity是哪一个,如果是多个,就在return中添加。

   

    def slot_mappings(self) -> Dict[Text, Union[Dict, List[Dict]]]:

        return {

            "id": [self.from_entity(entity="id"), self.from_text()]

        }

 # 这个函数返回slot_mapping映射,如果缺少了这个函数,anction运行时会报“Failed to extract slot content with action query_task_form”。



    def submit(

        self,

        dispatcher: CollectingDispatcher,

        tracker: Tracker,

        domain: Dict[Text, Any],

    ) -> Dict[Text, Any]:

         //main action code

        return []

# 这个函数相当于普通actions中的run,它是指将form收集的信息提交后需要做什么,是action的执行主体。

form完成了如上定义后,在和chatbot互动时就能按照我在stories中定义的场景应用了。当然,rasa中的form使用必定还有其他内容,等我用到的时候再来小结。


原文地址:https://blog.csdn.net/hydekong/article/details/142283858

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!