聊天机器人为客户快速高效地获得问题答案提供了一种便捷的方式,因此越来越受欢迎。随着自然语言处理和机器学习技术的进步,聊天机器人现在能够理解复杂的询问并提供个性化回复。Rasa 就是这样一个能让开发者构建复杂聊天机器人的平台。
在本教程中,我们将向您展示如何使用 Rasa 和 WebSocket 开发实时聊天机器人。我们将介绍设置 Rasa 项目、创建自定义意图和实体、定义对话流以及将其与 WebSocket 集成以实现实时通信等基础知识。本指南结束时,您将拥有一个功能齐全的聊天机器人,可以处理与用户的复杂对话。
前提条件
- Python 编程基础知识
- 熟悉命令行界面
- 已安装 pip、virtualenv 和 git 版本
设置 Rasa 项目
首先,运行以下命令来设置一个新的 Rasa 项目:
virtualenv venv
source venv/bin/activate
pip install rasa
rasa init --no-prompt
这将创建一个新的虚拟环境,安装 Rasa,并使用默认配置初始化一个新的 Rasa 项目。然后可以导航到data
目录并打开 nlu.md
文件以定义自定义意图和实体。例如
## intent:greet
- hello
- hi
- hey
## intent:goodbye
- bye
- goodbye
- see you later
## entity:product
- product1
- product2
- product3
定义对话流程
接下来,让我们打开 data
中的 stories.md
文件,定义聊天机器人的对话流程。在这里,我们可以根据用户输入和机器人回复指定不同的对话场景。例如
## greet and recommend product
* greet
- utter_greet
* ask_for_recommendation
- utter_recommendation
## say goodbye
* goodbye
- utter_goodbye
创建自定义回复
我们还可以通过编辑根目录中的 domain.yml
文件来定制机器人的回复。该文件定义了聊天机器人的各个方面,包括意图、实体、槽、操作和回复。要添加自定义回复,只需在 responses
部分添加一个新条目即可。例如:
responses:
utter_greet:
- text: "Hello! How may I assist you today?"
utter_recommendation:
- text: "Based on your requirements, I would recommend {product}. Would you like me to place an order for you?"
utter_goodbye:
- text: "Goodbye! Have a great day!"
训练模型
定义好意图、实体、对话流和回复后,我们就可以运行以下命令训练 Rasa 模型了:
rasa train
与 WebSocket 集成
最后,让我们将 Rasa 聊天机器人与 WebSocket 集成,实现实时通信。首先,我们需要运行以下命令安装所需的软件包:
pip install websocketschannels_redis uvicorn aiohttp
接下来,修改config.yml
文件以启用 WebSocket 集成:
pipeline:
- name: WhatsAppInput
- name: TEDPolicy
max_history: 5
epochs: 100
- name: RulePolicy
- name: FallbackPolicy
fallback_action_name: "action\_default\_fallback"
core_fallback_action_probability: 0.01
policies:
- name: MemoizationPolicy
- name: TEDPolicy
max_history: 5
epochs: 100
- name: RulePolicy
- name: FallbackPolicy
fallback_action_name: "action\_default\_fallback"
core_fallback_action_probability: 0.01
language: en
pipeline:
- name: WhatsAppInput
- name: TEDPolicy
max_history: 5
epochs: 100
- name: RulePolicy
- name: FallbackPolicy
fallback_action_name: "action\_default\_fallback"
core_fallback_action_probability: 0.01
interfaces:
- name: REST
url: "http://localhost:5055/webhooks/rest/webhook"
- name: ActionEndpoint
endpoint:
url: "ws://localhost:5055/websocket"
verify_ssl: False
然后在根目录下创建一个名为 chatbot.py
的新文件,并编写以下代码:
import asyncio
import json
import websockets
from typing import Dict, Any
async def handle_client(websocket, path):
while True:
data = await websocket.recv()
request = json.loads(data)
if request["event"] == "send":
response = await rasa_on_new_message(request["text"])
await websocket.send(json.dumps({"event": "receive", "text": response}))
async def rasa_on_new_message(text: str) -> str:
headers = {"Content-Type": "application/x-www-form-urlencoded"}
data = f"q={text}"
async with aiohttp.ClientSession() as session:
async with session.post("http://localhost:5055/webhooks/rest/webhook", data=data, headers=headers) as resp:
result = await resp.text()
return json.loads(result)[0]["text"]
start_server = websockets.serve(handle_client, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
这段代码会设置一个 WebSocket 服务器,监听来自客户端的传入信息,并将其发送到 Rasa 聊天机器人进行处理。然后将得到的响应发送回客户端。
在本教程中,我们向您展示了如何使用 Rasa 和 WebSocket 开发实时聊天机器人。从定义自定义意图和实体到指定对话流和与 WebSocket 集成,我们涵盖了构建一个复杂的聊天机器人所需的一切知识,它可以处理与用户的复杂对话。
无论您是希望改善客户服务还是实现日常任务自动化,Rasa 聊天机器人都是一个可以帮助您实现目标的强大工具。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/44751.html