LLM系列 | 14: 构建端到端智能客服

简介

漠漠水田飞白鹭,阴阴夏木啭黄鹂。
在这里插入图片描述

小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖海蛎煎的小男孩。紧接前面几篇ChatGPT Prompt工程和应用系列文章:

  • 04:ChatGPT Prompt编写指南
  • 05:如何优化ChatGPT Prompt?
  • 06:ChatGPT Prompt实践:文本摘要&推断&转换
  • 07:ChatGPT Prompt实践:以智能客服邮件为例
  • 08:ChatGPT Prompt实践:如何用ChatGPT构建点餐机器人?
  • 09:基于ChatGPT构建智能客服系统(query分类&安全审核&防注入)
  • 10:如何编写思维链Prompt?以智能客服为例
  • 11:LangChain危矣?亲测ChatGPT函数调用功能:以天气问答为例
  • 12:实测OpenAI函数调用功能:以数据库问答为例
  • 13:如何链接多个Prompt处理复杂任务?以智能客服为例(附完整代码)

今天这篇小作文是吴恩达《Building Systems with the ChatGPT API》课程的第3篇笔记。本文将综合之前多篇文章搭建一个带评估功能的端到端智能客服系统。整体流程大致如下:

  • 检查输入,看看用户输入的query是否能够通过审核API。
  • 抽取出商品和对应的类别。
  • 抽取出商品信息。
  • 模型根据商品信息回答用户问题。
  • 将模型的回复输入审核API对回复进行审核。

完整代码请在微信公众号:「小窗幽记机器学习」上添加小编微信。

准备工作

import os
import openai
import sys
sys.path.append('../..')
import utils_cn as utilsimport panel as pn  # GUI
pn.extension()openai.api_key  = "sk-XXX"
os.environ['HTTP_PROXY'] = "xxx"
os.environ['HTTPS_PROXY'] = "xxx"def get_completion_from_messages(messages, model="gpt-3.5-turbo", temperature=0, max_tokens=500):response = openai.ChatCompletion.create(model=model,messages=messages,temperature=temperature, max_tokens=max_tokens, )return response.choices[0].message["content"]

智能客服

以智能客服为例,介绍完整的服务链路,包括对输入文本进行安全检查、通过用户咨询查找到相关产品和类别、回答用户问题、对回答结果进行内容安全检查、对回答结果进行问题关联检查。

