ChatGPT入门案例|商务智能对话客服(一)

news2024/9/22 17:35:52

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接大量的语料库来训练模型,这些语料库包含了真实世界中的对话,使得ChatGPT具备上知天文下知地理,还能根据聊天的上下文进行互动的能力,做到与真正人类几乎无异的聊天场景进行交流。

ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。本篇为大家带来与ChatGPT相关的入门案例——“商务智能对话客服”的成果展示,后续我们将通过实例说明远程交互式、本地交互式以及定制型客服的应用。

01、智能客服功能架构

问答智能客服简介

问答型(Question and Answer,QA)智能客服根据问题检索答案,并返回用户可以理解的结果,注重一问一答的流程处理,侧重知识推理以及问答匹配。在任务处理过程中,问答系统的部分功能与信息查询类似,比如均需要根据用户提出的问题进行答案检索,但在输入/输出的具体内容、信息获取过程和应用场景等方面可能存在差异。

可以根据不同角度(如应用领域、答案形式以及语料格式等)对问答系统进行分类。基于应用领域可分为限定域问答系统和开放域问答系统。限定域问答系统是指系统所能处理的问题只限定于特定领域或特定范围,比如只限于医学、商务或者金融领域等,而开放域问答系统面向的领域范围可以更广。根据支持技术分类,可分为数据库系统、对话式系统、阅读理解系统、问题集系统、知识库系统等。

智能问答客服功能架构

典型的问答系统包含问题输入、问题理解、信息检索、信息抽取、答案排序、答案生成和结果输出等。首先由用户提出问题,检索操作通过在知识库中查询得到相关信息,并依据特定规则从提取到的信息中抽取相应的候选答案特征向量,最后筛选候选答案输出结果给用户,参见图1。

■ 图1智能问答客服基本流程

02、智能问答客服框架

问答型自动应用客服主要围绕问题提出、问题理解和候选答案的筛选等这几个中心点展开,根据用户输入的问题信息,理解用户问题的主要意图并识别问题的主题范畴,从相应知识库或者数据库(如外部知识库或者内部知识库)中检索答案,无法检索信息时可能借助推理生成候选答案,通过机器学习或深度算法进行最佳答案甄别,并将最优答案以用户容易理解的方式输出,一般包含问题处理、问题映射、查询构建、知识推理以及消歧排序等主要处理模块。

问题处理

问题处理流程识别问题中包含的信息,判断问题的主题信息和主题范畴归属,比如一般问题和特定主题问题的区分,然后提取与主题相关的关键信息,如人物信息、地点信息和时间信息等。

问题映射

根据用户咨询的问题,进行问题映射。通过相似度匹配和同义词表等解决映射问题,可能需要执行拆分和合并操作。

查询构建

通过对输入问题进行处理,将问题转换为计算机可以理解的查询语言,然后查询知识图谱或者数据库,通过检索获得相应备选答案。

知识推理

根据问题属性进行推理,如果属于知识图谱或者数据库中已知定义信息,则直接查找并返回结果。如果问题属性未定义,则需要通过机器算法或深度学习推理生成答案。

消歧排序

根据知识图谱中查询返回的单数或者复数备选答案,结合问题属性进行消歧处理和优先级排序,输出最优答案。

03、问答智能客服实战

目前基于模板的客服应用程序比较多,介绍三种方法。

第一种是基于远程模式的问答对话,需要提前创建问答知识库(QnA Maker Knowledge Base)服务,常见的知识库模板比较多,网址https://docs.microsoft.com/en-us/azure/cognitive-services/qnamaker/quickstarts/create-publish-knowledge-base?tabs=v1提供了一种模板的相应信息。本文的知识库使用微软Azure系统提供的模板文件qna_chitchat_caring.tsv,通过导出后导入方式上传到智能客服应用中。

第二种是基于本地模板的问答对话应用,需要提前将模板下载到本地安装。

第三种是基于用户定制的问答系统,这种方式用户需要编写自定义代码。后两种方法在下一篇展开。

