python rasa聊天机器人教程五:经典事例查询天气
从用户输入的消息中提取城市信息然后查询天气信息
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