亚马逊AWS官方博客

基于 Amazon Connect 和 Amazon Lex 构建智能服务机器人助手

智能服务机器人需求背景简介

人工智能从诞生以来,理论和技术日益成熟,尤其近几年在客户服务中心领域的应用更是飞速增长,客服中心的数字化转型已经成为必然趋势。许多客服中心正在逐步以科技创新为核心,将数字化转型和科技赋能业务作为突破口,积极推进人工智能、大数据等新技术与客户服务业务的深度融合,着力以数字化、智能化、精益化为目标创新发展新动能。

企业用户也在探索数字化转型在客户服务领域的有效落地路径,需要结合智能路由、流程机器人、智能语音分析以及扩展智能技术在客户服务业务中的应用,实现客户服务业务处理效率和服务体验的提升。

本文基于 Amazon Connect 和 Amazon Lex、AWS Lambda 等服务构建企业客服中心和智能服务机器人助手的原型,助力企业客户快速了解和部署智能服务机器人。

Amazon Connect 简介

Amazon Connect 是一个全渠道的云联络中心。只需执行几个步骤,便能设置联系中心,添加任意位置的客服,并开始与客户接洽。

您可以使用全渠道通信为客户创建个性化体验。例如,您可以根据客户偏好和预计等待时间等因素动态提供聊天和语音联系。同时,客服可以从一个界面来便捷地处理所有客户。例如,他们可以与客户聊天,在任务传送给他们时创建或响应任务。

Amazon Connect 是一个开放平台,您可以将其与其他企业应用程序(例如 Salesforce)集成。您可以将 Amazon Connect 与其他 AWS 服务一起使用,为您的客户提供创新的新体验。

Amazon Lex 简介

Amazon Lex V2 是一项 AWS 服务,用于使用语音和文本为应用程序构建对话界面。Amazon Lex V2 提供自然语言理解(NLU)和自动语音识别(ASR)的深度功能和灵活性,因此您可以通过逼真的对话式交互来构建极具吸引力的用户体验,并创建新的产品类别。

Amazon Lex V2 使任何开发人员都能快速构建对话机器人。使用 Amazon Lex V2,无需深度学习专业知识。

Amazon Lex V2 提供与 AWS Lambda AWS 平台上的许多其他服务的集成,包括亚马逊 Connect、Amazon Comprehend 和 Amazon Kendra。与 Lambda 的集成使机器人可以访问预先构建的无服务器企业连接器,以链接到 Salesforce 等 SaaS 应用程序中的数据。

AWS Lambda 简介

AWS Lambda 是一项计算服务,可使您无需预配置或管理服务器即可运行代码。

Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量调配和弹性伸缩和记录。使用 Lambda,您只需在 Lambda 支持的一种语言运行时系统中提供代码。AWS Lambda 支持 Node.js,JAVA,Python,Go 等常见的主流开发语言。

构建呼叫中心智能服务机器人

方案架构图

步骤一、基于Amazon Lex 构建对话机器人

先来了解一下 Amazon Lex 的几个最基本的概念:

Bot:机器人,用来执行自动任务,例如订购披萨、预订酒店、订购鲜花等。Amazon Lex V2 机器人由自动语音识别(ASR)和自然语言理解(NLU)功能提供支持。

Language: Amazon Lex V2 机器人可以用一种或多种语言进行对话。每种语言都独立于其他语言,您可以将 Amazon Lex V2 配置为使用本地单词和短语与用户交谈。

Intent:意图,代表用户想要执行的操作。您创建自动程序以支持一个或多个相关目的。例如,你可以创建一个订购披萨和饮料的意图。

Slot:插槽,Intent 可能会需要插槽或参数。您可以添加插槽作为意图的一部分。在运行时,Amazon Lex V2 会提示用户输入特定的插槽值。用户必须提供所有必需插槽的值,Amazon Lex V2 才能实现意图。

Alias:别名。别名是指向机器人特定版本的指针。使用别名,您可以更新您的客户端应用程序正在使用的版本。例如,您可以将别名指向您自动程序的版本 1。当您准备更新自动程序时,您可以发布版本 2,然后更改别名以指向新版本。由于您的应用程序使用的是别名而不是特定版本,因此您的所有客户端无需进行更新即可获得新功能。

机器人开发步骤:

1. 创建一个 Amazon Lex 对话机器人

可以从已有的模版创建一个对话机器人有助于了解 Amazon Lex 的开发,本文中点击“Create a blank bot”,创建一个新的空白机器人。

在表单中输入机器人名称;

