使用 js SDK 将额外的详细信息发送到 Amazon Lex
Sending extra details using js SDK to Amazon Lex
场景
我想添加反馈功能,对来自机器人的任何响应表示不满。这个想法是发送带有意图消息的响应和问题对,例如大拇指向下,然后使用 lambda 函数将其存储在其他地方以供将来参考。
我尝试过的东西
我正在使用 Amazon lex 的 JS SDK 添加到网站中。
- 尝试在
requestAttributes
中添加键值对,但 postText
方法抛出消息 Unexpected key 'requestAttributes' found in params
的错误,这是意外的,因为在开发人员指南中提到了它。
- 基于相同的文档,我尝试在
last_question
和 last_response
的意图中添加两个插槽,并简单地在输入字符串中发送它们,例如:Thumbs down last_question last question last_answer last answer
- 这个我不知道不明白它是如何工作的。
我。有没有更好的方法来处理这个要求?
二。自定义插槽如何在包含多个信息的单个请求中工作,我应该向 lex 发送什么?
我。有没有更好的方法来处理这个需求?
根据我的记忆,postText
只是手动连接用户输入并将其发送到您的 Lex 机器人的方式,而不是通过 Facebook Messenger 等方式。所以 postText
不处理任何插槽、意图或类似内容的识别。这一切都由 Lex 完成,然后由 Lambda 处理。
所以我建议使用 sessionAttributes
来记住 last_question
和 last_response
通过多轮。然后再次使用 postText
简单地发送竖起大拇指或不赞成的评分。
Lambda 随后会将评分输入识别为自己的插槽,并从 sessionAttributes
中检索 last_question
和 last_response
,然后执行保存和跟踪评分系统我喜欢。
示例:
User: "...(Question A)..."
postText
将问题 A 传递给 Lex
- Lex 收到问题 A,解释意图和插槽并传递给 Lambda
- Lambda 接收输入、意图和槽数据
- Lambda 将
sessionAttributes
中的问题 A 保存为 last_question
- Lambda 确定答案 A 是正确的响应
- Lambda 将
sessionAttributes
中的答案 A 保存为 last_answer
并传递给 Lex
- Lex 从 Lambda 接收答案 A 并用答案 A 回复用户
Bot: "...(Answer A).... Please rate this answer."
- 通过输出通道传递 Lex 响应。
User: "Thumbs up."
postText
向 Lex 竖起大拇指。 -> Lex 解释。 -> Lambda 接收。
- Lambda 将用户输入保存为
user_rating
- Lambda 在
sessionAttributes
中找到 last_question
和 last_answer
- Lambda 将
last_question
、last_answer
和 user_rating
保存在数据库中
- Lambda 从
sessionAttributes
中删除 last_question
和 last_answer
以重新开始。
- 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 中,您将插槽与您期望的相匹配,并确定最佳响应。
场景
我想添加反馈功能,对来自机器人的任何响应表示不满。这个想法是发送带有意图消息的响应和问题对,例如大拇指向下,然后使用 lambda 函数将其存储在其他地方以供将来参考。
我尝试过的东西
我正在使用 Amazon lex 的 JS SDK 添加到网站中。
- 尝试在
requestAttributes
中添加键值对,但postText
方法抛出消息Unexpected key 'requestAttributes' found in params
的错误,这是意外的,因为在开发人员指南中提到了它。
- 基于相同的文档,我尝试在
last_question
和last_response
的意图中添加两个插槽,并简单地在输入字符串中发送它们,例如:Thumbs down last_question last question last_answer last answer
- 这个我不知道不明白它是如何工作的。
我。有没有更好的方法来处理这个要求?
二。自定义插槽如何在包含多个信息的单个请求中工作,我应该向 lex 发送什么?
我。有没有更好的方法来处理这个需求?
根据我的记忆,postText
只是手动连接用户输入并将其发送到您的 Lex 机器人的方式,而不是通过 Facebook Messenger 等方式。所以 postText
不处理任何插槽、意图或类似内容的识别。这一切都由 Lex 完成,然后由 Lambda 处理。
所以我建议使用 sessionAttributes
来记住 last_question
和 last_response
通过多轮。然后再次使用 postText
简单地发送竖起大拇指或不赞成的评分。
Lambda 随后会将评分输入识别为自己的插槽,并从 sessionAttributes
中检索 last_question
和 last_response
,然后执行保存和跟踪评分系统我喜欢。
示例:
User: "...(Question A)..."
postText
将问题 A 传递给 Lex- Lex 收到问题 A,解释意图和插槽并传递给 Lambda
- Lambda 接收输入、意图和槽数据
- Lambda 将
sessionAttributes
中的问题 A 保存为last_question
- Lambda 确定答案 A 是正确的响应
- Lambda 将
sessionAttributes
中的答案 A 保存为last_answer
并传递给 Lex - Lex 从 Lambda 接收答案 A 并用答案 A 回复用户
Bot: "...(Answer A).... Please rate this answer."
- 通过输出通道传递 Lex 响应。
User: "Thumbs up."
postText
向 Lex 竖起大拇指。 -> Lex 解释。 -> Lambda 接收。- Lambda 将用户输入保存为
user_rating
- Lambda 在
sessionAttributes
中找到 - Lambda 将
last_question
、last_answer
和user_rating
保存在数据库中 - Lambda 从
sessionAttributes
中删除last_question
和last_answer
以重新开始。 - Lambda 响应 -> Lex 响应 -> 输出通道显示响应。
last_question
和 last_answer
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 中,您将插槽与您期望的相匹配,并确定最佳响应。