制作商品客服机器人

  • 前期准备
  • 背景
  • 什么是对话机器人
  • 思路简介
  • 连接数据库
  • 关键信息匹配
  • 正则匹配对应问答


前期准备

为实现本项目,需提前安装好python,可到Anaconda官网下载合适的版本;安装配置好MySQL,可到MySQL官网下载合适的版本。

背景

随着智能技术的发展,越来越多的客服咨询都开始交由对话机器人解决。智能问答系统实现的方法有很多,本篇文章介绍一个简易的商品智能问答机器人。

什么是对话机器人

首先想和大家分享一下对话机器人的概念。对话机器人是模拟人类对话聊天形式并提供服务的程序。对话机器人之所以被广泛应用,是因为名称中的“对话”和“机器人”分别为用户和服务提供方提供了价值。

先说说“对话”,对于寻求服务的用户,不同于查看网站或阅读,对话机器人模拟了自然的交互方式。不管是钉钉、微信这样的即时聊天工具,还是天猫精灵的语音交互硬件,都在模拟一种有对话感的沟通。而这种沟通学习成本很低,效率却很高。并且聊天工具所保留的聊天记录也让信息的追溯更加方便。

再说说“机器人”,对于服务提供方,对话机器人能“以一敌百”永不停歇地替代人工完成了部分咨询的工作,这能大大降低咨询排队的现象,并缓解服务压力。同时还可以在人工下班的时候延续服务。还有一点,在人工成本越来越高的今天,对话机器人真的可以为服务提供方省下大量的成本。

思路简介

首先将csv文件导入数据库中用sql语句获取相关数据信息并将其封装成函数,然后定义机器问答的主体函数,对于问题的识别可以利用正则表达式来进行分析,结合现实情况选择答案,最后在执行时可以设置循环语句,并且在每次回答间隔1s方便进一步做并发处理。大致流程图如下:




数据导入数据库

关键信息匹配

正则匹配对应问答


连接数据库

为方便在进行问答时才访问数据库获取相关信息,将原有的csv文件导入至数据库中,并使用cursor(),方法获取操作游标。

import pymysql
import pandas as pd
import sqlalchemy as sqla
from sqlalchemy.orm import sessionmaker
import time
import re

#导入数据
data = pd.read_csv(r'F:\NLP\goods.csv',encoding=('gbk'))
data.head()

db = sqla.create_engine('mysql+pymysql://root:123456@localhost/robot?charset=utf8mb4')
#导入表格到数据库中
data.to_sql('shopping',db,index=False,if_exists='append')
conn = pymysql.connect(host="localhost",user="root",password="123456",database="robot",charset='utf8mb4')
cursor = conn.cursor()#cursor游标

关键信息匹配

分别对发货时间、发货地址、商品单号和商品状态进行函数定义,执行相关sql语句对数据库信息进行提取

def start_time():#发货时间
    starttime_sql = "SELECT START_RIME FROM shopping"
    try:
        cursor.execute(starttime_sql)
        result1 = cursor.fetchall()
        print("我知道您很急但你先别急,您的货品将于%s进行发货,请耐心等待哟" % result1[0])
    except:
        print("抱歉亲亲,这边暂时无相关数据,正在为您接通人工客服")
        conn.close()

def start_local():#发货地址
    startlocal_sql = "SELECT START_LOCAL FROM shopping"
    try:
        cursor.execute(startlocal_sql)
        result2 = cursor.fetchone()
        print("亲您所购买的宝贝计划从%s发出~不要着急哟" % result2[0])
    except:
        print("呜呜呜,机器客服暂时没有相关数据哟,你可以尝试问问人工客服")
        conn.close()
      
def ID():#商品单号
    id_sql = "SELECT ID FROM shopping"
    try:
        cursor.execute(id_sql)
        result3 = cursor.fetchone()
        print("单号来咯%s" % result3[0])
    except:
        print("呜呜呜,机器客服暂时没有相关数据哟,你可以尝试问问人工客服")
        conn.close()