基于Python框架的智能对话应用模板可以在网址https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/python下载。使用到的其他应用包括Bot Framework Emulator(下载网址为https://github.com/Microsoft/BotFramework-Emulator/releases/tag/v4.13.0),代理应用程序Ngrok(下载网址为https://ngrok.com/download)。启动环境执行pip install botbuilder.ai安装智能客服相应库文件。

基于远程交互模式问答客服

基于远程服务器模板的交互模式的主要操作步骤如下。

(1) 在微软Azure官网主页注册账户,网址为https://azure.microsoft.com/en-us/。注册成功后登录到Azure Portal页面,网址为https://portal.azure.com/#home。

(2) 切换到Azure Portal页面,选择QnA makers创建服务QnA Service,如图2所示。

 ■ 图2 微软远程问答客服创建界面

 3) 单击QnA Maker Portal选项,如图3所示。

■ 图3 问答创建选项 

 (4) 单击Create a QnA Service按钮创建知识库,参见图4。

 ■ 图4 创建问答服务

 (5) 根据提示完成步骤(1)~步骤(4),然后单击Create your KB按钮完成知识库创建,参见图5。

 ■ 图5 创建知识库

 (6) 知识库完成创建后,单击Save and train按钮,最后单击Publish按钮,如图6所示。

 ■ 图6 发布智能客服

(7) 知识库完成创建后,单击My knowledge bases按钮确认知识库详细信息,参见图7。

■ 图7 确认知识库信息

(8) 单击View Code按钮,确认并记录主机地址、知识库和认证键值。

POST /knowledgebases/knowledgebases-id/generateAnswer
Host: https://host-address
Authorization: EndpointKey EndpointKey -id
Content-Type: application/json
{"question":"<Your question>"}

(9) 新建app.py文件,从botbuilder.core库导入BotFrameworkAdapter、BotFrameworkAdapterSettings、TurnContext、ConversationState、MemoryStorage类,导入网页框架Flask库以及asynciobotbuilder.schema.Activity。主要代码如下。

app = Flask(__name__)
loop = asyncio.get_event_loop()

botframework = BotFrameworkAdapterSettings("","")
botadapter = BotFrameworkAdapter(botframework)

remotebot = RemoteBot()

@app.route("/api/messages",methods=["POST"])
def messages():
    if "application/json" in request.headers["content-type"]:
        context = request.json
    else:
        return Response(status = 415)

    activity = Activity().deserialize(context)
    
    if "Authorization" in request.headers:
        outcome = request.headers["Authorization"]
    else:
        outcome=""

    async def call_fun(turncontext):
        await remotebot.on_turn(turncontext)
    task = loop.create_task(
        botadapter.process_activity(activity,outcome,call_fun)
        )
    loop.run_until_complete(task)

if __name__ == '__main__':
    app.run('localhost',4000)

 (10) 新创建remotebot.py文件,主要代码如下。

from botbuilder.core import TurnContext,ActivityHandler,MessageFactory
from botbuilder.ai.qna import QnAMaker,QnAMakerEndpoint

class RemoteBot(ActivityHandler):
    def __init__(self):
       endpoint = QnAMakerEndpoint("knowledgebases-id","EndpointKey -id","https://host-address")
       self.botmaker = QnAMaker(endpoint)

    async def on_message_activity(self,context:TurnContext):
      response = await self.botmaker.get_answers(context)
      if response and len(response) > 0:
         await context.send_activity(MessageFactory.text(response[0].answer))

 (11) 在app.py路径下启动命令行窗口,执行命令python app.py启动客服程序,命令行窗口提示Running on http://localhost:4000的信息,其中,4000是app.py中配置的端口PORT属性值,参见图8。

■ 图8 启动页面

(12) 启动Bot Framework Emulator程序,单击左下角设置按钮,在Path to ngrok中选择下载的ngrok.exe的路径位置,勾选Bypass ngrok for local addresses,Run ngrok when the Emulator starts up以及Use version 1.0 authentication tokens复选框,参见图9和图10。

