python rasa聊天机器人教程五:经典事例查询天气

发布时间 2023-08-17 22:22:41作者: 繁华博客

从用户输入的消息中提取城市信息然后查询天气信息

1.培训数据

data/nlu.yml 文件中,添加意图和实体的例子:

nlu:
- intent: ask_weather
  examples: |
    - 今天 [北京](city) 的天气怎么样?
    - [上海](city) 明天会下雨吗?
    - 告诉我[广州](city)的天气
    - [深圳](city) 后天的天气预报是什么?

 2.定义 stories

data/stories.yml 文件中,定义一个简单的 story:

stories:
- story: user asks about weather
  steps:
  - intent: ask_weather
    entities:
    - city: "北京"
  - action: action_fetch_weather

 3.定义 actions:

from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.types import DomainDict

# 模拟一个查询天气的函数
def fetch_weather(city: str) -> str:
    # 这里可以调用真实的天气 API,但为简单起见,我们只返回一个模拟值
    return f"{city}的天气是晴朗的。"

class ActionFetchWeather(Action):

    def name(self) -> str:
        return "action_fetch_weather"

    async def run(self, dispatcher: CollectingDispatcher,
                  tracker: Tracker,
                  domain: DomainDict) -> list:
        city = tracker.get_slot("city")

        if city:
            weather_info = fetch_weather(city)
            dispatcher.utter_message(text=weather_info)
        else:
            dispatcher.utter_message(text="对不起,我不知道您询问哪个城市的天气。")

        return []

 4.定义 slots 和 responses:

domain.yml 文件中,定义 city slot 和一个简单的回复模板:

slots:
  city:
    type: text
intents:
- ask_weather
responses: utter_ask_city: - text: "您想询问哪个城市的天气?" actions: - action_fetch_weather

 5.启动 actions server:

使用以下命令启动 action server:

rasa run actions

 6.培训模型并运行:

使用以下命令培训模型:

rasa train

 启动 Rasa 服务:

rasa shell