Rasa实现百度UNIT智能客服教学机器人

news2024/12/23 5:00:15

背景

上一篇文章提到了百度UNIT智能客服教学机器人,下面用Rasa实现同样的效果。环境如下

Rasa Version      :         3.1.0
Minimum Compatible Version: 3.0.0
Rasa SDK Version  :         3.1.1
Rasa X Version    :         1.1.0
Python Version    :         3.8.10
Operating System  :         Linux-5.15.0-69-generic-x86_64-with-glibc2.29

效果

在这里插入图片描述
在这里插入图片描述

UNIT

首先通过百度UNIT智能客服教学机器人熟悉一下基本概念:
在这里插入图片描述

  • 首先确认需要解决的问题,如上图所示:1. 实现业务办理中推荐手机 2. 实现售后咨询 3. 无法处理给出兜底回复
    在这里插入图片描述
  • 梳理对话流程
    在这里插入图片描述
  • UNIT中将对话分为FAQ问答技能即单轮对话,对话技能即多轮对话
  • 确定需要的技能和对话模板,也就是对话模板

Rasa 和 UNIT 概念对比

Rasa Intent VS UNIT技能

UNIT技能配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Rasa Intent(意图)

Rasa工程目录

  • Rasa工程目录如上图
  • 在nlu.yml中定义意图,训练数据相关文档在这里
  • 通过将意图相同的训练数据罗列在一起,使得Rasa具备’推断’意图的能力
nlu:
- intent: period
  examples: |
    - 保修期有多久?
    - 多长时间啊,保修期?
    - 多久会过保呢?
    - 保修期多长时间啊?

- intent: return
  examples: |
    - 支持七天无理由退换货吗
    - 有七天无理由退换货服务吗?
    - 可以退换货吗?七天无理由的
    - 七天无理由退换货支持吗
    - 支持无理由退换货吗

- intent: recommend
  examples: |
    - 我的手机坏了,推荐一款新的吧
    - 推荐一个合适的手机
    - 根据我的情况给我推荐一款手机
    - 推荐一个性价比高的手机
    - 给我推荐一款手机吧
    - 推荐一款手机给我
    - [华为](user_phone_brand)有不错的吗
    - 有没有性价比高的荣耀(user_phone_brand)手机
    - 我想买[荣耀](user_phone_brand)的手机,有什么推荐吗?
    - 给我推荐一款[华为](user_phone_brand)的手机

- intent: SELECT_PRICE
  examples: |
    - 2000元以下
    - 2000元~5000元
    - 5000元以上

FAQ问答技能

  • periodreturn是所谓的UNIT中FAQ问答技能,一般都是一问一答
  • - intent: period后边的名称可以自定义
  • examples: | 需要把类似的话术列到这里,Rasa是要求至少两条

对话技能

  • recommend是所谓的对话技能,一般指多轮对话,既然是多轮对话,有一些信息需要记录下来,例如手机的品牌,下一轮的对话是要用到的。这个就是所谓UNIT中词槽的概念,在Rasa中名称为Slot
  • [华为](user_phone_brand)有不错的吗涉及到了标注概念,将实体’华为’标注出来之后,将词槽填充

UNIT配置对话流程 Vs Rasa rule.yml/stories.yml

UNIT可视化配置对话流程

UNIT对流流程支持编程模式和可视化配置,这里以可视化为例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Rasa配置对话

  • Rasa的官方可视化界面是Rasa X,目前Rasa3.0以上是不支持的
  • 非官方的可视化界面有botfront,kairon等
  • 所以这里只演示编程模式。

FAQ问答

  • 也称知识库问答,一般为单轮对话,用户问,Bot回复
  • 将上一节定义的意图和定义好的答复列到这里,构成一轮对话
  • 定义在rule.yml文件中,Rule相关文档在这里
- rule: faq for period
  steps:
  - intent: period  #意图
  - action: utter_period #答案

- rule: faq for return
  steps:
  - intent: return #意图
  - action: utter_return #答案
  • rule: faq for period rule的名称,可自定义
  • intent是上一节定义的意图
  • action是bot的回应,utter_开头的是文字回复,action_开头的是执行一段函数
回复定义
  • 回复定义在domain.yml文件中
  • utter_开头是固定文本
  • action_开头是python函数名,在python函数中可以执行业务代码,最终生成回复文本
responses:
  utter_period:
  - text: 本产品免费保修期是自手机激活日起,12个月。同时过保后,也提供收费维修服务呢~
  utter_return:
  - text: 您好,商品没有人为损坏的情况下,均支持七天无理由退换货服务哦~

