我是编写 Alexa 技能的新手,想写一个技能来存储说话者的话。
例如,如果我说“Alexa,保存 {whatever i say}”,它应该将单词保存在某个字符串中。
现在据我了解,意图模式应该是这样的
{
intents:[
"intent" : "SaveIntent"
]
}
和诸如此类的话语
SaveIntent save
SaveIntent store
在这种情况下,我如何存储“{whatever I say}”?
我是编写 Alexa 技能的新手,想写一个技能来存储说话者的话。
例如,如果我说“Alexa,保存 {whatever i say}”,它应该将单词保存在某个字符串中。
现在据我了解,意图模式应该是这样的
{
intents:[
"intent" : "SaveIntent"
]
}
和诸如此类的话语
SaveIntent save
SaveIntent store
在这种情况下,我如何存储“{whatever I say}”?
要捕获自由形式的语音输入(而不是定义的可能值列表),您需要使用AMAZON.LITERAL
slot 类型。文字插槽类型的亚马逊文档描述了一个与您类似的用例,其中创建了一项技能来获取任何短语并将其发布到社交媒体网站。这是通过创建一个 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
插槽中访问这些短语。基于此,您应该能够实现特定于您需求的意图。
重要提示:自 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"
}
}
]
}
]
}
}
}
您可以尝试使用插槽类型 AMAZON.SearchQuery。所以你的意图是这样的
{
"intents": [
{
"intent": "SaveIntent",
"slots": [
{
"name": "UpdateText",
"type": "AMAZON.SearchQuery"
}
]
}
]
}
截至 2018 年底,我正在使用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();
(8/5/17) 不幸的是,随着 AMAZON.LITERALS 的消除,此功能已从 Amazon 中删除。
但是,根据您对捕获自由格式输入的兴趣程度,您可能会对一次MODE
捕获一个单词、名称、城市、数字、字母、符号等的输入感到满意,并将它们串在一起形成一个变量,没有之间的消息。
我研究了一种密码输入模式,可以对其进行修改以收集和连接用户输入。虽然您的输入会比较慢,但如果您优化您的 lambda 函数,您可能能够在输入几句话时获得快速的用户体验。结构是最重要的。该代码可以很容易地进行调整。
如何为 Amazon Alexa Skills Kit (ASK) 混合字符串和数字提供输入? https://stackoverflow.com/a/45515598/8408056
这是实现您正在寻找的更好的方法。在尝试了几种方法后,我得到了询问 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"
}
}
}
注意*:在这种方法中,如果有多个意图,您将需要正确处理话语。