是否可以使用 AMAZON LEX 构建一个与存储在客户端的数据库和 Web 服务连接的聊天机器人?



我们的组织希望使用集成在网站中的聊天机器人开发"失物招领系统应用程序"。

每当用户开始与聊天机器人对话时,聊天机器人都应该询问丢失物品或找到物品的详细信息,并应将详细信息存储在数据库中。

我们该怎么做?

我们是否可以使用我们自己的网络服务,因为组织不想将数据库保留在亚马逊的服务器中。

作为一个刚刚实现同样情况的人(在@Sid8491的很多帮助下),我可以对我如何管理它给出一些见解。

请注意,我使用的是 C#,因为这是我工作的公司使用的。

首先,机器人需要用户的输入来决定调用什么意图。为此,我实现了对Lex API的PostText调用。

PostTextRequest lexTextRequest = new PostTextRequest()
{
BotName = botName,
BotAlias = botAlias,
UserId = sessionId,
InputText = messageToSend
};
try
{
lexTextResponse = await awsLexClient.PostTextAsync(lexTextRequest);
}
catch (Exception ex)
{
throw new BadRequestException(ex);
}

请注意,这要求您创建一个 Cognito 对象来验证您的 AmazonLexClient (如下所示):

protected void InitLexService()
{
//Grab region for Lex Bot services
Amazon.RegionEndpoint svcRegionEndpoint = Amazon.RegionEndpoint.USEast1;
//Get credentials from Cognito
awsCredentials = new CognitoAWSCredentials(
poolId,                     // Identity pool ID
svcRegionEndpoint);         // Region
//Instantiate Lex Client with Region
awsLexClient = new AmazonLexClient(awsCredentials, svcRegionEndpoint);
}

从机器人获得响应后,我们使用一个简单的开关案例来正确识别需要调用 Web 应用程序运行的方法。整个过程由我们的 Web 应用程序处理,我们仅使用 Lex 来识别用户的请求和插槽值。

//Call Amazon Lex with Text, capture response
var lexResponse = await awsLexSvc.SendTextMsgToLex(userMessage, sessionID);
//Extract intent and slot values from LexResponse
string intent = lexResponse.IntentName;
var slots = lexResponse.Slots;
//Use LexResponse's Intent to call the appropriate method 
switch (intent)
{
case: /*Your intent name*/:
/*Call appropriate method*/;
break;
}

之后,只需向用户显示结果即可。如果您需要更多说明,请告诉我!

更新:

要写入 SQL(同样在 C# 中)的槽数据的示例实现如下所示:

case "LostItem":                                              
message = "Please fill the following form with the details of the item you lost.";
LostItem();
break;

然后,这将带您进入 LostItem() 方法,您可以使用该方法填写表单。

public void LostItem()
{
string itemName = string.Empty;
itemName = //Get from user
//repeat with whatever else you need for a complete item object
//Implement a SQL call to a stored procedure that inserts the object into your database. 
//You can do a similar call to the database to retrieve an object as well
}

这应该为你指明正确的方向,希望如此。如果您需要SQL存储过程方面的帮助,Google是您最好的朋友。希望这有所帮助!

是的,这是可能的。

您可以从您的网站向 Lex 发送请求,这将提取意图和实体。
获得这些后,您可以使用您选择的任何语言编写后端代码,并使用您想要的任何数据库。
在您的用例中,您可能只想使用 Lex。PostText将是您将调用的主要功能。

您需要在 Lex 中创建一个 Intent,该 Intent 将有多个插槽LosingDateLosingPlace或任何您想要的插槽,然后它将能够从用户那里获取所有这些信息并将其传递给您的 Web 应用程序。

最新更新