多组件卡片式问答引擎

#本篇文章联合同花顺人工智能领域开发者严同学创作

1.简介

为了满足用户个性化需求以及精细化运营,越来越多的企业推出多组件式的卡片问答,这种回答方式不会千篇一律,能够更好地为客户提供服务,帮助客户解决问题。

使用这种问答方式的企业如京东灵犀、招商银行小招客服、同花顺问财等,都获得过行业协会最佳实践荣誉与客户的认可。(下图为京东、小招客服、问财对应对话页面)

1.1什么是卡片式问答引擎?

我们在前文提到过FAQ、任务型、表格、知识图谱问答引擎(链接直达),这四个引擎更加注重在知识类别上做出区分,如单轮我们放进FAQ引擎,多轮我们使用任务型引擎,结构化的知识我们使用表格问答引擎或知识图谱问答引擎。

卡片式问答引擎则在产品功能上更贴合用户,它拥有多种组件,可以调取数据库信息,一键跳转业务办理页面,前端展示更加多样。

1.2卡片式问答引擎与传统问答引擎有何不同?

下面通过两个案例来看下卡片式问答引擎与传统问答引擎不同之处

Q:如果是查询银行网点场景,我们怎么回复客户?

A:常见的查询场景如查账单、查余额、查网点等,如果我们使用FAQ引擎,那么回答会是“请登录...第一步→第二步→第三步”这种回复非常机械,用户理解难度大,中途还需要切换页面去寻找,极大地降低了客户体验感;如果我们使用任务型引擎进行多次确认您要查询的信息最后回复一个账单信息又过于复杂,操作难度大。

下图左:传统FAQ引擎,回复非常机械,用户理解难度大,中途还需要切换地图页面去寻找;

下图右:卡片式问答引擎,不仅有详细的地址,画圈处可直接点击跳转地图页面,因为网点需要排号,这里还可以一键预约排号,一个卡片帮助用户解决需求;

Q.如果我们查询我们的贷款情况,我们怎么回复客户?

A:因为查询个人信息涉及到调取数据库的操作,如果智能客服没有打通客户数据库,那么给出操作路径,指引客户查询。如果打通了客户数据库,我们便可以使用卡片引擎内嵌的组件去调取客户数据,客户在智能客服页面即可解决问题(下图中,因银行业监管,小招客服给了一键跳转查询组件)。

下图左:传统FAQ引擎,回复机械,用户理解难度大,大概率没有解决客户问题;

下图右:卡片式问答引擎,不仅有详细的操作路径,还给了一键跳转查询按键,极大程度降低客户操作难度。

小结:相比如FAQ等传统问答引擎,卡片式问答引擎回答组件更丰富,不仅有文本还有一键跳转,在理解用户需求的基础上降低了客户操作的难度,有助于实现一站式地解决用户问题

2.卡片式问答技术原理

卡片式问答引擎首先需要对话系统来底层支持,构建一个对话系统通常需要以下组成部分:

  1. 自然语言理解(NLU):将用户输入的文本或语音转化为计算机可以理解的形式,包括识别用户的意图、提取关键信息和命名实体等。
  2. 对话管理(DM):根据用户的意图和系统的状态,决定系统应该采取什么样的行为。对话管理负责管理对话的流程、选择适当的对话策略,并处理对话的上下文。
  3.  自然语言生成(NLG):将计算机生成的信息转化为自然语言文本或语音输出,以便向用户提供回应。

以下是一个查询用户订单物流状态的对话示例:
用户:你好,我想查询我的订单的物流状态。
系统:您好!请问您有订单号吗?我可以通过订单号为您查询物流状态。
用户:是的,我的订单号是123456789。
系统:经查询,订单号为123456789的物流状态是已发货,预计在两天内送达。
(订单精简信息、订单url或图片等信息)
系统:温馨提示:如有其他疑问,请联系人工客服。


2.1从用户问到卡片回复的详细流程

接下来将以此示例说明,从用户提问到卡片回复的流程

2.1.1第一轮

2.1.2第二轮

2.2多引擎问答实现

在一个智能客服系统中,我们常常会用到多种对话引擎,如FAQ引擎、任务型引擎、卡片式引擎,那门我们在回复用户时,到底采用哪种引擎?

常见的解法有

  • 引擎的优先级排序,如用户问依次进入任务型引擎、卡片式引擎、FAQ引擎匹配,回复客户问题;
  • 在意图识别层面,我们也可以让“查账单”“查个人信息”等意图,进入卡片式引擎,从而满足问答需要。


