3. 简单的聊天机器人
利用开源的聊天机器人框架(例如Rasa或Dialogflow),创建一个能够回答预设问题的简单聊天机器人。例如,用户可以询问天气、时间或简单的数学问题,机器人应该能够理解并回答。
用Python实现一个简单的聊天机器人。可以使用Rasa开源框架来快速搭建一个基础的对话系统。
1. 安装Rasa
首先确保已经安装了Python 3.7或更高版本。然后在命令行中运行以下命令安装Rasa:
pip install rasa
2. 创建一个新的Rasa项目
运行以下命令创建一个新的Rasa项目:
rasa init
按照交互式提示,选择创建初学者项目。这将在当前目录下生成一个包含基本配置文件的Rasa项目。
3. 定义意图和实体
打开 data/nlu.yml
文件,定义你想要处理的用户意图和实体。例如:
version: "3.1"
nlu:
- intent: greet
examples: |
- 你好
- 嗨
- 早上好
- intent: goodbye
examples: |
- 再见
- 拜拜
- 下次见
- intent: ask_weather
examples: |
- 今天天气怎么样
- 明天会下雨吗
- intent: ask_time
examples: |
- 现在几点了
- 现在是什么时间
- intent: ask_math
examples: |
- 1加1等于几
- 5乘以6是多少
这里定义了打招呼、说再见、询问天气、询问时间、简单数学问题等几个基本意图。
4. 编写对话流程
打开 data/stories.yml
,编写对应意图的对话流程。例如:
version: "3.1"
stories:
- story: greet path
steps:
- intent: greet
- action: utter_greet
- story: goodbye path
steps:
- intent: goodbye
- action: utter_goodbye
- story: ask weather path
steps:
- intent: ask_weather
- action: action_answer_weather
- story: ask time path
steps:
- intent: ask_time
- action: action_answer_time
- story: ask math path
steps:
- intent: ask_math
- action: action_answer_math
对于打招呼和说再见,我们直接返回一个简单的回复。对于询问天气、时间、数学问题,我们调用自定义的action进行处理。
5. 编写自定义Action
在 actions/actions.py
文件中,实现上面用到的自定义action:
from typing import Any, Text, Dict, List
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
class ActionAnswerWeather(Action):
def name(self) -> Text:
return "action_answer_weather"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
dispatcher.utter_message(text="对不起,我暂时无法提供天气信息。")
return []
class ActionAnswerTime(Action):
def name(self) -> Text:
return "action_answer_time"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
import datetime
now = datetime.datetime.now()
dispatcher.utter_message(text=f"现在是{now.hour}点{now.minute}分。")
return []
class ActionAnswerMath(Action):
def name(self) -> Text:
return "action_answer_math"
def run(self, dispatcher: CollectingDispatcher,
tracker: Tracker,
domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
dispatcher.utter_message(text="对不起,我的数学还不太好,暂时回答不了你的问题。")
return []
这里只是一个简单的示例实现,你可以根据需要添加更复杂的逻辑。比如调用天气API获取天气信息,使用正则表达式解析数学表达式等。
6. 定义响应模板
打开domain.yml
文件,定义机器人的响应模板:
version: '3.1'
intents:
- greet
- goodbye
- ask_weather
- ask_time
- ask_math
responses:
utter_greet:
- text: "你好!有什么我可以帮助你的吗?"
utter_goodbye:
- text: "再见,下次见!"
actions:
- action_answer_weather
- action_answer_time
- action_answer_math
7. 训练模型并运行
使用以下命令训练NLU和对话管理模型:
rasa train
训练完成后,运行下面的命令启动Rasa服务:
rasa run --enable-api
rasa run actions
现在你就可以打开另一个终端,使用curl命令来与你的聊天机器人对话了:
curl -XPOST http://localhost:5005/webhooks/rest/webhook \
-d '{"sender": "user1", "message": "你好"}'
以上就是使用Rasa框架实现一个简单聊天机器人的主要步骤。
相关文章: