22

我是编写 Alexa 技能的新手,想写一个技能来存储说话者的话。
例如,如果我说“Alexa,保存 {whatever i say}”,它应该将单词保存在某个字符串中。
现在据我了解,意图模式应该是这样的

{
   intents:[
       "intent" : "SaveIntent"
   ]
}

和诸如此类的话语

SaveIntent save
SaveIntent store

在这种情况下,我如何存储“{whatever I say}”?

4

7 回答 7

15

要捕获自由形式的语音输入(而不是定义的可能值列表),您需要使用AMAZON.LITERALslot 类型。文字插槽类型的亚马逊文档描述了一个与您类似的用例,其中创建了一项技能来获取任何短语并将其发布到社交媒体网站。这是通过创建一个 StatusUpdate 意图来完成的:

{
  "intents": [
    {
      "intent": "StatusUpdate",
      "slots": [
        {
          "name": "UpdateText",
          "type": "AMAZON.LITERAL"
        }
      ]
    }
  ]
}

由于它使用AMAZON.LITERAL插槽类型,因此此意图将能够捕获任意短语。然而,为了确保语音引擎能够很好地捕捉真实世界的短语,您需要提供各种类似于您希望用户说的话的示例话语。

鉴于在您描述的场景中,您正在尝试捕获非常动态的短语,因此您需要额外考虑文档中的几件事:

如果您使用 AMAZON.LITERAL 类型来收集自由格式文本,其中可能包含在插槽中的单词数有很大差异,请注意以下几点:

  • 覆盖整个范围(最小、最大和介于两者之间)将需要非常大的样本集。尝试提供数百个或更多样本来解决上面提到的槽值字的所有变化。
  • 保持槽内的短语足够短,以便用户可以说出整个短语而无需暂停。

冗长的口语输入会导致较低的准确度体验,因此请避免设计需要多个词作为槽值的口语界面。对于槽值而言,用户不能不停顿就不能说话的短语太长。

也就是说,这里是文档中的示例示例话语,再次:

StatusUpdate 发布更新 {arrived|UpdateText}

StatusUpdate 发布更新{晚餐时间|UpdateText}

StatusUpdate 发布更新 {out at lunch|UpdateText}

...(更多示例显示 4-10 个单词的短语)

StatusUpdate 发布更新{今晚要去杂货店停留|UpdateText}

如果您提供足够多的不同长度示例来准确描述预期用户话语的范围,那么您的意图将能够准确捕获实际用例中的动态短语,您可以在UpdateText插槽中访问这些短语。基于此,您应该能够实现特定于您需求的意图。

于 2016-05-16T22:17:03.953 回答
7

重要提示:自 2018 年 10 月 22 日起,AMAZON.LITERAL 已被弃用。使用 AMAZON.LITERAL 构建的旧技能仍可继续使用,但在更新这些旧技能时,您必须从 AMAZON.LITERAL 迁移出去,并且对于所有新技能。

除了使用 AMAZON.LITERAL,您可以使用自定义插槽来欺骗 alexa 将自由流文本传递到后端。

您可以使用此配置来执行此操作:

{
    "interactionModel": {
        "languageModel": {
            "invocationName": "siri",
            "intents": [
                {
                    "name": "SaveIntent",
                    "slots": [
                        {
                            "name": "text",
                            "type": "catchAll"
                        }
                    ],
                    "samples": [
                        "{text}"
                    ]
                }
            ],
            "types": [
                {
                    "name": "catchAll",
                    "values": [
                        {
                            "name": {
                                "value": "allonymous isoelectrically salubrity apositia phantomize Sangraal externomedian phylloidal"
                            }
                        },
                        {
                            "name": {
                                "value": "imbreviate Bertie arithmetical undramatically braccianite eightling imagerially leadoff"
                            }
                        },
                        {
                            "name": {
                                "value": "mistakenness preinspire tourbillion caraguata chloremia unsupportedness squatarole licitation"
                            }
                        },
                        {
                            "name": {
                                "value": "Cimbric sigillarid deconsecrate acceptableness balsamine anostosis disjunctively chafflike"
                            }
                        },
                        {
                            "name": {
                                "value": "earsplitting mesoblastema outglow predeclare theriomorphism prereligious unarousing"
                            }
                        },
                        {
                            "name": {
                                "value": "ravinement pentameter proboscidate unexigent ringbone unnormal Entomophila perfectibilism"
                            }
                        },
                        {
                            "name": {
                                "value": "defyingly amoralist toadship psoatic boyology unpartizan merlin nonskid"
                            }
                        },
                        {
                            "name": {
                                "value": "broadax lifeboat progenitive betel ashkoko cleronomy unpresaging pneumonectomy"
                            }
                        },
                        {
                            "name": {
                                "value": "overharshness filtrability visual predonate colisepsis unoccurring turbanlike flyboy"
                            }
                        },
                        {
                            "name": {
                                "value": "kilp Callicarpa unforsaken undergarment maxim cosenator archmugwump fitted"
                            }
                        },
                        {
                            "name": {
                                "value": "ungutted pontificially Oudenodon fossiled chess Unitarian bicone justice"
                            }
                        },
                        {
                            "name": {
                                "value": "compartmentalize prenotice achromat suitability molt stethograph Ricciaceae ultrafidianism"
                            }
                        },
                        {
                            "name": {
                                "value": "slotter archae contrastimulant sopper Serranus remarry pterygial atactic"
                            }
                        },
                        {
                            "name": {
                                "value": "superstrata shucking Umbrian hepatophlebotomy undreaded introspect doxographer tractility"
                            }
                        },
                        {
                            "name": {
                                "value": "obstructionist undethroned unlockable Lincolniana haggaday vindicatively tithebook"
                            }
                        },
                        {
                            "name": {
                                "value": "unsole relatively Atrebates Paramecium vestryish stockfish subpreceptor"
                            }
                        },
                        {
                            "name": {
                                "value": "babied vagueness elabrate graphophonic kalidium oligocholia floccus strang"
                            }
                        },
                        {
                            "name": {
                                "value": "undersight monotriglyphic uneffete trachycarpous albeit pardonableness Wade"
                            }
                        },
                        {
                            "name": {
                                "value": "minacious peroratory filibeg Kabirpanthi cyphella cattalo chaffy savanilla"
                            }
                        },
                        {
                            "name": {
                                "value": "Polyborinae Shakerlike checkerwork pentadecylic shopgirl herbary disanagrammatize shoad"
                            }
                        }
                    ]
                }
            ]
        }
    }
}
于 2018-11-16T08:39:05.367 回答
3

