跳至主要内容

Amazon Lex 教程:AI 聊天机器人的新手指南

介绍如何使用 Amazon Lex 构建聊天机器人。学习如何设置与配置机器人、将其与后端服务配合使用,并部署到不同平台。
· 15分钟 阅读

使用 AI 探索

具备上下文感知能力的聊天机器人会跟踪用户先前的输入,并将其与最近的交互关联起来。这样,它们就能以对话式风格与用户交流,提升用户体验。Amazon Lex 是 Amazon Web Services(AWS)套件中的一款上下文感知聊天机器人。它于 2017 年发布,并在 2021 年推出了增强版本 Lex V2。

在本教程中,我将介绍 AWS Lex V2 的基本概念并演示其用法。我会讲解如何设置和配置 Lex、创建您的第一个 Lex 聊天机器人,以及如何与外部后端对接。还将概述如何将 Lex 集成到网站和消息应用等第三方平台中。

什么是 Amazon Lex?

Amazon Lex 是 AWS 提供的基于 AI 的对话引擎。Lex 接收语音和文本形式的用户输入。开发者指定对话流程,Lex 会基于此对用户输入进行响应并管理对话。随后,您可以将对话界面部署为语音机器人、Web 应用、聊天平台(如 Slack 或 Facebook Messenger)等。Lex 也用于构建 Amazon Alexa。

Lex 结合了两项基础功能:自然语言理解(NLU)和自动语音识别(ASR)。它让没有深度学习专长的开发者也能构建用于聊天机器人、虚拟助手等的对话界面。

作为亚马逊的产品,它可与其他 AWS 服务集成,例如:

  • Amazon Cognito(用于身份管理)
  • Amazon CloudWatch(用于服务监控)
  • DynamoDB(用于数据库后端)
  • Amazon Lambda(用于连接 Salesforce、HubSpot 等外部数据源)等。

这些集成让会话式 AI 服务更易于部署和扩展。

设置 Amazon Lex

本节将演示如何设置 Amazon Lex。

请注意,AWS 的用户界面经常更新。因此,说明和截图中的各部分布局与文字可能会随时间或地区而变化。

步骤 1:登录 AWS 控制台

我假设您已拥有 AWS 账户。如果没有,请按照AWS 注册页面上的说明创建新账户。

在本指南中,我们将使用 AWS 控制台来设置和使用 Lex。输入您的 AWS 凭证,登录 AWS Lex 控制台,进入 Lex 主页。

步骤 2:创建新机器人

上述操作将进入 Bots 首页(如下图)。此页面显示您已创建的机器人列表。

Amazon Lex Bots homepage.

Amazon Lex 机器人首页。

  • 在该页面选择 Create Bot。

接下来会进入新机器人的配置页面。它提供两种创建方式: Traditional 和 Generative AI。

Create a new bot in Amazon Lex.

创建新机器人。

我们希望学习设置和配置机器人的流程。因此请选择 Traditional 方式,并从空白机器人开始。

  • Bot name:为机器人设置名称和描述。本文将创建一个名为 “CabBookBot” 的简单机器人 用于预订出租车。
  • IAM permissions:选择合适的角色来管理机器人的授权与认证。
    • 如果您之前已创建过机器人,可从下拉菜单中选择现有角色。
    • 如果这是您的第一个机器人,选择 “Create a role with basic Amazon Lex permissions.”。
  • COPPA:如果该机器人面向儿童和未成年人,请指定其受《儿童在线隐私保护法》(COPPA)约束。这里选择 “No”。
  • Idle session timeout:为在对话中保持“上下文”,机器人必须记住用户先前的消息。如果用户长时间未响应,我们将假定其不再使用机器人,并重置上下文以服务新的用户。保持默认值即可。

可选的高级设置无需更改;直接进入下一部分。

您还必须设置机器人的语言,因为 Lex 机器人是基于自然语言处理(NLP)的。

  • 在本示例中,我们使用默认的 English (US) 语言。
  • 保留默认设置并选择 Done。

随后,您将进入 Intents 页面,我们将在下一部分进行配置。

