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 远程连接对话测试
版权归原作者 TiAmo zhang 所有, 如有侵权,请联系我们删除。