对话机器人 Rasa(七):Action 支持 Python 查询今天星期几

文章目录

    场景

    例如,跟 Rasa 机器人对话中,询问今天星期几,然后使用 Python 返回中文答复。

    nlu.yml

    增加自然语言解析:

    - intent: weekday
      examples: |
        - 今天是星期几
        - 今天几号
        - 今天的日期
    

    domain.yml

    增加 actions:

    intents:
      - weekday
    
    actions:
      - action_weekday
    

    rules.yml

    配置映射关系

    - rule: 星期几
      steps:
      - intent: weekday
      - action: action_weekday
    

    actions.py

    actions/actions.py

    先暂时写死返回数据,测试 action 的 python 代码是否被执行。

    注:name 函数返回值,即对应之前在 rules.yml 和 domain.yml 中配置的 action 名字,要匹配上。

    from typing import Any, Text, Dict, List
    
    from rasa_sdk import Action, Tracker
    from rasa_sdk.executor import CollectingDispatcher
    
    
    class ActionWeekday(Action):
        def name(self) -> Text:
            return "action_weekday"
    
        def run(
            self,
            dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any],
        ) -> List[Dict[Text, Any]]:
    
            dispatcher.utter_message(text="星期八")
    
            return []
    

    训练数据

    仅仅将 action 添加到 domain.yml,rasa 可能识别不了更改,所以需要加上 force 参数。

    rasa train --force
    

    endpoints.yml

    取消注释:

    action_endpoint:
      url: "http://localhost:5055/webhook"
    

    启动 Rasa 动作服务器

    > rasa run actions
    2023-05-23 15:59:08 INFO     rasa_sdk.endpoint  - Starting action endpoint server...
    2023-05-23 15:59:08 INFO     rasa_sdk.executor  - Registered function for 'action_weekday'.
    2023-05-23 15:59:08 INFO     rasa_sdk.endpoint  - Action endpoint is up and running on http://0.0.0.0:5055
    

    生产环境中在 docker 中如何运行?还是 run 命令已经默认启动了?

    启动 Rasa Shell

    测试一下效果:

    > rasa shell
    Your input ->  今天星期几
    星期八
    

    修改 python 逻辑返回真实数据

    直接问 ChatGPT 吧 。。。

    python 返回当前日期,及星期几,用中文

    可以使用 Python 内置的 datetime 和 calendar 模块来获取当前日期和星期几,并将其转换为中文。以下是示例代码:

    import datetime
    import calendar
    
    # 获取当前日期和时间
    now = datetime.datetime.now()
    
    # 获取当前日期(例如:2023年5月23日)
    current_date = now.strftime('%Y年%m月%d日')
    
    # 获取当前星期几(例如:星期一)
    weekday = calendar.day_name[now.weekday()]
    
    # 将英文星期几转换为中文
    weekdays = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
    weekday_cn = weekdays[now.weekday()]
    
    # 输出结果
    print(current_date + ' ' + weekday_cn)
    

    执行上述代码,会输出当前日期及星期几的中文表示,例如:

    2023年05月23日 星期二
    

    把逻辑复制到 actions.py 中就可以了,重启 rasa run actions 再次在 shell 中测试:

    注:无需重启 rasa shell

    Your input ->  今天几号
    2023年05月23日 星期二
    Your input ->  今天星期几
    2023年05月23日 星期二
    Your input ->  明天星期几
    2023年05月23日 星期二
    

    效果可以,可惜不支持明天,除了手动增加意图识别,不知道有没有更好的方法。

    查看合集

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

    关于作者 🌱

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