使用 Amazon Lex 服务创建聊天机器人





5.00/5 (24投票s)
使用 Amazon Lex 服务创建实时聊天机器人,并将机器人部署到 Facebook Messenger。
目录
- 前言
- 引言
- 设置 AWS 账户
- 使用 Amazon Lex 创建机器人
- 测试机器人
- AWS Lambda 函数
- 槽位 (Slots)
- 测试槽位
- 错误处理
- 将聊天机器人部署到 Facebook Messenger
- Facebook 上的实时聊天机器人
- 结论
- 历史
前言
本文是对 CodeProject 的 Slack API 挑战 的投稿。该比赛于 2019 年 1 月 7 日正式开始,将于 2019 年 3 月 7 日结束。
引言
毫无疑问,Slack 是当今每个开发人员都需要并且以新方式流行的平台。
易于使用和管理,不仅如此,我们还可以创建自己的 Slack 应用并为其添加许多自定义功能。您可以在 本文 中了解如何创建自己的 Slack 应用。它非常简单,创建第一个应用可能只需要 20 分钟。
在本文中,我们将讨论如何使用 Amazon Lex 服务创建实时聊天机器人,并将机器人部署到 Facebook Messenger。文章的读者不需要具备机器人创建的先验知识,因为文章将通过解释性图片一步一步地演示机器人创建和部署过程。相信我,创建自己的机器人并看到它工作是很有趣和令人兴奋的,这比仅仅想想创建机器人更有意义。我们将设置一个 AWS 账户来利用 Lex 服务,并设置一个 Facebook 开发者账户,以便在您自己的 Facebook 页面上部署机器人并使其运行。让我们直接开始教程。
设置 AWS 账户
- 访问 aws.amazon.com,如果您有账户,请使用您的电子邮件地址登录,否则请创建新账户。
- 创建新账户时,请提供相关详细信息,例如电子邮件地址和密码。
- 在下一步,您可以选择创建 **个人** 类型账户,并在此处提供所需信息。
- 下一页是付款信息页面,您需要在此处提供付款方式及其详细信息。不用担心,当您输入卡详细信息时,它会扣除少量金额,即 2 印度卢比,该金额将在卡成功验证后退还到您的账户。
“使用 Amazon Lex,您只需按使用量付费。您将根据机器人处理的文本或语音请求数量收费,每个语音请求收费 0.004 美元,每个文本请求收费 0.00075 美元。例如,1,000 次语音请求的费用为 4.00 美元,1,000 次文本请求的费用为 0.75 美元。您的使用量以“处理的请求”计量,每月月底汇总这些请求以生成您的月度账单。
您可以免费试用 Amazon Lex。从开始使用 Amazon Lex 之日起,在第一年内,您每月可以免费处理最多 10,000 次文本请求和 5,000 次语音请求。 在此处 阅读有关 Lex 定价 的更多信息。
- 成功进入控制台后,请选择区域 **美国东部 (弗吉尼亚北部)**。
使用 Amazon Lex 创建机器人
在设置好 AWS 账户后,就可以使用 Lex 服务创建机器人了。在开始之前,让我们先熟悉一下术语。
机器人是已部署的顶级组件,是一种容器。我们将开发的机器人将包含一个或多个意图。每个意图代表机器人可以理解并执行操作以实现它的一个不同主题。
槽位 (Slot) 是我们定义的,用于从机器人用户那里获取实现意图所需的信息。
Lambda 函数是一个执行代码的地方,不需要您预置或管理服务器,也就是无服务器。Lambda 支持多种编程语言,并且是您将机器人与其它系统集成的途径。您的 AWS 账户每月包含 100 万次免费请求,以及最多 320 万秒的总执行时间。请访问 AWS Lambda 定价页面以获取更多详细信息。
- 在控制台中,搜索服务类型 Lex,如下图所示:
- 您将看到 Amazon Lex 登陆页面。点击 **开始** 以开始创建机器人。
- 我们可以尝试使用现有的机器人示例,也可以创建自己的机器人。由于我们是从头开始创建机器人,因此请选择自定义机器人选项并为其命名。
- 提供机器人名称等详细信息。对于输出语音,请选择 **无**,因为这将仅是一个基于文本的机器人。将超时设置为 5 分钟。IAM 角色已为我们创建,因此无需在此行进行任何操作。对于 COPPA,我们可以选择 **否**。
- 完成后,您将看到 BotService 页面。现在是时候创建意图了,因为机器人只是一个容器,它需要意图。点击创建意图按钮来创建一个新意图。
- 在弹出窗口中,它显示了搜索现有意图、创建新意图或导入意图的选项。我们将选择 **创建意图** 选项来创建一个新意图。
- 为意图指定一个唯一的名称。在本例中,它是“**OperatingHours**”。此意图的目的是告知用户公司(用户正在寻求信息)的营业时间。例如,当您通过聊天部分联系公司的联系人时,机器人会欢迎您,如果用户问“你们的营业时间是什么时候?”,那么机器人应该回复公司的营业时间并告知用户。
- 添加意图需要执行更多操作。例如,示例话语 (Sample utterances),比如用户可能问机器人的问题:“你们的营业时间是什么时候?”,“你们几点开门?”,“你们几点关门?”等等。请注意,我们不必提供所有可能的示例。内置的语言模型将识别类似短语。接下来是 Lambda 初始化和验证。这是我们可以链接到 AWS Lambda 函数中的代码,以验证用户输入(如果我们正在收集作为意图一部分的信息)。槽位 (Slots) 是我们从用户那里收集数据以传递到验证或完成的方式。对于此意图,我们不需要用户提供任何特定数据,因此我们不会定义任何槽位。
- 提供一些示例话语,如下图所示:
- 确认提示 (Confirmation prompt) 用于在机器人完成意图之前,与用户进行二次确认,以确保我们已正确理解用户的所有信息。因此,启用确认提示以查看其工作原理。由于我们没有从用户那里收集任何数据,因此请提出一个简单的问题。如果用户回答“是”,他们将继续执行完成操作。如果他们回答“否”,则会在取消框中显示我们放入的消息,并且用户将退出意图。
- 最后,完成 (Fulfillment) 是机器人执行结果操作的方式。通常,这是通过调用 AWS Lambda 函数来执行适当的业务逻辑。还有一个将参数返回给客户端的选项。目前,您可以选择该选项,因为我们的机器人没有 Lambda 函数。
- 现在,通过如下图所示的 **构建** 选项来构建机器人:
- 单击 **构建** 后,系统会提示您在机器人构建过程中继续测试它。点击 **构建**。
- 成功构建后,将显示如下图所示的提示:
测试机器人
我们的机器人第一个版本现在已经创建,我们可以对其进行测试。
- 页面右侧可以看到测试最新机器人的选项。现在开始输入吧 😊。
- 如果您输入的任何内容不是意图中定义的示例话语,机器人将无法识别,并会给出定义的响应,如下图所示:
- 问机器人一个在示例话语中定义的问题。例如,“你们的官方营业时间是什么时候?”,它会回复我们在意图中提供的确认消息。
- 一旦您说 **是**,它就会导航到完成意图,但由于我们没有提供任何 Lambda,它会显示“准备好进行完成”。
- 再次询问相关问题。
- 现在输入 **否**,我们将看到机器人回复“**好的,谢谢!**”,即我们在确认提示中为“否”提供的文本。
AWS Lambda 函数
让我们启用机器人以使用 Lambda 函数,即机器人执行的定义的业务逻辑,用于完成(即,当用户输入“**是**”时)。在意图的 **完成 (Fulfillment)** 部分,选择 **AWS Lambda 函数**。这将要求您提供一个 Lambda 函数,但由于我们还没有,所以在使用它之前需要先创建它。
- 转到服务搜索选项并输入 Lambda。您将看到建议选项,选择 Lambda,如下图所示:
- 您将进入 AWS Lambda 页面。点击 **创建函数** 来创建一个新的 Lambda 函数用于完成。
- 选择从头开始编写的选项,如下图所示:
- 为函数命名。您可以选择任何您熟悉的运行时来编写代码。我在这里选择 **Python 3.7** 来编写简单的 Python 代码并返回结果。
- 点击 `创建` 函数,您将看到编写代码的选项。选择“**内联编辑代码**”。处理程序 (Handler) 详细信息已预先填充。例如,“`函数名.处理程序名`”。编写函数以返回文本“`我们的营业时间是工作日的上午 9 点到下午 6 点 IST`”,如下图所示:
- 通过点击 **测试** 按钮来测试函数实现,如果一切正常,测试执行将显示成功结果。
- 现在返回意图,在选择 AWS Lambda 选项的完成部分,您会看到最近创建的函数可用。选择该函数。
- 再次构建您的机器人。
- 现在,当您测试机器人并在机器人确认后输入“是”时,这意味着需要调用完成操作,机器人会返回我们在 Lambda 函数中作为返回文本提供的文本。因此,我们的完成操作和 Lambda 函数工作正常。
槽位 (Slots)
在本节中,我们将看到如何使用槽位来收集客户信息。
- 您可以添加一个新意图,提示客户与客服代表通话。
- 添加新意图并将其命名为 `CustomerInformation`。
- 您可以提供示例话语,如“**联系客服代表**”,“**与人工通话**”等。
向下滚动到槽位部分,提供槽位名称、类型和提示。Lex 服务提供了各种类型的槽位,我们将使用它们。
- 选择槽位名称为 name,槽位类型为 `AMAZON.person`,提示为“**请问您叫什么名字?**”。您可以通过查看下拉菜单来探索更多槽位类型,以了解您需要从客户那里寻求哪些信息。
我们将添加更多槽位,例如电话号码、电子邮件地址、方便联系客户的日期、方便联系客户的时间。请参见下图了解实现。
聊天机器人会在用户意图与客服通话时收集所有信息。您可以勾选 **必需** 复选框以获取所有强制性信息。
- 现在添加确认提示,以确保客户提供的所有信息都是正确的。在 **确认** 提示中,您可以通过将槽位名称放在花括号 {} 中来引用槽位值。因此,我们将在确认提示中包含姓名、电话号码、日期和时间。如果用户决定不希望我们联系他们,并在确认时回答“否”,我们只会说“**好的。谢谢!**”
- 现在我们可以保存、构建并测试我们的机器人了。
测试槽位
在机器人再次构建完成后,您可以再次测试意图和槽位,以检查机器人是否正常工作。
因此,当您输入示例话语短语“与客服代表通话”时,机器人开始收集槽位中要求的信息。
它会询问“**请问您叫什么名字?**”,“**您的电话号码是多少?**”等等,无论是在槽位中提供的任何信息。
一旦提供了所有信息,它就会显示确认提示,其中包含我们在确认提示消息中用花括号 {} 提供的客户详细信息。
错误处理
我们看到,当用户说“**嗨**”或“**你好**”或意图话语中未提及的任何内容时,我们的机器人响应不佳,它会一直显示默认消息,并在几次提示后,会说它不理解用户在说什么并结束对话。这些都是机器人作为默认设置配置的。我们可以使用 Lex 的错误处理功能根据我们的需求进行更改。
- 在 BotService 上点击标有“错误处理”的橙色链接。
- 在澄清提示 (clarification prompt) 中,提供您的机器人能够做什么的提示,以便在用户输入机器人无法理解的内容时显示有意义的信息。您可以根据需要限制最大尝试次数。我将其限制为两次。两次尝试后,如果用户仍然没有提出机器人真正理解的问题,则提供一个有意义的挂断短语,用户可以拨打某个电话号码或进行其他有意义的操作。您现在可以删除默认的澄清提示和挂断短语。
- 现在测试机器人,您会看到,当我们输入“**嗨**”之类的短语时,机器人会两次提示它能提供什么帮助,然后显示挂断短语。
将聊天机器人部署到 Facebook Messenger
我们的初始基础机器人已完成,您可以根据您的意愿和需求进一步增强它。在本节中,我们将看到如何将机器人部署到 Facebook Messenger,作为您自定义 Facebook 页面的聊天机器人。
因此,这里需要的是,假设您为您的企业或公司拥有一个 Facebook 页面,并且您需要在该页面上部署自动聊天机器人功能,以便任何用户都可以获取信息或与该机器人对话。
首先,要将机器人部署到 Facebook 页面,我们需要有一个 Facebook 页面。
- 打开 URL https://developer.facebook.com 并使用您现有的 Facebook 凭据登录,或创建一个新账户。
- 我将使用我现有的 Facebook 账户登录。它会要求创建 Facebook 开发者账户,是的,我们需要这样做,所以点击 **下一步**。
- 提供应用名称(任意名称)和联系邮箱,然后点击 **下一步**。
- 通过安全检查,然后点击 **提交**。
- 它会显示欢迎消息,并要求您添加第一个产品。点击“**添加您的第一个产品**”按钮。
- 您将看到的下一个屏幕是 Facebook 开发者仪表板。由于我们需要设置 Facebook Messenger,请点击如下图所示设置 Messenger 的按钮。
- 您需要一个访问令牌和一个密钥。因此,导航到 **设置**,然后向下滚动到“**令牌生成**”部分。选择一个现有的页面(如果您有)或根据您的意愿创建一个新的页面。
- 选择您要创建的页面类型,即 **社区** 或 **业务**。
- 提供页面名称和类别。
- 您可以跳过提供个人资料照片等步骤,或选择应用一个。
- 在下一步,您将看到已创建的页面。
- 现在再次转到 **设置** 和 **令牌生成** 部分,然后选择新创建的页面。
- 它将再次提示您进行身份验证。请进行。
- 身份验证后,在令牌生成部分,我们现在看到已生成了页面访问令牌。复制该令牌并保存在某个位置。我们很快就会需要它。
- 现在,转到 **设置**->**基本**,获取应用程序密钥,如下图所示。复制应用程序密钥并保存在安全的位置,我们很快就需要它。
- 回到 Amazon Lex 服务,现在是时候将您的机器人发布到 Facebook Messenger 了,以用于新创建的 Facebook 页面。点击 BotService 上的 **发布**。
- 它会要求提供别名。提供您选择的别名,并记住它或将其存储在某处。
- 点击 **发布**,这可能需要一些时间。
- 机器人发布后,您将看到确认消息和一个蓝色的按钮,上面写着“**转到频道**”。
- 这将显示 Facebook、Kik、Slack 和 Twilio 等不同的频道。由于我们需要将机器人集成到 Facebook,请选择它。提供频道名称,即我们发布时创建的别名。给出一个令牌名称并记住或存储它。提供已保存的访问令牌和我们之前存储的 API 密钥。
- 提供页面上的所有信息后,点击 **激活**。
- 激活后,您将在页面底部看到回调 URL。复制该 URL 并保存。
- 再次回到 Facebook 的开发者账户,点击 **设置**。转到 **Webhooks** 部分,然后点击 **设置 Webhooks** 以提供上一步中复制的回调 URL。
- 在新的页面订阅(点击设置 Webhooks 后打开的页面)中,提供回调 URL 和我们之前存储的验证令牌名称。勾选消息、回发以及如下图所示的选项。点击 **验证** 和 **保存**。
- Webhook 设置完成后,选择要订阅 Webhook 事件的页面。所以请在此处选择您的 Facebook 页面。
- 点击“**订阅**”按钮。
- 完成后,返回 Facebook 页面,通过点击如下图所示的“**添加按钮**”按钮来添加一个新按钮:
- 为所有步骤提供详细信息,即选择“**联系您**”作为我的 Messenger 类型。选择发送消息的选项。
Facebook 上的实时聊天机器人
在执行完上一节的所有步骤后,我们可以说我们的机器人已成功部署并与我们的 Facebook 页面集成。是时候测试它了。
- 点击新添加的“**发送消息**”按钮,然后从上下文菜单中点击“**测试按钮**”。
- 点击“测试按钮”链接后,聊天机器人将打开,请注意聊天机器人的名称是 `CodeBusiness`。您输入 `Hi`,它会显示我们在错误处理部分提供的消息。
- 您输入第一个意图中的示例话语,它会回复我们在 Bot Service 中测试的内容。
太棒了!我们的机器人似乎工作得很好。同样,您可以测试我们在 Lex 的 Bot Service 上测试过的所有内容,例如与人工对话、查看槽位信息等等。您还可以将测试者权限授予给您希望在他们看到您的 Facebook 页面时能看到此机器人的用户。我觉得这很酷。
结论
在这篇详细的文章中,我们学习了什么是聊天机器人,如何使用 Amazon 的 Lex 服务创建自己的机器人。部署机器人并将其与 Facebook Messenger 集成。机器人集成也可以集成到 Slack、Twilio 等其他平台。只需探索和玩转它即可。
历史记录
- 2019年1月25日:初始版本