IAM Permission 选择 create a role with basic Amazon Lex permissions,会为 Lex 机器人生成一个新的 IAM 角色;

Children’s Online Privacy Protection Act 是只对话机器人是否遵从美国儿童在线隐私权保护法,这里可以选择 No;

Idle session timeout 是会话超时时间,默认 5 分钟;

之后点击橙色的“Next”按钮。

这里的配置是为 Lex 机器人选择支持的语言,Lex 支持包括中文、英文、广东话在内的多种语言。如前面的概念中所述,每种语言的开发配置都独立于其他语言。本文中先选择一个语言,例如 Mandarin(中文普通话);

语音播报和置信分数用默认值就可以,点击橙色的“Done”按钮完成机器人的创建。

2. 为 Lex 机器人增加意图

点击机器人名称,可以看到左边的菜单,包含了机器人的版本、语言、每种语言的意图。点击 Intents 进入意图列表,可以通过左边的“Add intent” → “Add empty intent”按钮增加新的意图。

在意图界面中,比较重要的有下面几个板块:

1)Sample utterance:代表触发意图的语料,即用户说出 Sample utterance 中的词语时,就会进入相应的意图流程。如下图所示,当用户发送“下订单”、“购物”等词语,就会触发订单的 order 意图。通过 Add utterance,也可以继续增加触发的词语。同时 Amazon Lex 还附带了语意理解的能力,用户发送与 Sample utterance 词语中意思相近的词,也能够触发相应的意图。

2)Initial Response:初始应答环节,在 Lex 中机器人与用户的每一步交互都可以对用户发送响应来增强互动。本文中为了交互的简洁,Initial Response 不作修改,也就是机器人在处理业务之前不进行回复。

3)Slots:机器人要进一步了解的信息可以作为插槽等待用户输入,例如在购物的场景中,机器人需要知道用户需要购买的商品是什么,在 Slots 中增加一个 slot,例如命名为 order_sku,机器人的响应话语是“请问您要购买什么商品?”,slot type 可以定义用户输入数据的类型,例如要求输入城市、电话号码等,FreeFormInput 是内置的 slot type,代表可以输入任何信息。如果有需要定义格式的特殊信息,也可以自己定义 slot type,本文中不再赘述。

4)Confirmation:确认环节,在执行意图之前提醒用户再次确认是否需要执行,本文中不需要确认环节,直接点击“Active”按钮置灰就可以关闭确认环节。

5)Fulfillment:执行环节。对话机器人已经获取了所有需要的信息,开始进行意图的执行操作。

6)Closing response,意图执行完毕,告知用户此次对话已经结束。本文中不需要此环节,同样可以点击“Active”按钮关闭。

步骤二、通过设计 AWS Lambda 实现业务处理能力

Amazon Lex 是对话机器人服务,可以实现对话机器人与用户的智能交互,但没有执行后台任务的功能。因此在智能服务机器人的方案中,我们需要使用 AWS Lambda 来完成后端业务处理的工作。

AWS Lambda 开发步骤:

1)创建 AWS Lambda 函数

在 Lambda Functions 的界面中点击“Create function”按钮创建函数

在创建 function 的界面中,选择“Author from scratch”创建一个空白的函数;

填写 Function name;

Runtime 选择 Python 3.10;

Architecture 可以选择 x86 或 arm64,本文中的函数不需要有特殊的依赖,可以选择 arm64;

Permission 选择“Create a new role with basic Lambda permissions”;

点击“Create function”按钮创建函数。

2)开发业务函数

以上一节描述的购买商品为例,本文通过 python 的 boto3 库调用 dynamodb 中的订单表,在表中增加一条购买记录。读者也可以使用自己的代码对云端的 RDS 进行增删改查等操作。如何创建数据库表等基本操作本文不再赘述。

具体代码如下:

import json
import boto3
def lambda_handler(event, context):
    intent = event['sessionState']['intent']['name']
    if intent == 'order':
        order_sku = event['sessionState']['intent']['slots']['order_sku']['value']['originalValue']
        order_count = boto3.resource('dynamodb').Table('order').scan(
            Select = 'COUNT'
        )['Count']
        order_id = 'order' + str(order_count+1).zfill(3)
        dynamodb = boto3.client('dynamodb')
        order = dynamodb.put_item(
            TableName = 'order',
            Item = {
                'id': {
                    'S': order_id
                },
                'sku': {
                    'S': order_sku
                },
                'status': {
                    'S': '已预订'    
                }
            }
        )    
        
        return {
            'sessionState': {
                'dialogAction': {
                    'type': 'Close'
                },
                'intent': {
                    'name': intent,
                    'state': 'Fulfilled'
                }
            },
            'messages': [
                {
                    'contentType': 'PlainText',
                    'content': '已经预订商品' + order_sku + ',订单号是' + order_id
                }
            ]
        }

