0

我正在尝试编写“琐事测验”技能,就像已经存在的许多其他技能一样,但我希望用户能够给出实际答案,而不是“a/b/c”或“1/2/3” . 所以对话会是这样的:

  • Alexa:哪个行星离太阳最近:水星还是金星?
  • 用户Mercury
  • 亚历克萨:没错!你有一点。哪家公司生产克尔维特、凯迪拉克或雪佛兰?
  • 用户Chevrolet
  • 亚历克萨:没错!你有两点。乔治华盛顿的假牙是用什么做的?木头还是象牙?

...ETC...

由于每个问题都有自己的一组答案,我很高兴为每个问题创建一个自定义槽类型,所以我会有一个LIST_Q1_ANSWERS["Mercury", "Venus"]和一个LIST_Q2_ANSWERS["Cadillac", "Chevrolet"],这一切都很好。但是,我不知道如何告诉我的技能答案应该只来自这个特定的自定义插槽。

我当然可以Intent为每个问题创建一个特定的,所以我创建Q1Intent,我开始一个对话框,我Elicit我的Q1Intent. 但是,这行不通,因为在我他们填写所需LIST_Q1_ANSWERS空位的回应中,我必须说“正确”并一个问题,这意味着我必须Elicit...Q2Intent而且这是不允许的;我必须先结束对话框,然后再开始一个新的。(所以谈话会变成“哪个星球......?”“水星”“正确!你想要下一个问题吗?”“是的”“好的。哪家公司......”这不好。)

我在这里可能过于复杂了。也许有一种更简单的方法来模拟我想要的语音界面。我当然可以在一个大的自定义插槽中定义所有不同的答案,然后只有一个AnswerIntent,但是人们可以回答Chevrolet行星问题,这很愚蠢。(我知道我必须处理问题的任何答案,而不仅仅是插槽中的答案,但我想让问题偏向于从插槽中选择答案;这就是插槽的用途。)

那么,我应该怎么做呢?对话不起作用,我不认为。

4

2 回答 2

1

这是一个非常合理的要求,IMO,但 Alexa 仍然不可能。使用其他一些机器人/人工智能平台,您可以指定一个上下文,使其尝试将用户响应与您的技能意图的子集(我认为通常只有 1 个)相匹配。

这是一个流行的 Alexa 功能请求,它在同一点上得到:

允许根据应用程序状态临时禁用意图/话语
https://forums.developer.amazon.com/content/idea/40045/allow-temporarily-disabling-intentsutterances-base.html

于 2017-05-30T00:33:42.177 回答
-1

是的,我相信你可以做你想做的事。我在“谁先上?”中做了类似的事情。棒球短剧技巧。

可能还有许多其他方法可以实现这一点,但我采用了以下方法:

  1. 为每个用户响应创建一个意图。例如,在您所说的上述示例中,“mercury”和“chevrolet”都是意图。
  2. 在会话对象中向前传递信息。可以使用数据库,但在这种情况下会话运行良好。此信息将允许您的意图处理程序识别所提出的问题。如果每个答案都是唯一的,这并不是真正必要的,但它允许多个问题具有相同的答案。例如,也许答案“水星”是对“命名行星”和“命名液态金属”这两个问题的答案。
  3. 由于可能的错误答案多于正确答案,因此将插槽用于错误答案可能是有意义的。或者,您可能只是将不匹配的意图作为错误答案处理,并使用会话中传递的问题 ID 来识别哪个问题不正确。
  4. 您可以以编程方式将响应字符串放在一起。因此,如果答案是正确的,请在您的技能所说的下一个问题的开头添加“正确,下一个问题是”。

我希望这能给你一个关于如何进行的想法。Alexa有很多可能。我们有时只需要发挥创造力。

于 2017-05-30T11:19:13.577 回答