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

发布时间: 2023-05-23 17:13:30 作者: 大象笔记

场景

例如,跟 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 中文系列教程

我是一名山东烟台的开发者,联系作者