您可以尝试使用插槽类型 AMAZON.SearchQuery。所以你的意图是这样的

{
  "intents": [
    {
      "intent": "SaveIntent",
      "slots": [
        {
          "name": "UpdateText",
          "type": "AMAZON.SearchQuery"
        }
      ]
    }
  ]
}
于 2018-04-03T16:45:13.333 回答
2

截至 2018 年底,我正在使用SearchQuery来获取用户所说的任何内容。

它确实有效,我在生产系统上有它。

但是你必须问用户一些事情并填补空缺。

例如:

  • 定义一个名为 SearchQuery 的插槽类型query(选择您想要的任何名称)
  • 在槽提示中添加示例话语,例如I want to watch {query}or{query}I want {query}
  • 向用户提出问题以填充插槽
const message = 'What movie do you want to watch?'

handlerInput
  .responseBuilder
  .speak(message)
  .reprompt(message)
  .addElicitSlotDirective('query')
  .getResponse();
于 2019-01-15T08:03:28.463 回答
0

更新:这个答案不是真的。评论中提到的Amazon.LiteralSlot 类型应该允许这样做。


Alexa 目前不支持访问用户的原始语音输入。将来可能会实现,或者您可以查看其他一些语音转文本 API,例如Google 的.

目前使用 Alexa 执行此操作的唯一方法是拥有一组用户可以说它会保存的单词列表。

为此,您可以遵循 Amazon 使用自定义插槽类型的示例之一。然后将用户会说的所有可能的词放入该类别。

于 2016-05-16T13:58:33.903 回答
0

(8/5/17) 不幸的是,随着 AMAZON.LITERALS 的消除,此功能已从 Amazon 中删除。

但是,根据您对捕获自由格式输入的兴趣程度,您可能会对一次MODE捕获一个单词、名称、城市、数字、字母、符号等的输入感到满意,并将它们串在一起形成一个变量,没有之间的消息。

我研究了一种密码输入模式,可以对其进行修改以收集和连接用户输入。虽然您的输入会比较慢,但如果您优化您的 lambda 函数,您可能能够在输入几句话时获得快速的用户体验。结构是最重要的。该代码可以很容易地进行调整。

如何为 Amazon Alexa Skills Kit (ASK) 混合字符串和数字提供输入? https://stackoverflow.com/a/45515598/8408056

于 2017-08-05T18:52:34.010 回答
0

这是实现您正在寻找的更好的方法。在尝试了几种方法后,我得到了询问 Alexa 的语句的完整单词。

您需要在您的 Alexa 技能中进行以下设置(您可以根据需要选择意图名称、插槽名称和插槽类型)

设置意图

设置意图

设置自定义槽类型

设置自定义槽类型

设置好 Alexa 技能后,您可以调用您的技能,为启动请求保留一些响应并说出您想要的任何内容,并且您可以捕获整个单词或文本,如此处所示。

"intent": {
            "name": "sample",
            "confirmationStatus": "NONE",
            "slots": {
                "sentence": {
                    "name": "sentence",
                    "value": "hello, how are you?",
                    "resolutions": {
                        "resolutionsPerAuthority": [
                            {
                                "authority": "xxxxxxx",
                                "status": {
                                    "code": "xxxxxxx"
                                }
                            }
                        ]
                    },
                    "confirmationStatus": "NONE",
                    "source": "USER"
                }
            }
        }

注意*:在这种方法中,如果有多个意图,您将需要正确处理话语。

于 2021-02-05T14:36:48.173 回答