创建了基础机器人后,我将讲解如何将其配置为我们需要的用例:预订出租车。

步骤 3:配置意图(intents)

顾名思义,意图代表用户的意图或对话目标。例如,用户可能想预订酒店或机票。每个机器人可以服务多个目标。

为每个意图提供若干示例文本(称为示例话述,sample utterances)后,Lex 使用NLP 来识别并根据这些话述将用户输入匹配到正确的意图。例如,出租车预订机器人可以有诸如 “I want to book a cab.”、“book me a cab from X to Y on this date.” 等示例话述。

在上一步的机器人创建页面选择 Done 后,您会进入一个页面,可以创建名为 NewIntent 的新意图。

在 Intent 页面:

  • 在顶部找到 Conversation Flow。它展示各对话步骤的流程与示例文本消息。
  • 将该意图的名称更新为更有意义的名称,如 “CabBookIntent”,并提供相关描述。

步骤 4:添加示例话述

Lex 需要为每个意图提供一些示例话述,以识别用户需求是否匹配当前意图。

  • 在 Intent 页面,向下滚动至 Sample utterances 部分。
  • 将编辑器切换为 Plain Text。
  • 添加若干示例话述,每行一条,例如:
    • I want to book a taxi
    • Book me a cab
    • I need to make a taxi reservation

Sample utterances in Amazon Lex.

示例话述。

  • 添加一个 Initial response,例如 “Ok, I will help you book a cab,” 以确认用户请求。

创建对话流程

Lex 机器人遵循预定义的对话结构。对话流程概述并给出对话各组件的规范。在本节中,我将说明如何设计对话,以便与用户沟通并获取完成其请求所需的信息。

步骤 1:添加槽位以捕获用户输入

机器人需要向用户询问相关信息。槽位包含机器人满足用户请求所需的信息。例如,出租车预订机器人会将出发城市、目的城市和出行日期作为槽位值接收。

Add slots to intents in Amazon Lex.

向意图添加槽位。

对于每个槽位,您需要指定以下参数:

  • Slot name:机器人使用此名称作为槽位值的占位符。例如,您可以将机器人的响应配置为 “You want to travel from {SourceCity}”,它将自动替换为用户输入的 SourceCity 槽位的值。
  • Slot type:与编程变量类似,Lex 槽位可以是多种类型。已有许多预构建的槽位类型,例如 AMAZON.City、AMAZON.Date 等。您也可以添加自定义槽位类型(稍后讨论)。
  • Prompt:提供一个文本模板,供机器人向用户询问(提示)每个槽位的值时使用。
  • 选择 Add Slot,添加以下槽位,并将其标记为必填:

槽位名称

槽位类型

提示语

SourceCity

AMAZON.City

Which city will you be traveling from?

DestinationCity

AMAZON.City

Which city will you be traveling to?

TravelDate

AMAZON.Date

On what date will you be traveling?

  • 再添加一些可直接捕获槽位值的话述。例如:
    • Book a cab on {TravelDate} from {SourceCity} to {DestinationCity}
    • Book a cab from {SourceCity} to {DestinationCity} for {TravelDate}

自定义槽位

内置槽位类型并不总能满足所有用例。例如,出租车预订服务可能需要一个槽位类型来表示用户想要的车型(紧凑型、两厢车、轿车、SUV 等)。

添加自定义槽位的方法:

  • 从左侧菜单进入 Slot types:
    • CabBookBot > Bot versions > Draft version > All languages > English (US) > Slot types。
  • 为新槽位类型添加名称(例如 CabType)和描述。
  • 选择两种槽位取值方式之一:
    • Expand:您提供少量示例值,Lex 将以此为例学习新的可能取值。例如,给定一些姓氏列表,Lex 会扩展并接受未显式列出的相近姓氏。
    • Restrict:槽位仅接受您提供列表中的取值,不会学习新值。

本例中,我们有若干预先确定的车型类型,因此将槽位取值限制为这些类型。

  • 您还可以为每个取值提供替代值。例如,对于车型,Limo 可作为 Limousine 的可接受值。

Custom slots in Amazon Lex.