这段函数的 return 会把执行结果返回给 Amazon Lex,Amazon Lex V2 对返回格式有具体的要求,可以参考下面的链接:

https://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/lambda-response-format.html

3)在 Amazon Lex 中引用 AWS Lambda 函数

在 Amazon Lex 界面中,找到机器人的 Deployment→Alias 页面,点击“TestBotAlias”进入(真实环境可以发布为正式版本并在不同版本间迭代,本文中仅用开发版本作为示例)。

在 Alias 中点击相应的语言,本文点击“Mandarin(PRC)”:

在 source 中选择上一节开发的 AWS Lambda 函数,版本选择$LATEST,并点击“Save”按钮保存。

步骤三、验证 Amazon Lex 智能服务机器人

在 intents 的界面中,点击“Build”按钮进行构建,等待几分钟后,出现绿色的提示条,表示对话机器人已经构建成功。

点击“Test”按钮进行机器人的测试,在弹出来的对话框中,输入提示词,本文中的购物提示词并没有“买东西”,Amazon Lex 仍然可以基于语意理解,将“买东西”正确触发 order intent。

步骤四、基于 Amazon Connect 构建全渠道的联络中心平台并集成智能服务机器人

Amazon Connect 构建步骤

1、创建 Amazon Connect 实例

Amazon Connect 用户默认可以存在 Connect 实例中,高级配置可以用 Amazon Directory Services 用户目录或者客户自定义的 SAML 2.0 统一登录平台。

访问 URL 可以随意填写,但不能与其他用户的已经存在的 URL 重复。

设置一个 Amazon Connect 管理员,如果不设置管理员,也可以用 IAM 帐号作为管理员登录进行管理。

呼叫记录都保存在 S3 中,默认设置就可以,高级设置可以自己定义存储桶和加密配置。

创建实例后,在实例的 Flows 页面,把开发好的智能服务机器人添加到 Lex 区段中。

3、部署智能服务机器人的 Contact Flow

用管理员帐号登录 Access URL 地址,或者直接用 IAM 用户登录 Emergency access连接。

点击左边的路由图标,选择“流”,然后点击“创建流”按钮。

点击左边的三角按钮,选择“导入”,然后导入“contact_flow_demo”文件,文件可以从 https://github.com/eq9684/customer_service_bot/blob/main/contact_flow_demo 下载。

导入成功后可以看到一个简单的队列,然后点击“发布”:

4、测试智能服务机器人

在 Amazon Connect 控制面板页面中,点击“测试聊天”:

在测试聊天页面中,点击“测试设置”,在弹出的窗口中,联系流选择之前导入的 contact_flow_demo 联系流,并点击“应用”。

点击页面下方的图标开始测试:

与 Lex 中测试的结果相同,可以输入“买东西”,进行购物的流程。

步骤五、部署托管的 S3 页面和 CloudFront 作为前端页面

截止到步骤四,已经成功完成了呼叫中心的基本配置,最后我们需要部署一个前端页面作为面向终端用户的交互窗口。

把 Amazon Connect 呼叫中心发布到网页渠道,只需要在 Amazon Connect 的控制面板中,点击“自定义聊天构件”

点击左侧的“编辑“,选择聊天构件的样式和联系流,再编辑右上方的“域”,把需要允许部署呼叫中心的域名添加到域中,就会自动生成相应的聊天构件代码。

复制生成的代码,插入到需要部署聊天构件的网页中就可以在网页加载智能服务机器人了。

发布后的 demo 页面如下图:

发布前端网页还涉及到 SSL 证书、CloudFront、ALB 负载均衡器等相关服务,与 Amazon Connect 和 Amazon Lex 等关联度不高,由于篇幅所限,这里就不逐项细述了。

本文所有的原始代码可以在下面的链接下载:

https://github.com/eq9684/customer_service_bot

本篇作者

王华

亚马逊云科技解决方案架构师。有 20 年从事软件架构、应用开发、系统集成等工作经验。擅长 Web 领域应用系统架构设计和开发运维,即时通讯软件、UC、企业 IT 服务台和云呼叫中心系统的开发部署工作,从事过多个大型企业呼叫中心项目的设计、开发与部署。目前专注于制造业和呼叫中心领域的研究和方案推广。