使用 js SDK 将额外的详细信息发送到 Amazon Lex

Sending extra details using js SDK to Amazon Lex

场景

我想添加反馈功能,对来自机器人的任何响应表示不满。这个想法是发送带有意图消息的响应和问题对,例如大拇指向下,然后使用 lambda 函数将其存储在其他地方以供将来参考。

我尝试过的东西

我正在使用 Amazon lex 的 JS SDK 添加到网站中。

  1. 尝试在 requestAttributes 中添加键值对,但 postText 方法抛出消息 Unexpected key 'requestAttributes' found in params 的错误,这是意外的,因为在开发人员指南中提到了它。

Documentation URL

  1. 基于相同的文档,我尝试在 last_questionlast_response 的意图中添加两个插槽,并简单地在输入字符串中发送它们,例如:Thumbs down last_question last question last_answer last answer - 这个我不知道不明白它是如何工作的。

我。有没有更好的方法来处理这个要求?

二。自定义插槽如何在包含多个信息的单个请求中工作,我应该向 lex 发送什么?

我。有没有更好的方法来处理这个需求?

根据我的记忆,postText 只是手动连接用户输入并将其发送到您的 Lex 机器人的方式,而不是通过 Facebook Messenger 等方式。所以 postText 不处理任何插槽、意图或类似内容的识别。这一切都由 Lex 完成,然后由 Lambda 处理。

所以我建议使用 sessionAttributes 来记住 last_questionlast_response 通过多轮。然后再次使用 postText 简单地发送竖起大拇指或不赞成的评分。

Lambda 随后会将评分输入识别为自己的插槽,并从 sessionAttributes 中检索 last_questionlast_response,然后执行保存和跟踪评分系统我喜欢。

示例:

User: "...(Question A)..."

  1. postText 将问题 A 传递给 Lex
  2. Lex 收到问题 A,解释意图和插槽并传递给 Lambda
  3. Lambda 接收输入、意图和槽数据
  4. Lambda 将 sessionAttributes 中的问题 A 保存为 last_question
  5. Lambda 确定答案 A 是正确的响应
  6. Lambda 将 sessionAttributes 中的答案 A 保存为 last_answer 并传递给 Lex
  7. Lex 从 Lambda 接收答案 A 并用答案 A 回复用户

Bot: "...(Answer A).... Please rate this answer."

  1. 通过输出通道传递 Lex 响应。

User: "Thumbs up."

  1. postText 向 Lex 竖起大拇指。 -> Lex 解释。 -> Lambda 接收。
  2. Lambda 将用户输入保存为 user_rating
  3. Lambda 在 sessionAttributes
  4. 中找到 last_questionlast_answer
  5. Lambda 将 last_questionlast_answeruser_rating 保存在数据库中
  6. Lambda 从 sessionAttributes 中删除 last_questionlast_answer 以重新开始。
  7. Lambda 响应 -> Lex 响应 -> 输出通道显示响应。

Bot: "Thank you, please ask another question."


ii.自定义插槽如何在包含多个信息的单个请求中工作,我应该向 lex 发送什么?

听起来您感到困惑的是,您必须在 postText 内发送到 Lex 之前准备格式化数据,而这要简单得多。只需传递用户输入,然后让 Lex 根据您设置意图和槽的方式对其进行分类。以下是多槽单输入的情况。

Lex 以字符串形式接收用户输入,并尝试解析该字符串的意图和槽,寻找最佳匹配。您只需使用意图和槽以及自定义槽和槽值来准备 Lex 控制台,以提高其匹配准确性。

假设您知道用户可能会提供包含多个信息的单个输入,您希望将这些信息作为单独的插槽捕获,例如:

"What is the time in New York?"

您可能想要捕捉问题的类型,以便您有一个时间槽来确定用户是否要求 "time" 或 "weather" 或 "population"。因此,这些将作为一个插槽 question_type,将这些选项作为插槽值。

然后您还想了解问题的所在,这样您就有了另一个位置来确定用户询问的是 "New York" 还是 "Paris" 还是 "Bangkok"。因此,这些将作为一个插槽 question_location,将这些选项作为插槽值。

在 Lex 控制台中准备好这些槽和槽值后,您还想通过缩小 Lex 在句子中可能找到哪些槽的位置来为此类输入准备 Lex。这些将是这个意图的话语,将插槽名称放在花括号内 "{ }":

what is the {question_type} in {question_location}

然后想象用户可能会以更多方式和不同顺序提出这些问题:

what {question_type} is it in {question_location}
in {question_location} what is the {question_type}

Lex 将解析输入并用它在该输入部分检测到的任何内容填充槽。然后在 Lambda 中,您将插槽与您期望的相匹配,并确定最佳响应。