■ 图9 智能客服客户端

■ 图10 智能客服客户端模拟器设置

(13) 单击Open Bot按钮,在客服程序URL中输入“http://localhost:4000/api/messages”,然后单击Connect按钮,参见图11。

■ 图11 远程连接设置

(14) 智能客服应用对话画面启动后,确认右边窗口中的日志输出正常,以及Ngrok应用处于代理监听状态,然后在左边窗口中输入需要咨询的问题,测试远程客服程序提供的回复结果,参见图12。

■ 图12 远程连接对话测试

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

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

相关文章

32个关于FPGA的学习网站

语言类学习网站 1、HDLbits 网站地址&#xff1a;https://hdlbits.01xz.net/wiki/Main_Page 在线作答、编译的学习Verilog的网站&#xff0c;题目很多&#xff0c;内容丰富。非常适合初学Verilog的人&#xff01;&#xff01;&#xff01; 2、牛客网 网站地址&#xff1a;http…

2.12、进程互斥的软件实现方法

学习提示: 理解各个算法的思想、原理结合上小节学习的 “实现互斥的四个逻辑部分”&#xff0c;重点理解各算法在进入区、退出区都做了什么分析各算法存在的缺陷&#xff08;结合 “实现互斥要遵循的四个原则” 进行分析&#xff09; 1、单标志法 算法思想&#xff1a;两个进…

SonicWall:请立即修复SMA 1000 漏洞

近日&#xff0c;网络安全供应商SonicWall发布了关于安全移动访问 (SMA) 1000设备的三个安全漏洞的紧急报告&#xff0c;其中包括一个高威胁性的身份验证绕过漏洞。SonicWall指出&#xff0c;攻击者可以利用这些漏洞绕过授权&#xff0c;并可能破坏易受攻击的设备。 从报告中可…

Cow Acrobats ( 临项交换贪心 )

题目大意&#xff1a; N 头牛 &#xff0c; 每头牛有一个重量(Weight)和一个力量(Strenth) &#xff0c; N头牛进行排列 &#xff0c; 第 i 头牛的风险值为其上所有牛总重减去自身力量 &#xff0c; 问如何排列可以使最大风险值最小 &#xff0c; 求出这个最小的最大风险值&am…

Java JCP

Java JCP目录概述需求&#xff1a;设计思路参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,challenge Survive. happy for hardess to solv…

GIS在地质灾害危险性评估与灾后重建中的实践技术应用及python机器学习灾害易发性评价模型建立与优化

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

手动部署ECS线上数据库及使用

文章参考自手动部署MySQL数据库&#xff08;CentOS 7&#xff09; (aliyun.com)MySQL是一个关系型数据库管理系统&#xff0c;常用于LAMP和LNMP等网站场景中。本教程介绍如何在Linux系统ECS实例上安装、配置以及远程访问MySQL数据库。前提条件已创建一台ECS实例。具体操作&…

[ 常用工具篇 ] CobaltStrike(CS神器)基础(一) -- 安装及设置监听器详解

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

YOLO-V5轻松上手

之前介绍了YOLO-V1~V4版本各做了哪些事以及相较于之前版本的改进。有的人或许会想“直接学习最近版本的算法不好吗”&#xff0c;在我看来&#xff0c;每一个年代的版本/算法都凝聚着当年学术界的智慧&#xff0c;即便是它被淘汰了也依旧有值得思考的地方&#xff0c;或是可以使…

工业无线物联网解决方案中的缺陷可让攻击者深入访问OT网络

运营技术 (OT) 团队通常通过无线和蜂窝解决方案将工业控制系统 (ICS) 连接到远程控制和监控中心&#xff0c;这些解决方案有时带有供应商运行的基于云的管理界面。 这些连接解决方案&#xff0c;也称为工业无线物联网设备&#xff0c;增加了 OT 网络的攻击面&#xff0c;并且可…

CentOS8基础篇6:文件属性的读取和修改