对话技能

  • 即多轮对话
  • 这里使用了Rasa Form,下一节有介绍
  • 定义在stories.yml文件中,Story相关文档在这里
- story: recommend story
  steps:
  - intent: recommend
  - action: recommend_phone_form
  - active_loop: recommend_phone_form
  - slot_was_set:
    - requested_slot: user_phone_brand
    - requested_slot: search_type
  - active_loop: null
  - slot_was_set:
    - requested_slot: null
  - action: action_recommend_phone
  • story: recommend story 对话流程名称,可自定义
  • intent: recommend 是上一节定义的意图
  • action: recommend_phone_form是Rasa action中专门用于收集用户信息的action,进入form后,需要将所有slot填充才能结束
  • active_loop是指激活recommend_phone_form
  • slot_was_set以及以下几行是描述用户的输入需要填充user_phone_brand search_type这两个词槽才能继续,否则会一直要求用户输入对应信息
  • active_loop: null 词槽被填充后,可以继续下面的流程即调用action_recommend_phone函数
  • action_recommend_phone 调用函数,执行业务逻辑,输出结果
form定义
  • Rasa中专门用于收集用户信息的模块,类似于html中的form表单
  • 这里我们定义了一个form用于收集用户对手机的信息包括:品牌、价格
  • recommend_phone_form定义在domain.yml中,form相关文档在这里
forms:
  recommend_phone_form:
    required_slots:
    - user_phone_brand
    - search_type

form需要的slot的回复定义遵循utter_ask_(form name)_(slot name),如下

  utter_ask_recommend_phone_form_user_phone_brand:
  - text: 请问您想买哪个品牌的手机呢
  utter_ask_recommend_phone_form_search_type:
  - buttons:
    - title: 2000元以下
      payload: /SELECT_PRICE{{"search_type":"low"}}
    - title: 2000元~5000元
      payload: /SELECT_PRICE{{"search_type":"medium"}}
    - title: 5000元以上
      payload: /SELECT_PRICE{{"search_type":"high"}}
    text: 您希望购买什么价位的手机?
slot定义

slot定义在domain.yml中,Domain相关文档在这里

entities:
- user_phone_brand
- search_type
slots:
  user_phone_brand:
    type: text
    influence_conversation: false
    mappings:
    - type: from_entity
      entity: user_phone_brand
  search_type:
    type: text
    influence_conversation: true
    mappings:
    - type: from_entity
      entity: search_type
      conditions:
      - active_loop: recommend_phone_form
action_recommend_phone函数

action_recommend_phone在action.py中,Action相关文档在这里