自定义槽位。

  • 选择 Save Slot type。添加槽位到意图时即可使用新的槽位类型。

步骤 2:配置提示与错误处理

当用户对提示(询问槽位值)给出无效响应时,Lex 会重复提示。如果用户反复未能给出正确响应(如有效的城市名),会话将被终止。

请设置 Lex 在用户反复未能提供有效槽位值时(终止会话前)抛出错误消息:

  • 选择某个槽位,进入该槽位的 Advanced options。
  • 在高级选项窗口向下滚动至 Slot capture: failure response 部分。
  • 为无效输入提供合适的响应。例如,如果用户反复输入无法识别的城市,机器人可以回复:“Sorry, we don't serve that city.”

Error handling and failure response in Amazon Lex.

错误处理与失败响应。

所有机器人都有一个 FallbackIntent,当用户输入与现有意图不匹配时会被调用。由于该意图是默认调用,其话述不可自定义。

  • 为 FallbackIntent 指定一个有意义的结束响应并结束对话。

Amazon Lex closing response.

结束响应。

步骤 3:确认、履行与结束

在获取各槽位的合适值之后、履行用户请求之前,请先确认用户的意图。

  • 在 Confirmation 部分提供确认提示。
  • 注意确认对话处有一个小的切换开关。将其打开。

通常会在确认提示中包含槽位值。例如:“Please confirm (yes or no) that you want to make a booking from {SourceCity} to {DestinationCity} on {TravelDate}”。

  • 提供 Decline response,用于当用户对确认提示作出否定回应时。例如,“Okay, we won’t do this booking”。

Amazon Lex confirmation prompt.

确认提示。

履行(fulfillment)响应用于告知用户,机器人已开始处理其请求(预订出租车)。

  • 在 Fulfillment 部分,在成功履行请求后提供另一条消息。例如,“Okay, we have made this booking.”

结束响应是发送给用户的最后一条消息。例如,“Thank you for traveling with us. Have a safe trip!”。

  • 更新这些响应并选择 Save intent。

Amazon Lex fulfillment and closing responses.

履行与结束响应。

测试您的 Amazon Lex 机器人

至此,我们已创建机器人及其对话结构,现在可以进行测试了!

步骤 1:在 Lex 控制台中测试

  • 在 Intents 页面顶部找到 Build 和 Test 按钮。
  • Build 机器人。每次更改后都必须重新构建机器人。
  • 选择 Test 在 Lex 控制台中测试机器人。
  • 在弹出的聊天窗口中输入相关消息,并根据机器人的提示进行回应。

Testing the Amazon Lex bot.

测试 Amazon Lex 机器人。

常见配置错误

某些部分,如 Confirmation、Fulfillment 和 Closing response 原则上是可选的。要启用某个部分,请打开相应的切换开关。

在某些情况下,启用某个部分或响应会自动为该部分启用 Lambda 函数。如果某个部分的 Lambda 函数开关为“开”,但没有关联的 Lambda 函数,您将会遇到如下错误:

Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.

上述错误来自 Fulfillment 部分。要解决它,请到相关部分的 advanced settings 中取消勾选使用 Lambda 函数的选项。

另外一种类似错误发生在流程配置不当时。例如,在构建阶段可能出现如下错误消息:

'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.

要解决此错误,请进入 Advanced options 中的 Initial response。注意到 Dialog Code hook 开关为开启状态。然而此时我们尚未启用或配置用于初始化对话的 Lambda 函数。请关闭该 code hook,更新机器人后即可正常构建。

Amazon Lex advanced options for initial response.

Initial response 的高级选项。

步骤 2:语音测试(可选)

Lex 机器人默认同时支持文本与语音。

  • 在聊天窗口按下麦克风图标,通过语音交流。
  • 输入框中的占位文字会变为 “Listening…”。
  • 说出您的意图,例如 “I want to book a taxi.”。
  • 按下输入框右侧的勾选标记。
  • Lex 将短暂转写语音输入,并以音频进行响应。

