利用tracker.latest_message实现和rasa bot聊天气

人们有时候会用“今天天气不错啊!”这样的方式作为搭讪的开始,通过聊两句天气,展开后续对话。那么,是否也能用类似方法开启和聊天机器人的交互呢?

之前我用的方法是在nlu中定义独立的聊天气intent,如下图。

对于三种天气,分别定义了要下雨了,正在下雨和好天气三个聊天意图,然后在domain中针对这三个intent又分别定义了对应的utter_***话术。同理,stories中也定义了三个新的场景故事。

这么做,的确能以天气为由头开展和rasa bot的对话。但是问题来了,天气的种类远远不止上述三种,那么我是不是要每一种天气开头的聊天都要单独定义一遍?

答案不是不可以,可会让人觉得有点傻。于是,我决定把所有以天气聊天作为开始的对话意图归拢为一条,即talk_about_weather。

同样的,domain里也不需要设置多个utter话术了,直接变成一个action_about_weather,story也合并成一个。做完这三个文件的修改后,接下来怎么在action中实现对话交互呢?

还记得上一篇文章《label+actions实现rasa bot的问答交互-CSDN博客》吗?我在里面通过tracker.get_slot获取label标签,并与自定义的关键字key做配比,从而实现针对性问答。同样的方法,但这次不用get_slot,而是直接获取最新的用户话本(user text)来做配对。要获取rasa聊天记录中最近一次用户话本,可以用:text = tracker.latest_message(‘text’)

如下是完整的对应action代码:

class ActionAboutWeather(Action):
    def name(self) -> Text:
        return "action_about_weather"

    def run(
        self,
        dispatcher: CollectingDispatcher,
        tracker: Tracker,
        domain: Dict[Text, Any],
    ) -> List[Dict[Text, Any]]:

        weaKey = [
                   ["阴天", "看不到太阳"],
                   ["天黑", "阴沉", "天暗"],
                   ["雨"],
                   ["好天气", "太阳", "晴"],
                   ["雾"],
                   ["多云"],
                   ["风"],
                   ["雪"]
                 ]

        weather = ["身边带把伞,以防突然下雨。",
                  "要下雨了,快点回家收衣服。",
                  "下雨天,还是待在屋子里好。",
                  "好天气适合去户外走走。",
                  "雾天走路开个手电。",
                  "今天的天气还不错。",
                  "看看家里的门窗关紧了吗?"
                  "希望雪能积起来,这样就能堆雪人了。"]

        wflag = False
        n = 0
        resp = tracker.latest_message['text']
        for wea in weaKey:
          for key in wea:
              index0 = resp.find(key)
              if index0 != -1:
                 wflag = True
                 break
          if wflag:
             break
          else:
             n += 1

        if wflag:
           msg = weather[n]
        else:
           msg = "你说的对。" 
        dispatcher.utter_message(text=msg)

        return [ ]

完成rasa train,启动你的rasa shell,用谈论天气来打开聊天机器人的话匣子吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天飓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值