多个问题的一个意图 - Amazon Lex

One intent for Multiple Questions - Amazon Lex

我可以使用一个意图来回答不同的问题吗?

例如:

假设我有一个意图 reports,现在 reports 可能有多个问题,例如

Q1。如何下载报告?

Q2。我在哪里可以看到我的报告?

Do i have to make separate intent for download reports and show reports and call a single lambda function for fulfillment? I can have nested if else for intents to give a suitable response.

有没有其他方法可以最大程度地减少我的意图?我正在使用 JavaScript 作为 lambda 函数。

我强烈建议不要这样做,因为这不是一个好的设计,但可以用一个 Intent 和两个问题来做,就像在输入中一样 JSON 您将对 Lambda 提出您的问题带着意图问道。如果您看到下面的 JSON,这是您的 Lambda 函数(或其他端点)的 Lex 格式。 'inputTranscript' 字段将包含您提出的问题。您可以在代码中针对字段 'inputTranscript' 编写 if 条件检查,然后可以响应相应的答案。

正如我所说,我建议不要这样做,因为 Intent 意味着意图是什么。两个不同的问题意味着两个不同的意图。

{
  "messageVersion": "1.0",
  "invocationSource": "FulfillmentCodeHook",
  "userId": "876669698689967676",
  "sessionAttributes": {},
  "requestAttributes": null,
  "bot": {
    "name": "LexBotName",
    "alias": "$LATEST",
    "version": "$LATEST"
  },
  "outputDialogMode": "Text",
  "currentIntent": {
    "name": "WorkingHours",
    "slots": {},
    "slotDetails": {},
    "confirmationStatus": "None"
  },
  "inputTranscript": "The question you have asked"
}

(在 Alexa 和 Lex 行话中:"Utterance" = 用户问题或陈述。)

决定分组或分离意向时的一般提示:
当话语差异很大时使用多个意图。
当您有相似的话语并且它们之间只有几个词不同时,请使用单一意图。

如果话语相似,则可以使用 slots 来确定关键字差异。

以下是使用您的示例进行设置的方法:

创建一个名为 Records 的意图。
然后创建一个名为 actionTypes 的自定义 slotType 并将值列为:(downloadseeview 等)
然后使用 actionTypes 作为 slotType 添加一个名为 actionslotRecords

你的话语会变成:

 how do I {action} reports  
 how do I {action} a report  
 where can I {action} my reports

然后在您的 Lambda 和您的 Records 处理逻辑中,您可以检测 action 插槽并做出相应的响应。

这比您自己解析 inputTranscript 要好得多。让 Lex 尽可能多地这样做,这就是 Lex 的本意。