def process_user_message(user_input, all_messages, debug=True):delimiter = "```"# Step 1: Check input to see if it flags the Moderation API or is a prompt injectionresponse = openai.Moderation.create(input=user_input)moderation_output = response["results"][0]if moderation_output["flagged"]:print("Step 1: Input flagged by Moderation API.")return "Sorry, we cannot process this request."if debug: print("Step 1: Input passed moderation check.")products_and_category_dict = utils.get_products_and_category()if debug:print("products_and_category_dict=", products_and_category_dict)print("start do find_category_and_product_only")category_and_product_response = utils.find_category_and_product_only(user_input, products_and_category_dict)if debug: print("category_and_product_response=", category_and_product_response)print("start do Extract the list of products")# Step 2: Extract the list of productscategory_and_product_list = utils.read_string_to_list(category_and_product_response)if debug: print("category_and_product_list=", category_and_product_list)if debug: print("Step 2: Extracted list of products.")# Step 3: If products are found, look them upproduct_information = utils.generate_output_string(category_and_product_list)if debug:print("product_information=", product_information)if debug:print("Step 3: Looked up product information.")# Step 4: Answer the user questionsystem_message = f"""你是一位大型电子商店的客户助理。以友好和乐于助人的口吻回答,给出简明的答案。确保询问用户相关的后续问题。"""messages = [{'role': 'system', 'content': system_message},{'role': 'user', 'content': f"{delimiter}{user_input}{delimiter}"},{'role': 'assistant', 'content': f"Relevant product information:\n{product_information}"}]final_response = get_completion_from_messages(all_messages + messages)if debug:print("Step 4: Generated response to user question.")print("final_response=", final_response)all_messages = all_messages + messages[1:]# Step 5: Put the answer through the Moderation APIresponse = openai.Moderation.create(input=final_response)moderation_output = response["results"][0]if moderation_output["flagged"]:if debug: print("Step 5: Response flagged by Moderation API.")return "Sorry, we cannot provide this information."if debug:print("Step 5: Response passed moderation check.")# Step 6: Ask the model if the response answers the initial user query welluser_message = f"""你是一个客服助理,负责评估客服助理的回答是否足够回答客户的问题,并验证助理从产品信息中引用的所有事实是否正确。\产品信息、用户和客服助理的消息将用三个反引号分隔,即```.\请用一个字母回答,不带标点符号:\Y - 如果输出足够回答问题,并且回答正确使用了产品信息 \N - 否则 \只输出一个字母。Customer message: {delimiter}{user_input}{delimiter}Product information: {delimiter}{product_information}{delimiter}Agent response: {delimiter}{final_response}{delimiter}回复是否充分回答了问题?"""messages = [{'role': 'system', 'content': system_message},{'role': 'user', 'content': user_message}]evaluation_response = get_completion_from_messages(messages)if debug:print("Step 6: Model evaluated the response.")print("evaluation_response=", evaluation_response)# Step 7: If yes, use this answer; if not, say that you will connect the user to a humanif "Y" in evaluation_response:  # Using "in" instead of "==" to be safer for model output variation (e.g., "Y." or "Yes")if debug: print("Step 7: Model approved the response.")return final_response, all_messageselse:if debug: print("Step 7: Model disapproved the response.")neg_str = "很抱歉,我无法提供您所需的信息。我将为您转接到一位人工客服以获得进一步帮助。"return neg_str, all_messagesuser_input = "给我介绍下SmartX Pro phone和fotosnap DSLR camera。还有,我也想了解下你们的电视。"
response,_ = process_user_message(user_input,[])
print(response)

输出结果如下:

Step 1: Input passed moderation check.
products_and_category_dict= {'计算机和笔记本电脑': ['TechPro超极本', 'BlueWave游戏笔记本电脑', 'PowerLite可转换本', 'TechPro台式机', 'BlueWave Chromebook'], '智能手机和配件': ['SmartX ProPhone', 'MobiTech PowerCase', 'SmartX MiniPhone', 'MobiTech Wireless Charger', 'SmartX EarBuds'], '电视和家庭影院系统': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV'], '游戏机和配件': ['GameSphere X', 'ProGamer Controller', 'GameSphere Y', 'ProGamer Racing Wheel', 'GameSphere VR Headset'], '音频设备': ['AudioPhonic Noise-Canceling Headphones', 'WaveSound Bluetooth Speaker', 'AudioPhonic True Wireless Earbuds', 'WaveSound Soundbar', 'AudioPhonic Turntable'], '相机和摄像机': ['FotoSnap DSLR Camera', 'ActionCam 4K', 'FotoSnap Mirrorless Camera', 'ZoomMaster Camcorder', 'FotoSnap Instant Camera']}
start do find_category_and_product_only
category_and_product_response= [{'category': '智能手机及配件', 'products': ['MobiTech PowerCase', 'SmartX MiniPhone', 'MobiTech Wireless Charger', 'SmartX EarBuds']}, {'category': '相机和摄像机', 'products': ['ActionCam 4K', 'FotoSnap Mirrorless Camera', 'ZoomMaster Camcorder', 'FotoSnap Instant Camera']}, {'category': '电视和家庭影院系统', 'products': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV']}]
start do Extract the list of products
category_and_product_list= [{'category': '智能手机及配件', 'products': ['MobiTech PowerCase', 'SmartX MiniPhone', 'MobiTech Wireless Charger', 'SmartX EarBuds']}, {'category': '相机和摄像机', 'products': ['ActionCam 4K', 'FotoSnap Mirrorless Camera', 'ZoomMaster Camcorder', 'FotoSnap Instant Camera']}, {'category': '电视和家庭影院系统', 'products': ['CineView 4K TV', 'SoundMax Home Theater', 'CineView 8K TV', 'SoundMax Soundbar', 'CineView OLED TV']}]
Step 2: Extracted list of products.
product_information= {"name": "MobiTech PowerCase","category": "智能手机和配件","brand": "MobiTech","model_number": "MT-PC20","warranty": "1年","rating": 4.3,"features": ["5000mAh电池","无线充电","与SmartX ProPhone兼容"],"description": "带有内置电池的保护壳,可延长使用时间。","price": 59.99
}
{"name": "SmartX MiniPhone","category": "智能手机和配件","brand": "SmartX","model_number": "SX-MP5","warranty": "1年","rating": 4.2,"features": ["4.7英寸显示屏","64GB存储","8MP相机","4G"],"description": "一款紧凑且价格实惠的智能手机,适用于基本任务。","price": 399.99
}
{"name": "MobiTech Wireless Charger","category": "智能手机和配件","brand": "MobiTech","model_number": "MT-WC10","warranty": "1年","rating": 4.5,"features": ["10W快速充电","Qi兼容","LED指示灯","紧凑设计"],"description": "一款便捷的无线充电器,为整洁的工作区提供便利。","price": 29.99
}
{"name": "SmartX EarBuds","category": "智能手机和配件","brand": "SmartX","model_number": "SX-EB20","warranty": "1年","rating": 4.4,"features": ["真无线","蓝牙5.0","触控控制","24小时电池续航"],"description": "通过这款舒适的耳机体验真正的无线自由。","price": 99.99
}
{"name": "ActionCam 4K","category": "相机和摄像机","brand": "ActionCam","model_number": "AC-4K","warranty": "1年","rating": 4.4,"features": ["4K视频","防水","图像稳定","Wi-Fi"],"description": "通过这款坚固而紧凑的4K运动相机记录您的冒险旅程。","price": 299.99
}
{"name": "FotoSnap Mirrorless Camera","category": "相机和摄像机","brand": "FotoSnap","model_number": "FS-ML100","warranty": "1年","rating": 4.6,"features": ["2010万像素传感器","4K视频","3英寸触摸屏","可更换镜头"],"description": "这款小巧轻便的无反相机具备先进功能。","price": 799.99
}
{"name": "ZoomMaster Camcorder","category": "相机和摄像机","brand": "ZoomMaster","model_number": "ZM-CM50","warranty": "1年","rating": 4.3,"features": ["1080p视频","30倍光学变焦","3英寸液晶屏","图像稳定"],"description": "通过这款易于使用的摄像机捕捉生活的瞬间。","price": 249.99
}
{"name": "FotoSnap Instant Camera","category": "相机和摄像机","brand": "FotoSnap","model_number": "FS-IC10","warranty": "1年","rating": 4.1,"features": ["即时打印","内置闪光灯","自拍镜","电池供电"],"description": "通过这款有趣便携的即时相机创造瞬间回忆。","price": 69.99
}
{"name": "CineView 4K TV","category": "电视和家庭影院系统","brand": "CineView","model_number": "CV-4K55","warranty": "2年","rating": 4.8,"features": ["55英寸显示屏","4K分辨率","HDR","智能电视"],"description": "一款具有生动色彩和智能功能的令人惊叹的4K电视。","price": 599.99
}
{"name": "SoundMax Home Theater","category": "电视和家庭影院系统","brand": "SoundMax","model_number": "SM-HT100","warranty": "1年","rating": 4.4,"features": ["5.1声道","1000W输出","无线低音炮","蓝牙"],"description": "一款强大的家庭影院系统,带来身临其境的音频体验。","price": 399.99
}
{"name": "CineView 8K TV","category": "电视和家庭影院系统","brand": "CineView","model_number": "CV-8K65","warranty": "2年","rating": 4.9,"features": ["65英寸显示屏","8K分辨率","HDR","智能电视"],"description": "通过这款令人惊叹的8K电视体验电视的未来。","price": 2999.99
}
{"name": "SoundMax Soundbar","category": "电视和家庭影院系统","brand": "SoundMax","model_number": "SM-SB50","warranty": "1年","rating": 4.3,"features": ["2.1声道","300W输出","无线低音炮","蓝牙"],"description": "通过这款时尚且功能强大的声音栏升级您的电视音频。","price": 199.99
}
{"name": "CineView OLED TV","category": "电视和家庭影院系统","brand": "CineView","model_number": "CV-OLED55","warranty": "2年","rating": 4.7,"features": ["55英寸显示屏","4K分辨率","HDR","智能电视"],"description": "通过这款OLED电视体验真正的黑色和生动色彩。","price": 1499.99
}Step 3: Looked up product information.
Step 4: Generated response to user question.
final_response= 当然,我很乐意为您介绍我们的产品。SmartX Pro phone是一款高端智能手机,具有先进的功能和性能。它配备了大屏幕、高像素相机、大内存和快速处理器。而Fotosnap DSLR相机则是一款专业级别的相机,具有高像素传感器、4K视频和可更换镜头等功能。至于我们的电视,我们有多种型号可供选择,包括4K和8K分辨率、HDR和智能电视等功能。您有什么具体的问题或需求吗?我可以为您提供更多详细信息。
Step 5: Response passed moderation check.
Step 6: Model evaluated the response.
evaluation_response= Y
Step 7: Model approved the response.
当然,我很乐意为您介绍我们的产品。SmartX Pro phone是一款高端智能手机,具有先进的功能和性能。它配备了大屏幕、高像素相机、大内存和快速处理器。而Fotosnap DSLR相机则是一款专业级别的相机,具有高像素传感器、4K视频和可更换镜头等功能。至于我们的电视,我们有多种型号可供选择,包括4K和8K分辨率、HDR和智能电视等功能。您有什么具体的问题或需求吗?我可以为您提供更多详细信息。

以ChatBot方式交流

以下使用panel构建一个简单的服务,通过对话框的方式进行交流。

def collect_messages(debug=True):user_input = inp.value_inputif debug:print(f"User Input = {user_input}")if user_input == "":returninp.value = ''global context#response, context = process_user_message(user_input, context, utils.get_products_and_category(),debug=True)print("user_input=", user_input)print("context=", context)response, context = process_user_message(user_input, context, debug=debug)context.append({'role':'assistant', 'content':f"{response}"})panels.append(pn.Row('User:', pn.pane.Markdown(user_input, width=600)))panels.append(pn.Row('Assistant:', pn.pane.Markdown(response, width=600, style={'background-color': '#F6F6F6'})))return pn.Column(*panels)panels = [] # collect display context = [ {'role':'system', 'content':"你是一个客户助理"} ]  inp = pn.widgets.TextInput(placeholder='Enter text here…')
button_conversation = pn.widgets.Button(name="Service Assistant")interactive_conversation = pn.bind(collect_messages, button_conversation)dashboard = pn.Column(inp,pn.Row(button_conversation),pn.panel(interactive_conversation, loading_indicator=True, height=300),
)

在这里插入图片描述

与ChatBot的交流结果如下:

User:给我介绍下你们的相机Assistant:我们有多种不同类型的相机,包括数码相机、单反相机和无反相机。每种相机都有不同的功能和规格,您可以告诉我您需要相机用于什么目的,我可以为您提供更具体的信息。User:我想了解下Fotosnap DSLRAssistant:Fotosnap DSLR是一款功能强大的数码单反相机,具有24.2MP传感器、1080p视频、3英寸液晶屏和可更换镜头等功能。它适合那些想要更多控制和创造力的摄影师。您可以选择不同的镜头来适应不同的拍摄场景。这款相机的价格为599.99美元,我们还提供1年的保修服务。您是否还有其他问题需要了解?User:还想买一台手机,你们有哪些型号Assistant:很抱歉,我无法提供您所需的信息。我将为您转接到一位人工客服以获得进一步帮助。User:介绍下SmartX的产品Assistant:我们的SmartX品牌提供了多种电子产品,包括智能手机、平板电脑、笔记本电脑、智能手表和智能家居设备等。我们的产品都采用最新的技术和设计,以提供最佳的用户体验。您可以告诉我您需要哪种类型的产品,我可以为您提供更具体的信息。User:我想了解下SmartX ProPhoneAssistant:SmartX ProPhone是一款功能强大的智能手机,具有6.1英寸显示屏、128GB存储、12MP双摄像头和5G等功能。它适合那些需要高速数据传输和大存储空间的用户。这款手机的价格为899.99美元,我们还提供1年的保修服务。您是否还有其他问题需要了解?

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Google招聘需求分析

coding: utf-8 Google招聘需求分析 Google是技术人员梦寐以求的工作圣地,想进入Google,需要什么样的条件?Google在哪些地区有招聘机会?我们一起探索。 这个项目中,我们将处理以csv文件格式存储的数据。数据为从http…

Mathtype中编辑好的公式在word中乱码问题

Mathtype中编辑好的公式在word中乱码问题 示例信息:遇到的问题:解决步骤 示例信息: mathtype7.0、office2016 遇到的问题: mathtype中编辑好的公式为: 切换到word中后显示的公式: 解决步骤 1.双击显…

Word2007及以上(OMML)公式转换为MathType公式出现问号的解决办法

问题示例 解决方法 复制word内置公式 word内内置公式转换为MathType公式,出现问号 双击已经转好的MathType公式,弹出MathType编辑框,把复制的公式替换MathType编辑框的公司 注:第2、3步骤可以合并为:直接打开MathTyp…

office 2019+mathtype安装(word不显示,latex公式转换{EMBED Equation.DSMT4}问题等)

安装包 链接中包括mathtype7和mathtype6.9(建议安装6.9,7网上找到的破解码,都破解不了): 链接:https://pan.baidu.com/s/16Qq0Ln8QDneLCdqEgKcO6A?pwdmuj5 提取码:muj5 由于提取码经常过期,需…

怎样解决在Word中复制黏贴后出现MathType公式乱码

MathType编辑公式的能力很强大,但在使用中也会有很多技巧,有些使用者经常在使用时会出现一些问题,比如d在Word中粘贴复制后,MathType公式乱码这个问题,该如何解决呢? MathType公式复制到Word中后乱码示例 …

LaTex | LaTex的数学公式中插入中文

在写文档时,发现公式中插入的中文会报错或显示异常,原来是正常情况下不支持,需要稍作修改,使用\mbox来处理下。见下面的例子: $$ P\{\mbox{拒绝} \mid H_{0} \mbox{为真}\} \alpha $$ 结果 ok了,可以…

MathType输入中文乱码的解决方案

版本说明: 博主用的 MathType 的版本为 macOS 系统下的 Mathtype7.3.0 的英文版,虽然版本可能不一样,但此篇博文涉及到的解决方案和系统以及软件版本是没什么关系的,所以同学们可以继续往下看 解决方案: 1. 打开自己的…

公式编辑器mathType中的公式在word中显示乱码的问题

1.问题描述 mathType中的公式在word中出现部分乱码的情况,如下分别为乱码和正常的公式 主要表现为,公式双击后按ctrls后word中的公式表现为正常。由于一篇文章同类公式均会乱码,一个个修改比较麻烦且可能遗漏,为此可以进行一次性…

Word中MathType公式乱码问题解决办法

Word中利用MathType输入公式有时会出现乱码问题: 解决方法如下: 1.Word中依次点击【文件】-【选项】-【高级】,下拉找到【显示文档内容】 2.将【显示域代码而非域值】前面的对勾去掉,点击确定

[Mathpix乱码]关于利用Mathpix粘贴Mathtype数学公式进Word造成乱码和问号问题的解决方案。

首先,确定你的word中有mathtype且已兼容 乱码问题首先分为两种 1.粘贴公式中出现黑色问号(彩色问号算第二种),或公式错位: 原始公式 粘贴后错误公式 解决方案,双击公式, 找到大概显示&#xf…

腾讯新研究登Nature子刊,让细胞与计算机直接“对话”,还能辅助医生精准治癌...

羿阁 发自 凹非寺量子位 | 公众号 QbitAI 腾讯把BERT方法用于单细胞注释技术,还登上了Nature子刊。 能辅助医生精准治癌的那种。 此次聚焦的单细胞RNA测序(scRNA-seq)技术,一直被称为生命科学领域的的革命性工具,对于“…

一文速览医学多模态进展

每天给你送来NLP技术干货! © 作者|杨锦霞 机构|中国人民大学高瓴人工智能学院 来自 | RUC AI Box 引言:目前,自然图像-文本的多模态预训练模型已经在各种各样的下游任务上取得了非常好的效果,但是由于…

模拟登录百度做一些事

最近写了一个程序,模拟登录百度进行一些操作,例如下载文库文档,网盘,修改个人信息等等,分析过程很痛苦,但是做完之后回头想想还是很意思的。代码有点乱,我不整理了,这里分享一下模拟…

微信网页PC端登录扫二维码登录

最近搞得PC端扫二维码登录,写了个控制器,把方法和注意事项都整理了一下,给大家共同学习下。 先说步骤吧: 1.注册微信开放平台https://open.weixin.qq.com,一定要清楚微信开放平台和微信公众平台是分别独立的&#xff0…

微信网页版登陆原理

微信网页版登陆原理 请求微信服务器返回一个会话ID 微信Web版本不使用用户名和密码登录,而是采用二维码登录,所以服务器需要首先分配一个唯一的会话ID,用来标识当前的一次登录,通过请求地址: https://login.weixin.qq.…

web网页登录

web登录验证 1.创建loginDemo项目 2.添加tomcat 3.在web目录下创建jsp文件login fail success UserData 4.修改web.xml设置首页 5.演示 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器…

百度登录界面

1 <!doctype html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>百度一下</title>6 <meta name"Keywords" content"关键字">7 <meta name"Descript…

pc端网页实现微信扫码登录

微信开发文档&#xff1a;https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 点击按钮&#xff0c;跳转到微信授权页面&#xff0c;会出现一个二维码。 //拉取授权页面 let APPID 网页应用的appid let REDIRECT_URI encodeUR…

电脑wifi只能微信聊天但是不能打开百度上网

问题描述&#xff1a;WiFi手机可以连接&#xff0c;电脑上也能连接&#xff0c;可以微信聊天&#xff0c;但是不能浏览器上网&#xff0c;显示域名解析错误。 背景:小编过了年回来上班后&#xff0c;发现公寓里的无线网在电脑上无法访问互联网&#xff0c;就非常的纳闷。首先我…

高级程序员和新手小白程序员区别你是那个等级看解决bug速度

IT入门深似海 ,程序员行业&#xff0c;我觉得是最难做的。加不完的班&#xff0c;熬不完的夜。 和产品经理&#xff0c;扯不清,理还乱的宿命关系 一直都在 新需求-做项目-解决问题-解决bug-新需求 好像一直都是这么一个循环。&#xff08;哈哈哈&#xff09;我觉得一个好的程序…