Amazon Polly 可将文本转换为自然语音。它用于新闻播报、游戏、机器人等语音类应用,将文本合成为类人语音。自 2021 年起,Amazon Lex 支持 Amazon Polly 的 Neural Text-to-Speech(NTTS)。因此,Lex 机器人可以直接生成自然的语音回应。

配置机器人的语音:

  • 在机器人的主页选择 View languages。
    • 选择合适的语言。
    • 您也可以在左侧菜单的 All languages 下选择相关语言。
  • 在 Language details 部分选择 Edit。
    • 这会进入 Language 页面。
  • 在 Voice 部分,您可以试听多种语音并选择偏好的文本转语音声音。

使用 AWS Lambda 定义履行

在实际应用中,机器人需要与其他后端服务通信。例如,出租车预订机器人需要将行程信息发送到某个 API 端点并接收成功响应。Lambda 函数可以帮助实现这一点。

AWS Lambda 函数是一种编写服务端逻辑并在无需显式租用 VPS 或计算实例的情况下执行该逻辑的方式。

开始使用 Lambda 函数:

  • 访问 AWS Lambda 首页。
  • 选择 Create function。
  • 本例选择从头开始创建函数。
  • 选择 Python 3.x(撰写时为 3.13)作为语言,并选择 x86_64 作为函数运行的处理器架构。
  • 如果这是您的首个 Lambda 函数,请创建一个新角色。若已知某个现有角色具备合适的权限,也可直接使用。
  • 选择 Create function。
  • 在该 Lambda 函数页面的 Code 选项卡中输入函数代码。

下面展示一个简短的 Lambda 函数,用于在 Fulfillment 部分发送成功消息:

import json
import urllib.request

def lambda_handler(event, context):
    slots = event['sessionState']['intent']['slots']
    intent = event['sessionState']['intent']['name']

    if event['invocationSource'] == 'FulfillmentCodeHook':
        message = "Lambda has placed your reservation"
        response = {
            "sessionState": {
                "dialogAction": {
                    "type": "Close"
                },
                "intent": {
                    'name':intent,
                    'slots': slots,
                    'state':'Fulfilled'
                    }
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": message
                }
            ]
        }
        return response

将机器人配置为调用此 Lambda 函数:

  • 进入机器人的主页。在左侧菜单选择 Aliases(Deployment > Aliases)。
  • 默认情况下应已有名为 TestBotAlias 的别名。
    • 选择该别名。
  • 在别名页面的语言下,找到机器人的语言。本例为 English(US)。
    • 选择该语言。
  • 在语言页面找到 Lambda 函数部分。
    • 在 source 下选择您的 Lambda 函数名称。
    • 版本的默认选择为 $LATEST。保持不变即可。
  • 保存更改。

在本例中,我们希望在履行阶段使用 Lambda 函数:

  • 在 Intent 页面,进入 Advanced options 的 Fulfillment 部分。
  • 在 Fulfillment Lambda code hook 部分,勾选 Use a Lambda function for fulfillment。
  • 保存更改(选择 Update options)以更新履行选项。
  • 保存该意图。
  • 进入机器人的 Intent 页面,构建并测试。

现在,响应来自 Lambda 函数:

Testing the Lambda function integrated with the Lex bot.

测试与 Lex 机器人集成的 Lambda 函数。

部署您的 Amazon Lex 机器人

在创建并测试 Lex 机器人后,我们就可以部署了。部署是一个复杂主题,具体做法取决于具体用例。本节将概述几种常见的部署方法。

步骤 1:部署到 Web 或移动应用