def state():#商品状态
    state_sql = "SELECT STATE FROM shopping"
    try:
        cursor.execute(state_sql)
        result4 = cursor.fetchone()
        print("别急你的快递已到达%s" % result4[0])
    except:
        print("快递已经在路上了,亲亲稍安勿躁")
    conn.close()

其中,在函数定义里加入了try-except异常捕捉部分,当问句发生错误或者在数据库中无法找到对应数据时,可以让客户联系人工客服。

正则匹配对应问答

首先定义一个空字符串str1,用于存放客户输入的问题,再通过写一个问答函数的形式,使用if和else语句,将客户提出问题的字符串str1与每种可能的情况进行正则匹配,若匹配上,则可给出相应回答,若不匹配,则引导客户转人工客服服务。

str1 = ""
def answer_robot(str1):
    if re.search(r'.*退货(.*)?',str1):#涉及到退货问题
        str2 = "购买七天内可无理由退款哟"
    elif re.search(r'.*状态(.*)?',str1):#涉及到商品状态的问题
        str2 = state()
    elif re.search(r'(\w)?[编号|单号|货号]\w',str1):#涉及到商品单号的问题
        str2 = ID()
    elif re.search( r'(\w)?[哪里|发货地]\w',str1):#涉及到商品发货地的问题
        str2 = start_local()
    elif re.search( r'(\w)?[时间|时候]\w',str1):#涉及到商品发货时间的问题
        str2 = start_time()
    elif re.search( r'.*快递(.*)?',str1):#涉及到快递的问题
        str2 = "默认发中通快递,其余快递需要补差价哟"
    elif re.search(r'.*退款(.*)?',str1):#涉及到退货问题
        str2 = "亲亲再考虑一下呗"
    elif re.search(r'.*疫情(.*)?',str1):#涉及到退货问题
        str2 = "疫情不影响发货也不影响快递运行时间噢"
    elif re.search(r'.*收货地址(.*)?',str1):#涉及到退货问题
        str2 = "可以的噢,你告诉我就好了"
    elif re.search(r'.*原装(.*)?',str1):#涉及到退货问题
        str2 = "是的呢,支持各大平台验货,假一赔三"
    elif re.search(r'.*优惠(.*)?',str1):#涉及到退货问题
        str2 = "这已经是最低价啦"
    elif re.search(r'.*包邮(.*)?',str1):#涉及到退货问题
        str2 = "全场包邮哟,手慢商品就没了哟"
    elif re.search(r'.*货到付款(.*)?',str1):#涉及到退货问题
        str2 = "亲亲暂不支持货到付款哟"
    elif re.search(r'.*投诉(.*)?',str1):#涉及到退货问题
        str2 = "亲亲赚钱不易,麻烦给个好评"
    elif re.search(r'.*现货(.*)?',str1):#涉及到退货问题
        str2 = "是的呢,马上就可以发货了,稍等"
    elif re.search(r'.*尺码(.*)?',str1):#涉及到退货问题
        str2 = "亲亲这是尺码推荐表,您参考一下"
    elif re.search(r'.*花呗(.*)?',str1):#涉及到退货问题
        str2 = "可以的呢"
    elif re.search(r'.*一致(.*)?',str1):#涉及到退货问题
        str2 = "那肯定啊,必须一致"
    elif re.search(r'.*打折(.*)?',str1):#涉及到退货问题
        str2 = "此商品不参与折扣哟"
    elif re.search(r'.*学生价(.*)?',str1):#涉及到退货问题
        str2 = "亲亲送你一个优惠卷,别跟别人说噢"
    elif re.search(r'.*运费险(.*)?',str1):#涉及到退货问题
        str2 = "有的呢,放心啦亲"
    elif re.search(r'.*价格(.*)?',str1):#涉及到退货问题
        str2 = "商品都有标价的呢"
    else:
        str2 = "请稍等,正在为您接通人工客服"
    return str2
    
def main():
    while True:
        str1 = input(":")
        str3 = answer_robot(str1)
        time.sleep(1)
        print(str3)

至此可完成简单的一个客服机器人。