使用 Rasa 和 WebSocket 构建实时聊天机器人

聊天机器人为客户快速高效地获得问题答案提供了一种便捷的方式,因此越来越受欢迎。随着自然语言处理和机器学习技术的进步,聊天机器人现在能够理解复杂的询问并提供个性化回复。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

(0)

相关推荐

发表回复

登录后才能评论