可通过 API、SDK 或预构建库将 Lex 集成到 Web 和移动应用中:

  • CloudFormation:AWS CloudFormation 是一种基础设施即代码解决方案。它允许使用 YAML 文件将各类 AWS 资源打包、配置、部署与管理为完整产品。CloudFormation 提供集成 S3 存储桶、Lambda 函数、Lex 机器人等多种 AWS 产品的模板。使用 Lex YAML 模板文件 将 Lex 机器人配置为 CloudFormation 项目的一部分。
  • 网站集成:AWS 提供了一组Javascript 加载器文件和 AWS SDK,用于在网站中加载机器人。其中包括预构建的 Lex UI 文件和用于加载 Lex 机器人的加载库。机器人可作为独立网页或 iframe 集成到网站。
  • 移动原生应用:AWS Amplify 包含与各类移动与 Web 前端(如 ReactJS / React Native、NextJS、Angular、Android、iOS 等)集成的工具。Amplify 文档说明了如何配置 Lex 机器人以配合这些 SDK 使用。
  • Lex API:若需对交互和界面进行完全控制,您可以使用 Lex API。通过 API,您可以在保留应用端用户体验控制权的同时,在用户与机器人之间传递消息。Lex 提供两类 API:
    • Runtime API 用于用户交互,如上所述。
    • Build API 用于以编程方式构建和配置 Lex 机器人,而不是使用图形界面。

以下步骤概述了如何将聊天机器人部署为网页:

  • 使用 Lex Web UI Loader 库。该库会创建一个 ChatBotUiLoader 对象,其中包含 FullPageLoader() 和 IframeLoader 构造函数。它们的 load() 函数分别将机器人加载到页面或 iFrame 中。
  • 要在网页中加载机器人,请指定聊天机器人的配置:
    • Cognito 池 ID。请注意,您需要一个AWS Cognito 身份池来连接机器人。您可以在 AWS Cognito 控制台创建身份池。您必须将该 Cognito 身份池关联到 Lex 机器人。
    • Lex 机器人的名称与详细信息。
  • 使用 .load() 函数加载机器人。

下面的代码片段展示了在网页上部署 Lex 机器人的 JavaScript 函数大致结构:

 <!-- LexWebUi loader -->
  <script src="./lex-web-ui-loader.js"></script>
  <script>
    // instantiate the loader
    var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();

    var chatbotUiconfig = {
     cognito: {
       poolId: 
     },
     lex: {
        initialText: 'How can I help you?',
        botName: 'CabBookBot'
      },
      ui: {
        toolbarTitle: 'Cab Booking Lex Bot',
        toolbarLogo: ''
      },
    };

    lexWebUiLoader.load(chatbotUiConfig)
      .then(function () {
        console.log('chatbot UI loaded');
      })
      .catch(function (error) {
        console.error('chatbot UI failed to load', error);
      });
   </script>

步骤 2:与消息平台集成

您可以将 Lex 机器人与第三方消息服务(如 Facebook Messenger、Slack 和 Twilio SMS)集成。

本节将介绍如何将 Lex 与 Facebook Messenger 集成。开始之前,您需要:

  • 一个Facebook 开发者账户
  • 一个 Facebook 商业主页。请注意,Facebook 应用需要获得使用 Messaging API 与 Lex 通信的权限。只有经过 Facebook 审核并批准为已验证商业应用的应用才会被授予这些权限。

下面我将概述如何将 Lex 机器人与 Facebook Messenger 集成,使向您 Facebook 页面发送消息的用户可以收到来自机器人的回复。

  • 如果您还没有,请创建一个新的 Business 应用。
    • 在应用用例中选择 Other。
    • 选择 Business 作为应用类型。
  • 您可以为每个应用添加多种 Facebook 产品,如 Messenger、Instagram 等。将 Messenger 添加到应用,并选择 Set up。
  • 在 Messenger API Setup 部分:
    • 将您的 Facebook 商业主页连接到该应用。
    • 为该应用生成一个新 token(通过 Generate 按钮)。将该 token 复制到文本编辑器中。
    • 注意该消息:“To send and receive messages, request pages_messaging permission.” 选择 Request Permission 申请所需权限。
    • 如果您的应用尚未通过 Facebook 审核,请提交审核。
  • 在左侧菜单的 App Settings 中选择 Basic。
    • 在 App Secret 下选择 Show 并将密钥复制到文本文件中。