class ActionRecommendPhone(Action):

    def name(self) -> Text:
        return "action_recommend_phone"

    def run(self, dispatcher: CollectingDispatcher,
                tracker: Tracker,
                domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        slots = {
            "user_phone_brand":None,
            "search_type":None
        }
        price_range = tracker.get_slot('search_type')
        if price_range == 'low':
            dispatcher.utter_message(response="utter_recommend_result",formatted_price='1999')
        elif price_range == 'medium':
            dispatcher.utter_message(response="utter_recommend_result",formatted_price='3999')
        else:
            dispatcher.utter_message(response="utter_recommend_result",formatted_price='5999')

        return [SlotSet(slot,value) for slot,value in slots.items()]

兜底回复

在Config.yml中配置,Config相关文档在这里

pipeline:
  - name: "MitieNLP"
    model: "dict/total_word_feature_extractor_zh.dat"
  - name: "JiebaTokenizer"
    dictionary_path: "dict/jieba"
  - name: "MitieFeaturizer"
  - name: "RegexFeaturizer"
  - name: "DIETClassifier"
    epochs: 300
    constrain_similarities: True
  - name: "EntitySynonymMapper"
  - name: "FallbackClassifier"
    threshold: 0.95

其中Component FallbackClassifier组件用户兜底回复,如果用户输入后,Rasa判断没有意图的置信度超过上图定义的0.95,则认为失败,回复定义好的内容

在rule.yml中

- rule: Ask the user to rephrase whenever they send a message with low NLU confidence
  steps:
  - intent: nlu_fallback
  - action: utter_fallback

其中 nlu_fallback为Rasa预定义
回复定义在Domain.yml中

  utter_fallback:
  - text: 对不起,没有明白您的意图!

训练

在项目目录中输入rasa train即可,生成的模型位于model文件中
在这里插入图片描述

对话

模型训练完成之后,可以通过各种Channel进行对话,Channel的定义在credentials.yml文件,相关文档在这里

rest:
#  # you don't need to provide anything here - this channel doesn't
#  # require any credentials


#facebook:
#  verify: "<verify>"
#  secret: "<your secret>"
#  page-access-token: "<your page access token>"

#slack:
#  slack_token: "<your slack token>"
#  slack_channel: "<the slack channel>"
#  slack_signing_secret: "<your slack signing secret>"

#socketio:
#  user_message_evt: <event name for user message>
#  bot_message_evt: <event name for bot messages>
#  session_persistence: <true/false>

#mattermost:
#  url: "https://<mattermost instance>/api/v4"
#  token: "<bot token>"
#  webhook_url: "<callback URL>"

# This entry is needed if you are using Rasa X. The entry represents credentials
# for the Rasa X "channel", i.e. Talk to your bot and Share with guest testers.
rasa:
  url: "http://localhost:5002/api"

shell

linux shell是对话通道之一,如下如使用shell进行测试,首先启动rasa shell和 rasa run actions(用于执行函数)
在这里插入图片描述

rest

通过http rest进行对话,首先启动rasa run 和 rasa run actions (用于执行函数)
在这里插入图片描述
在这里插入图片描述

chat-room

可以使用chatroom进行对话,首先启动rasa run --cors "*"rasa run actions
注意参数 --cors需要传递,否则会报跨域问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

演示视频

Rasa实现百度UNIT智能客服教学机器人

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/439526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode: 354. 俄罗斯套娃信封问题 | 暴力递归=>记忆化搜索=>动态规划+二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

2023年4月份上新的目标检测系列论文(附下载链接)

来源&#xff1a;投稿 作者&#xff1a;王老师 编辑&#xff1a;学姐 目标检测-预训练相关 论文标题&#xff1a;DetCLIPv2: Scalable Open-Vocabulary Object Detection Pre-training via Word-Region Alignment 论文链接&#xff1a; https://arxiv.org/abs/2304.04514代码链…

Auto-GPT免费尝鲜之初体验-使用攻略和总结

Auto-GPT免费尝鲜之初体验-使用攻略和总结 写在前面的废话一、部署 Auto-GPT二、试运行 Auto-GPT三、我踩过的坑四、后续探索 写在前面的废话 ChatGPT 的交互模式&#xff0c;是和一个 “人” 对话聊天。 如果你想了解更多ChatGPT和AI绘画的相关知识&#xff0c;请参考&#…

【代码调试】《Frustratingly Simple Few-Shot Object Detection》

更多问题可参考&#xff1a; https://blog.csdn.net/qiankendeNMY/article/details/128450196 论文地址&#xff1a;https://arxiv.org/abs/2003.06957 论文代码&#xff1a;https://github.com/ucbdrive/few-shot-object-detection 我的配置&#xff1a; Python &#xff1a…

从零开始,详解亚马逊店铺注册流程及技巧指南

近几年跨境电商的势头越来越猛&#xff0c;所以很多新手都想去闯荡一番。很多人的第一选择都是亚马逊&#xff0c;毕竟亚马逊是世界上最大的电商平台之一&#xff0c;因此今天东哥就跟大家分享亚马逊店铺的注册方法&#xff0c;想在亚马逊开店的朋友不要错过&#xff01; 亚马逊…

设计模式 -- 工厂方法模式以及抽象工厂模式

前言 月是一轮明镜,晶莹剔透,代表着一张白纸(啥也不懂) 央是一片海洋,海乃百川,代表着一块海绵(吸纳万物) 泽是一柄利剑,千锤百炼,代表着千百锤炼(输入输出) 月央泽,学习的一种过程,从白纸->吸收各种知识->不断输入输出变成自己的内容 希望大家一起坚持这个过程,也同…

Mysql MVCC实现

文章目录 背景MVCC定义快照读和当前读当前读快照读 MVCC实现原理隐式字段undo log版本链1.插入一条记录2.修改记录3.修改记录 Read View读视图属性&#xff1a;Read View可见性算法 隔离级别长事务为什么要避免长事务 背景 并发事务可能产生的问题&#xff1a; 读读&#xff…

zk111111111111111111

Zookeeper 1 zookeeper(作为 dubbo 的注册中心): 概述: zookeper 是 一个分布式的、开源的分布式应用程序的协调服务,管理分布式应 用 作用: 配置管理,分布式锁,集群管理 2 zookeeper 的安装 (dubbo 的资料中已经整理) 3 zookeeper 的数据模型 zookeeper 是一个树形的服…

微信小程序php+vue 校园租房指南房屋租赁系统

本着诚信的原则&#xff0c;平台必须要掌握出租方必要的真实可信的信息&#xff0c;这样就可以防止欺诈事件的发生&#xff0c;事后也可以联系找到出租方。并且租金等各方面规范标准化&#xff0c;在这易租房诚信可信的平台让承租方与出租方充分有效对接&#xff0c;既方便了承…

扫清盲点:带你学习 树状数组 这种数据结构

什么是树状数组 树状数组是一种用于维护数列前缀和的数据结构&#xff0c;它可以在 O(logn) 的时间复杂度内修改单个元素的值&#xff0c;以及查询某个区间的元素和。 树状数组的特点是什么&#xff1f; 树状数组的特点其实就是&#xff0c;在单点修改 &#xff0c;和区间查询…

rancher2.7丢失集群信息

使用Docker 单节点安装rancher&#xff0c;然后在rancher中创建了一个k8s的集群。重启rancher所在的虚拟机后&#xff0c;登录rancher发现这是新的实例&#xff0c;集群信息丢失了。但是k8s集群还是好好的。 检查k8s的日志&#xff0c;api server日志会报错 time"2023-0…

11 - 多平台适配

多平台适配 11-1&#xff1a;开篇 在上一章中&#xff0c;我们知道了&#xff0c;当【慕课热搜】运行到 h5 端的时候&#xff0c;那么会出现一些问题&#xff0c;这些问题具体有&#xff1a; hot 列表滚动&#xff0c;tabs 置顶效果消失在火狐浏览器中&#xff0c;横线出现非…

kafka-kafka集群配置、kafka集群启动创建kafka主题、获取主题数据

本文章使用三台主机&#xff0c;分别为&#xff1a;master、slave1、slave2 一、解压kafka安装包至目录下 tar -zxvf kafka_2.12-2.4.1.tgz -C /需要放置的路径/ 二、修改配置文件 server.properties 该配置在kafka目录的config目录下 #修改文件中id数值 broker.id0 kafka集群…

Linux -- Web服务器-Apache 快速安装及主配置文件分析

目录 快速安装 Apache : 预处理 &#xff1a; 关闭安全上下文检测 : 关闭防火墙 : 启动 Apache 服务 &#xff08; 启动 httpd &#xff09;: 测试 &#xff1a; 主配置文件分析 &#xff1a; 常见配置文件所在位置 &#xff1a; 目录文件结构 &#xff1a;…

购物车--订单模块,练习完成

目标&#xff1a; 在购物车页面&#xff0c;增加一个创建订单的超链接。通过创建订单&#xff0c;在Order表里新增一条数据&#xff0c;同时把session中的订单条目都保存到数据库中。 1、创建两个表&#xff0c;orders用来具体存储每一个订单的细节&#xff0c;order_用来存储…

基于MobileNetV2的Transfer Learning模型,实现物体检测(附源码)

文章目录 一、MobileNet1. 深度可分离卷积&#xff08;Depthwise separable convolution&#xff09;2. MobileNet V13. MobileNet V2 二、物体检测源码&#xff08;基于MobileNetV2&#xff09; 一、MobileNet 1. 深度可分离卷积&#xff08;Depthwise separable convolution…

智慧园区综合管理平台开发基本功能有哪些?

随着智慧城市建设与信息化发展&#xff0c;园区管理也需要更加智能便捷化&#xff0c;于是智慧园区管理系统开发应运而生。智慧园区综合管理系统就是利用物联网、大数据等技术工具&#xff0c;顺应产业园区升级发展需求&#xff0c;实现园区环境、设备、安全、基础管理、资源服…

【Linux】进程间通信——命名管道

文章目录 命名管道1. 见一见管道文件mkfifo函数管道文件的使用 2. 命名管道原理如何保证两个毫不相关的进程&#xff0c;看到的是同一个文件&#xff0c;并打开&#xff1f; 3. 用命名管道实现server&client通信如何使用makefile连续生成可执行程序comm.hpp文件server.cc 服…

如何通过 Baklib 平台实现知识共享(内含案例介绍)

在这个信息时代&#xff0c;知识被认为是最重要的资源之一。企业要想保持发展&#xff0c;就必须善于利用和管理知识。而知识管理则是一种涵盖人、过程和技术的活动&#xff0c;它通过收集、整理、传递和应用知识&#xff0c;使组织获得更高的效率、创造力和竞争力。本文将以知…

【Linux】八、Linux进程信号详解(一)

目录 一、认识信号 1.1 生活中的信号 1.2 将1.1的概念迁移到进程 1.3 信号概念 1.4 查看系统定义信号列表 1.5 man 7 signal 1.6 解释1.2的代码样例 1.7 信号处理常见方式概览 二、产生信号 2.1 signal函数 2.2 通过终端按键产生信号 2.3 调用系统函数向进程发信号…