一、文件属性 每一行代表对应文件或目录的详细信息。从左到右具体的含义是文件属性、文件数、拥有者、所属的组、文件大小、建立月份、建立日期、建立年份或时间、以及文件名。其中“建立年份或时间”字段&#xff0c;如果文件是今年建立的&#xff0c;则显示具体时间&#xf…

文献阅读笔记 # GraphCodeBERT: Pre-training Code Representations with Data Flow

《GraphCodeBERT: Pre-training Code Representations with Data Flow》ICLR 2021 (TH-CPL A会&#xff0c;公认顶会&#xff0c;但未上 CCF 榜)作者部分与 CodeBERT 重叠&#xff0c;主要来自 MSRA Intern 和 MSRA 研究员&#xff0c;学生来自国内多个顶尖高校。资源&#xff…

java 黑马头条 day3 实名认证分布式事务问题 seata

1 完善实名认证功能 1.1 实名认证分布式事务问题 1.1.1 问题分析 在昨天的实名认证代码中&#xff0c;审核完毕后添加 id5的演示异常&#xff0c;重新使用postman进行测试, 会发现 出现异常后 本地方法因为有 Transactional注解 对ap_user ap_user_realname的操作会回滚 而…

【Docker】配置lsky pro兰空图床

Docker 部署 lsky pro 兰空图床的教程 本文首发于 慕雪的寒舍 1.使用Docker部署 命令比较简单&#xff0c;用下面的即可 docker run -d \ --name lsky \ -p 14728:80 \ -v /root/docker/lsky:/var/www/html \ halcyonazure/lsky-pro-docker:latest--name 设置容器名字为 lsky…

基于VS调试分析 + 堆栈观察问题代码段

文章目录问题代码段1 —— 阶乘之和问题代码段2 —— 越界的危害① 发现问题② 分析问题③ 思考问题【⭐堆栈原理⭐】④ 解决问题【DeBug与Release】&#x1f468;程序员与测试人员&#x1f469;✒总结与提炼问题代码段1 —— 阶乘之和 先来看一道C语言中比较基础的题目&#x…

新能源汽车PK燃油汽车,首次胜出,输赢真的那么重要?

新能源汽车PK燃油汽车&#xff0c;输赢真的那么重要&#xff1f;是的。【科技明说 &#xff5c; 每日看点】今天看到一个新能源汽车领域的消息&#xff0c;我觉得很有意思&#xff0c;是说中国新能源汽车满意度水平首次超过了燃油汽车&#xff0c;你们觉得是这样么&#xff1f;…

语义通信:DeepSC用于文本传输也太香了吧

论文标题&#xff1a;Deep Learning Enabled Semantic Communication Systems 论文链接&#xff1a;https://arxiv.org/abs/2006.10685v1 摘要 最近&#xff0c;人们开发了支持深度学习的端到端&#xff08;E2E&#xff09;通信系统&#xff0c;以合并传统通信系统中的所有物…

React中JSX的用法和理解

React的特点 React是用于构建用户界面的高效且灵活的 JavaScript 库&#xff0c;采用组件化模式和声明式编码&#xff1b;使用DOMdiff算法&#xff0c;最大限度地减少与DOM的交互。 相关js库 react.js&#xff1a;React核心库。react-dom.js&#xff1a;提供操作DOM的react扩…

Eclipse导出jar时的错误

文章目录一、发现问题二、解决问题三、新的问题今天&#xff0c;本来是风和日丽&#xff0c;轻风和畅的&#xff0c;复习的一天&#xff0c;直到我开始尝试导出 jar 可执行文件&#xff0c;兄弟们请记住这个词&#xff0c;我将被他折磨很久。一、发现问题 首先&#xff0c;我美…

RT-Thread MSH_CMD_EXPORT分析

RT-Thread MSH_CMD_EXPORT分析 1. 源码分析 在rt-thread中&#xff0c;使用FinSH&#xff0c;可以支持命令行。在源码中&#xff0c;使用MSH_CMD_EXPORT导出函数到对应命令。 extern void rt_show_version(void); long version(void) {rt_show_version();return 0; } MSH_CM…