现在前往 Lex 控制台,选择您要与 Messenger 集成的机器人。

  • 在左侧树形菜单的 Deployment 下找到 Channel integrations。
  • 在 Create Channel 下选择 Add Channel:
  • 在 Platform 下选择 Facebook。
  • 在 Identity policies 下选择 KMS Key。
  • 在 Integration configuration 下:
    • 为该集成命名
    • 选择要与 Messenger 集成的 Lex 机器人的别名
    • 选择语言。
  • 在 Additional configuration 下:
    • 在 Alias 下,输入一个字符串以标识调用 Lex 的应用。稍后会用到该字符串。
    • 在 Page access token 下,输入您在 Facebook 中复制的访问令牌。
    • 在 App secret key 下,输入您在 Facebook 中复制的密钥。
  • 使用 Add 按钮创建新渠道。
  • 返回 Channel Integrations 页面并选择刚创建的渠道。
  • 复制 Callback URL 部分 Endpoint 下的 URL。

返回 Facebook 开发者控制台,打开您先前创建的应用。

  • 在左侧菜单的 Messenger 下,选择 Messenger API Settings。
    • 在 Callback URL 下输入您在 Lex 控制台复制的回调 URL。
    • 在 Verify token 下输入您在 Lex 控制台中输入的别名字符串。
    • Verify and save 更改。
    • 在 Webhooks 下,选择 Add subscriptions。在弹出窗口中选择 messages,然后点击 Save。

现在,您可以使用 Lex 机器人的示例话述向该 Facebook 页面发送消息,并获得相应回复。

步骤 3:将 Lex 与 AWS Lambda 连接以增强交互性

在上一节中,我们为履行部分编写了一个简单的 Lambda 函数。它只返回了一条文本消息:“Lambda has placed your reservation.” 实际上,我们应在真正完成请求后再发送成功消息。

例如,Lambda 函数将包含用户预订详情的请求发送到后端 API,由其完成预订,并根据 API 的响应向用户回复。

具体做法如下:

  • Lambda 函数中的 JSON 对象 slots 包含槽位值。使用代码美化工具研究其结构,以提取相应的值。
  • 下面的代码片段展示如何获取 SourceCity 的槽位值,并将其传递给处理预订的后端 API。请将该代码添加到 lambda_handler() 函数中:
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)

接下来展示如何在 Lambda 函数中发起 API 请求。本例使用 ASDFast 的虚拟 API 端点。该服务允许您向 API 端点发送 HTTP(S) 请求并接收逼真的响应。

  • 通过以下代码,我们向该端点发送 GET 请求。随后根据 GET 请求的响应状态码自定义机器人发送给用户的消息:
       res = urllib.request.urlopen(urllib.request.Request(
           url='http://asdfast.beobit.net/api/',
           headers={'Accept': 'application/json'},
           method='GET'),
           timeout=5)

       message_success = "Lambda has placed your reservation"
       message_failure = "Lambda could not place your reservation. Please retry."
       message = message_success if res.status == 200 else message_failure

完整的 Lambda 函数如下:

import json
import urllib.request

def lambda_handler(event, context):
    print("event - ", event)
    slots = event['sessionState']['intent']['slots']
    intent = event['sessionState']['intent']['name']

    print("slots - ", slots)
    source_city = slots['SourceCity']['value']['interpretedValue']
    print("source city - ", source_city)
    print("intent - ", intent)
    
    if event['invocationSource'] == 'FulfillmentCodeHook':
        print("FulfillmentCodeHook")    
        res = urllib.request.urlopen(urllib.request.Request(
            url='http://asdfast.beobit.net/api/',
            headers={'Accept': 'application/json'},
            method='GET'),
            timeout=5)
        
        message_success = "Lambda has placed your reservation"
        message_failure = "Lambda could not place your reservation. Please retry."
        message = message_success if res.status == 200 else message_failure
        #message = "Lambda has placed your reservation"

        response = {
            "sessionState": {
                "dialogAction": {
                    "type": "Close"
                },
                "intent": {
                    'name':intent,
                    'slots': slots,
                    'state':'Fulfilled'
                    }
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": message
                }
            ]
        }
        return response

构建 Amazon Lex 机器人的最佳实践

在讨论了 Lex 机器人的基本原理及其实践用途之后,本节给出设计机器人的一些最佳实践。

设计清晰简洁的对话

确保您的对话路径和槽位精准:

  • 每个意图应聚焦单一任务,每个槽位仅捕获单一变量对应的取值。
  • 避免提示文本过于冗长。保持对话简洁,并迅速达成预期结果。