3.常见的组件功能

3.1APP内页面跳转

常见的有查账单,查个人账户信息,查网点位置

3.2订单等实时数据图表

如图,在打通订单数据库后,我们便可以通过用户画像猜测客户想问的问题,在证券市场中可以显示动态图表,提升了智能客服的可用性。


4.代码实战
 

以电商智能客服为例,使用 Flask 和 SQLite 数据库来实现这个功能:

from flask import Flask, request, jsonify  
import sqlite3  
  
app = Flask(__name__)  
  
# 初始化数据库  
def init_db():  
    conn = sqlite3.connect('orders.db')  
    cursor = conn.cursor()  
    cursor.execute('''CREATE TABLE IF NOT EXISTS orders (id INTEGER PRIMARY KEY, user_id INTEGER, product TEXT, quantity INTEGER)''')  
    conn.commit()  
    conn.close()  
  
# 查询订单  
def query_orders(user_id):  
    conn = sqlite3.connect('orders.db')  
    cursor = conn.cursor()  
    cursor.execute("SELECT * FROM orders WHERE user_id=?", (user_id,))  
    orders = cursor.fetchall()  
    conn.close()  
    return orders  
  
@app.route('/init', methods=['POST'])  
def init():  
    data = request.json  
    user_id = data['user_id']  
    init_db()  
    return jsonify({'message': 'Database initialized'})  
  
@app.route('/query', methods=['POST'])  
def query():  
    data = request.json  
    user_id = data['user_id']  
    orders = query_orders(user_id)  
    return jsonify({'orders': orders})  
  
if __name__ == '__main__':  
    app.run(debug=True)

这个例子中,我们使用 Flask 创建了一个简单的 Web 服务。用户可以通过 POST 请求初始化数据库和查询订单。查询订单时,用户需要提供他们的 user_id。为了简化,我们假设每个用户只有一个唯一的 user_id。在实际应用中,你可能需要一个更复杂的用户认证系统。

最后,我们在前端设置智能客服回复卡片样式,通过接口调取对应参数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“React学习之旅:从入门到精通的点滴感悟“

在探索和学习React的过程中,我逐渐领悟到了前端开发的魅力与挑战。React,作为Facebook推出的开源JavaScript库,以其独特的思维方式和强大的功能,引领着前端开发的潮流。在这篇文章中,我将分享我的React学习心得&#x…

一个int型有序数组,如何拿到最低的值和这个值一共存在多少个?

一个int型有序数组,如何拿到最低的值和这个值一共存在多少个? 示例代码: int min 0;int os 1;int[] element {5,4,4,2,2};for (int i : element) {if (i min) {os;} else {min i;os 1;}}System.out.println("min " min);S…

PortSwigger Access Control

lab1: Unprotected admin functionality 访问robots.txt 进了删除即可 lab2: Unprotected admin functionality with unpredictable URL 访问admin-d0qwj5 lab3: User role controlled by request parameter 发现Cookie中存在判断是否为admin lab4: User role can be modifie…

test assert-01-Google Truth 断言

Truth Truth 是用于Java测试的断言框架,灵感来自于FEST,并受到一些可扩展性需求的驱动,几乎完全由谷歌员工在业余时间编写,或者作为Java核心图书馆管理员的身份做出贡献。 作用 作为工程师,我们花费大部分的时间来阅…

【RocketMQ笔记01】安装RocketMQ消息队列运行环境

