这是本系列文章的第四篇,旨在通过动手实践,帮助大家学习亚马逊云科技的生成式AI相关技能。通过这些文章,大家将掌握如何利用亚马逊云科技的各类服务来应用AI技术。
那么让我们开始今天的内容吧!
引言
什么是Amazon Lex?
Amazon Lex是一项完全托管的服务,帮助您为应用程序构建基于语音和文本的对话界面。它提供以下功能:
- 自然语言理解(NLU):Amazon Lex运用深度学习技术,能够理解用户发言的意图,即使这些发言是开放性的、模糊的或带有拼写错误。
- 自动语音识别(ASR):Amazon Lex可以实时将用户的语音转换为文本,您无需再为构建或维护自己的ASR引擎而操心。
- 对话管理:Amazon Lex负责管理对话流程,您只需专注于构建机器人的内容即可。
- 部署和扩展:通过Amazon Lex,您可以轻松地将机器人部署到任何渠道,无论是网页、移动设备,还是语音平台。此外,您可以根据需求灵活扩展或缩减机器人的规模。
架构图
创建Lambda函数
首先,导航到顶部的服务菜单,然后在“计算”部分点击Lambda(或者您也可以在搜索栏中搜索Lambda)。
确保您所在的区域是美国东部(弗吉尼亚北部)us-east-1。
点击“创建函数”。
选择“从头开始编写”作为创建方式。
在函数名称一栏输入:myLambdaAPIFunction
。
运行时选择:Node.js 16.x
。
权限部分:点击“更改默认执行角色”,并选择“使用现有角色”。
在“现有角色”下拉列表中,选择lambda_Role_<RANDOM_NUMBER>
。
点击“创建函数”。
配置页面:在这里,我们需要配置Lambda函数。如果向下滚动页面,您会看到“代码来源”(Function code)部分。在此,我们需要编写Node.js代码,该代码将读取来自Amazon Lex的请求,并将Rest API的响应发送回Amazon Lex。
首先删除AWS Lambda中的index.js
文件中的现有代码。然后将以下代码复制并粘贴到index.js
文件中。
var https = require('https');
exports.handler = (event, context, callback) => {
var STATUS = "false";
var lookItem = event.currentIntent.slots.item;
var msg = event.currentIntent.slots.target_countries;
lookItem = lookItem.charAt(0).toUpperCase() + lookItem.slice(1);
msg = msg.charAt(0).toUpperCase() + msg.slice(1);
if (msg == "USA" || msg == "America" || msg == "Usa" || msg == "The united states of america" || msg == "U.S.A") {
msg = "United States of America";
}
var url = "https://restcountries.com/v2/name/" + msg;
var res = https.get(url, function (res) {
var body = '';
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function () {
var response = JSON.parse(body);
console.log("Got a response: " + response);
for (var i = 0; i < response.length; i++) {
if (response[i]['name'] == msg) {
if (lookItem == "Capital") {
var result = "The capital of " + msg + " is " + response[i]['capital'];
STATUS = "true";
}
else if (lookItem == "Currency") {
var result = "The currency of " + msg + " is " + response[i]['currencies'][0]['name'];
STATUS = "true";
}
else if (lookItem == "Language") {
var result = "The language of " + msg + " is " + response[i]['languages'][0]['name'];
STATUS = "true";
}
}
}
if (STATUS == "false") {
result = "The " + lookItem + " of " + msg + " not found.!";
}
var capital = {
"dialogAction": {
"type": "Close",
"fulfillmentState": "Fulfilled",
"message": {
"contentType": "PlainText",
"content": result
}
}
};
callback(null, capital);
});
});
};
Node.js代码的主要任务包括:
- 读取Lex事件名称以及传递给Lambda的值。
- 从第三方API获取国家信息。
- 将所需的信息存储在一个变量中。
- 将变量的值转换为Amazon Lex响应格式。
- 将格式化后的响应发送给Amazon Lex。
最后,点击右上角的“部署”按钮保存函数。
配置测试事件
点击“测试”按钮。
在“配置测试事件”页面上,
- 事件模板:选择
hello-world
模板。 - 事件名称:输入
myTestLex
。
删除现有的JSON脚本,并将以下代码复制粘贴到其中。
{
"bot": {
"name": "myAPIChatBot",
"alias": "null",
"version": "$LATEST"
},
"currentIntent": {
"name": "country",
"slots": {
"target_countries": "India",
"item": "Capital"
},
"slotDetails": {
"Name": {
"resolutions": [],
"originalValue": "test"
}
},
"confirmationStatus": "None"
},
"inputTranscript": "what is the capital of india"
}
点击“保存”按钮。
创建的测试事件可以通过切换到“测试”选项卡进行查看。
创建聊天机器人
首先,导航到顶部的服务菜单,然后在“机器学习”部分点击Amazon Lex(或者您可以在搜索栏中搜索Amazon Lex)。
在Amazon Lex页面,点击“开始使用”。
在左侧面板,点击“返回V1控制台”按钮。
要创建一个聊天机器人,点击“创建”按钮。
创建您的机器人:
- 选择:
自定义机器人
- 机器人名称:输入
myAPIChatBot
- 语言:选择
英语(美国)
- 输出语音:选择
无
,这是一个基于文本的应用程序 - 会话超时:输入
5分钟
- 情感分析:选择
否
- IAM角色:保持默认设置
- COPPA:选择
否
- 高级选项:选择
否
点击“创建”。
创建意图
点击“创建意图”。
选择“创建意图”。
为新意图命名:输入country
。
点击“添加”。
在“示例话语”下,输入以下内容:
{item} of {target_countries}
点击加号图标或按[Enter]键。
please tell me the {item} of {target_countries}
点击加号图标或按[Enter]键。
what is the {item} of {target_countries}
点击加号图标或按[Enter]键。
在“槽位”部分:
创建一个槽位来存储国家名称:
- 名称:输入
target_countries
- 槽位类型:选择
AMAZON.country
- 提示:输入
您想知道哪个国家的信息?
要创建另一个槽位来存储任务名称,点击加号图标:
- 名称:输入
item
- 槽位类型:选择
AMAZON.US_FIRST_NAME
- 提示:输入
您想了解什么信息?
然后点击加号图标将其添加。
注意:请确保两个“必填”复选框都已选中。
在“履行”部分:
选择AWS Lambda函数。
- Lambda函数:选择
myLambdaAPIFunction
- 在弹出的“向Lambda函数添加权限”对话框中:点击“确定”
- 版本或别名:选择“最新”
向下滚动并点击“保存意图”。
在左侧边栏的“意图”部分,您将能够看到新创建的意图country
。
构建聊天机器人
点击右上角的“构建”按钮,然后再次点击“构建”以开始构建应用程序。
注意:构建过程需要几分钟时间。
构建完成后,您将能够看到以下提示消息:
测试您的聊天机器人
当聊天机器人成功创建后,您会在右侧边栏看到一个消息框。
输入what is the capital of Australia
,然后按[Enter]键。
您将看到机器人返回的响应。
输入what is the language of India
,然后按[Enter]键。
您将看到机器人返回的响应。
输入what is the currency of USA
,然后按[Enter]键。
您将看到机器人返回的响应。
现在尝试输入我们没有创建的意图以外的内容,并观察输出结果。