【问题标题】:Sending extra details using js SDK to Amazon Lex使用 js SDK 向 Amazon Lex 发送额外的详细信息
【发布时间】:2020-01-21 19:58:38
【问题描述】:

场景

我想添加反馈功能,对来自 bot 的任何响应表示不满意。我们的想法是发送响应和问题对,并带有意图消息(如大拇指向下),然后使用 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 发送什么?

【问题讨论】:

    标签: javascript amazon-web-services amazon-lex


    【解决方案1】:

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

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

    所以我建议使用sessionAttributes 来记住last_questionlast_response 多次转。然后再次使用postText 简单地发送赞许或反对评级。

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

    例子:

    用户:“...(问题 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:“...(答案 A)....请评价这个答案。”

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

    用户:“竖起大拇指。”

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

    Bot:“谢谢,请再问一个问题。”


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

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

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

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

    “纽约几点钟了?”

    您可能想要捕捉问题的类型,以便有一个空位来确定用户是在询问“时间”、“天气”还是“人口”。所以这些将作为一个插槽question_type,将这些选项作为插槽值。

    那么您还想了解问题的所在,以便您有另一个位置来确定用户询问的是“纽约”、“巴黎”还是“曼谷”。所以这些将作为一个插槽question_location,将这些选项作为插槽值。

    在 Lex 控制台中准备好这些槽和槽值之后,您还希望通过缩小 Lex 在句子中可能找到哪些槽的位置来为这种类型的输入准备 Lex。这些将是这个意图的表达,将插槽名称放在花括号“{}”内:

    {question_location}

    中的{question_type}是什么

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

    {question_type}是什么{question_location}
    {question_location} 中,{question_type}

    是什么

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

    【讨论】:

    • 很抱歉迟到了这个答案,我有一段时间没有活动。第一种使用意图的方法是我在发布这个问题后发现的,它按预期工作,但我不知道sessionAttributes 选项,而且实现起来也很简单。非常感谢您的宝贵时间。
    猜你喜欢
    • 2014-03-07
    • 2019-08-13
    • 2015-09-11
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多