我。有没有更好的方法来处理这个要求?
据我所知,postText 只是手动连接并将用户输入发送到您的 Lex 机器人的方法,而不是通过 Facebook Messenger。所以postText 不处理任何对槽、意图或类似内容的识别。这一切都由 Lex 完成,然后由 Lambda 处理。
所以我建议使用sessionAttributes 来记住last_question 和last_response 多次转。然后再次使用postText 简单地发送赞许或反对评级。
然后,Lambda 会将评级输入识别为自己的插槽,并从 sessionAttributes 中检索 last_question 和 last_response,然后执行保存和跟踪评级系统。
例子:
用户:“...(问题 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:“...(答案 A)....请评价这个答案。”
- 通过输出通道传递的 Lex 响应。
用户:“竖起大拇指。”
-
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:“谢谢,请再问一个问题。”
二。自定义插槽如何在具有多个信息的单个请求中工作,我应该向 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 中,您将插槽与您期望的匹配并确定最佳响应。