这篇文章,主要介绍如何安装RocketMQ消息队列运行环境。 目录 一、RocketMQ消息队列 1.1、下载RocketMQ 1.2、解压安装包 1.3、配置RocketMQ环境变量 1.4、修改启动脚本 1.5、启动RocketMQ (1)启动NameServer (2&#xff0…

11.1Linux串口应用程序开发

UART简介 UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。 串口在嵌入式中用途非常的广泛,主要的用途有: 打印调试信息;外接各种模块:GPS、蓝牙; 串口因为结构简单、稳…

mybatis缓存详解,一级缓存和二级缓存举例讲解

文章目录 mybatis缓存详解,一级缓存和二级缓存举例讲解1、一级缓存1.1、同一个sqlsession对象的不同mapper对象之间的缓存使用debug运行查看cache缓存 1.2、不同sqlsession对象下的不同mapper对象的缓存使用debug运行查看cache缓存 1.3、同一个sqlsession对象下一级…

【Java】SpringBoot快速整合Kafka

目录 1.什么是Kafka? 主要特点和概念: 主要组成部分: 2.Kafka可以用来做什么? 3.SpringBoot整合Kafka步骤: 1. 添加依赖: 2. 配置 Kafka: 3. 创建 Kafka 生产者: 4. 创建 Kafka 消费者: 5. 发布消息: 6. 使…

【基础篇】二、字节码文件的组成 Arthas + jclasslib +javap

文章目录 1、jclasslib工具2、基础信息部分3、常量池部分4、方法部分(从字节码指令看i)5、三种1操作的性能对比6、javap -v命令7、jclasslib插件8、Arthas 1、jclasslib工具 字节码文件中保存的是源代码编译后的内容,以二进制方式存储&#…

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于协作搜索算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.协作搜索算法4.实验参数设定5.算法结果6.…

人工智能_机器学习074_SVM支持向量机_软间隔与优化目标函数构建_C参数由来_惩罚误差点的惩罚度---人工智能工作笔记0114

然后我们接着上一节再来看一下这里我们说有个 min_faces_per_person = 0 这个可以看到如果我们写上0,就意味着要加载所有的人脸图片,就会花费的时间久对吧 我们可以试试,这里我们 min_faces_per_person = 0 改成0然后 我们等一会加载完了以后,我们用 display(X.shape,faces.sh…

OpenEuler安装内网穿透工具实现ssh连接openEuler系统

文章目录 1. 本地SSH连接测试2. openEuler安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 本文主要介绍在openEuler中安装Cpolar内网穿透工具实现远程也可以ssh 连接openEuler系统使用. 欧拉操作系统(openEuler, 简称“欧拉”…

自媒体实战篇:剪辑软件应用与实操

剪辑软件应用与实操 剪映基础界面认识 素材面板 导入本地素材,剪映自带素材库,音频,文本等素材合集面板播放预览 预览本地素材,,剪映自带素材库以及时间线面板中的素材的实时效果时间线面板 对素材进行基础的编辑操作,调整素材轨道等素材功能面板 可对素材或者文本等精细…

【软件工程】可执行文件和数据分离

一、概述 可执行文件和数据分离是一种软件设计策略,旨在将程序代码和程序使用的数据分离存储。这种方法通常用于提高软件的模块化程度和灵活性,以及方便软件的管理和维护。 在可执行文件和数据分离中,程序代码通常以可执行文件的形式存储&a…

什么是数据分析思维

参考 一文学会如何做电商数据分析(附运营分析指标框架) 电子商务该如何做数据分析?如何数据分析入门(从各项指标表象进入) https://www.processon.com/outline/6589838c3129f1550cc69950 数据分析步骤 什么是数据分析…

C# Onnx yolov8 pokemon detection

目录 效果 模型信息 项目 代码 下载 C# Onnx yolov8 pokemon detectio 效果 模型信息 Model Properties ------------------------- date:2023-12-25T17:55:44.583431 author:Ultralytics task:detect license:AGPL-3.0 h…

uniapp创建/运行/发布项目

1、产生背景----跨平台应用框架 在移动端各大App盛行的时代,App之间的竞争也更加激烈,他们执着于让一个应用可以做多个事情 所以就应运而生了小程序,微信小程序、支付宝小程序、抖音小程序等等基于App本身的内嵌类程序。 但是各大App他不可…

Python能做大项目(6)Poetry -- 项目管理的诗和远方之一

[Poetry] 是一个依赖管理和打包工具。Poetry 的作者解释开发 Poetry 的初衷时说: 通过前面的案例,我们已经提出了一些问题。但不止于此。 当您将依赖加入到 requirements.txt 时,没有人帮你确定它是否与既存的依赖能够和平共处,这…

2023读书笔记57|《顾城诗选》——我们走进了夜海, 去打捞遗失的繁星

2023读书笔记57|《顾城诗选》——我们走进了夜海, 去打捞遗失的繁星 细雨,洗去空气中的浮尘, 薄暗里蜜酒散开阵阵醇香。 野蜂在风雨的摇荡中开始安眠, 带着无限甜美的梦想。 河岸边,开满了耀眼的冰花。 沙洲上&#x…

设计模式-生成器模式

设计模式专栏 模式介绍模式特点应用场景生成器模式和工厂模式的区别代码示例Java实现生成器模式Python实现生成器模式 生成器模式在spring中的应用 模式介绍 生成器模式是一种创建型模式,它的主要目的是将一个复杂对象的构建与它的表示分离,使得同样的构…