这种做法可避免混淆用户并减少 Lex 的潜在误解。

使用合适的槽位类型与校验

机器人及其相关后端服务需要准确的用户需求信息。使用合适的槽位类型能确保这一点。

  • 一般而言,建议为常见数据类型使用内置槽位,例如日期使用 AMAZON.Date,城市使用 AMAZON.City 等。这些槽位类型经过大量测试,通常与各类应用兼容性良好。
  • 在特殊情况下,您可以设计自定义槽位类型。务必正确配置并充分测试。
  • 除使用合适的槽位类型外,还应校验用户是否已提供所有必填槽位对应的信息。这样可以让后端 API 顺利履行用户请求,并确保良好的用户体验。

启用多轮对话

让用户在一条消息中输入所有必要信息可能会令人不知所措,例如 “Book a trip for N people on Z date/time from X to Y in cab type T.”

  • 使用多轮对话以提升用户体验。与许多现代基于语言模型的工具类似,Lex 能在多轮对话中保持上下文,从而把先前的提示与响应与最近的交互关联起来。
  • 将复杂提示拆解为一系列简短问题,有助于改善对话流畅度。

监控并优化性能

对于生产环境中的机器人,务必监控其在多项指标上的表现,例如:

  • 对话总数。
  • 平均对话时长。
  • 每次对话的平均轮次。
  • 已识别与未识别话述的数量(及比例)。
  • Lambda 错误等。

使用这些指标评估用户交互与机器人的表现:

  • 在 Bot 页面左侧菜单选择 Analytics。
  • 访问 Conversation dashboard、 Performance dashboard 与 CloudWatch metrics,研究机器人的性能表现。

AWS CloudWatch 是 AWS 服务的监控工具。它可将多种性能指标实时整合到单一页面。利用这些指标来改进并微调机器人的性能。

结语

在本文中,我们探索了 AWS 的上下文感知聊天机器人服务 Amazon Lex V2。我们演示了构建基础机器人的流程,配置其与用户交互,并使用 AWS Lambda 将其与后端 API 集成。此外,我们还讨论了最佳实践与部署选项,包括将机器人嵌入网站或 Facebook 页面。

在持续学习 AWS 服务的过程中,您不妨通过以下课程扩展您的知识:

借助这些资源,您将能够构建、保障与优化基于 AWS 的应用程序,包括由 Amazon Lex 驱动的聊天机器人!

FAQs

Lex 是否与其他 AWS 服务集成?

是的,Lex 可与 Lambda、S3、CloudWatch 等服务集成。这让您能够增强机器人的功能、将其与其他产品集成并监控其性能。

Lex 是否同时处理语音与文本?

是的,Lex 默认即可处理语音与文本输入。Lex 支持多种用于语音交互的声音。您还可以使用 AWS Polly 合成语音并将音频文件发送给 Lex。

我可以为 Lex 机器人使用自定义用户界面吗?

是的,Lex 提供运行时 API,可将用户输入传递给机器人并接收其(机器人的)响应。因此,Lex 机器人可以作为自定义 UI 的后端。

可以不使用 Lambda 函数而仅用 Lex 吗?

原则上可以。您可以完全在 Lex 内设计对话。实际上,机器人需要与其他后端 API 服务对接以履行用户请求(例如预订票务)。您需要通过 AWS Lambda 与外部服务对接。

AWS Lex 是否可以训练?

在一定程度上可以。Lex 的 NLU 引擎可以识别与示例话述相似的用户输入。它也可以基于少量样本扩展某个槽位类型的有效取值。但不要期望其可训练性达到 LLM 的水平。Lex 旨在处理有限的、面向任务的交互,而非展开长时对话。

Arun Nanda

作者

Arun Nanda

Arun 曾是一位初创公司创始人,喜欢构建新事物。他目前正探索人工智能的技术与数学基础。他乐于分享自己的所学,因此会写作记录。

除了 DataCamp,您还可以在 Medium、Airbyte 和 Vultr 阅读他的文章。

主题