亚马逊Alexa:存储用户的话

时间:2016-05-16 08:16:41

标签: amazon alexa-skills-kit alexa-skill

我是新手写Alexa的技能,想写一个技巧来存储说话者的话 例如,如果我说'Alexa,保存{无论我说什么}',它应该将单词保存在某些字符串中 根据我的理解,意图模式应该像

 #include <stdio.h>
 #include <stdlib.h>
 #include <gtk/gtk.h>

之类的话语
  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  gtk_window_set_title (GTK_WINDOW (window), "Hello world");

  g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);

  gtk_widget_show (window);

  gtk_main ();

  return 0;

在这种情况下,我如何存储'{无论我说什么}'?

7 个答案:

答案 0 :(得分:15)

要捕获自由格式语音输入(而不是已定义的可能值列表),您需要使用AMAZON.LITERAL插槽类型。 Amazon documentation for the Literal slot type描述了与您类似的用例,其中创建了一项技能来获取任何短语并将其发布到社交媒体网站。这是通过创建StatusUpdate意图来完成的:

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

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

鉴于在您描述的情况中,您尝试捕获非常动态短语,您希望额外考虑的文档中有几件事情。 :

  

如果您使用AMAZON.LITERAL类型来收集自由格式文本   插槽中可能包含的字数变化很大,   请注意以下事项:

     
      
  • 覆盖这个全范围(最小值,最大值,以及介于两者之间)将会   需要一大堆样本。尽量提供几百个   样本或更多以解决槽值单词中的所有变化   如上所述。
  •   
  • 将插槽中的短语保持足够短,以便用户可以   说完整个短语而不需要停顿。
  •   
     

冗长的口头输入会导致精确度较低的体验,因此请避免   设计一个需要不止一些的口语界面   槽值的单词。用户不能没有说的短语   暂停对于一个插槽值来说太长了。

那就是说,这里是文档中的示例Sample Utterances,再次:

  

StatusUpdate发布更新{arri | UpdateText}

     

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

     

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

     

...(更多样本显示带有4-10个单词的短语)

     

StatusUpdate发布更新{今晚将由杂货店停止| UpdateText}

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

答案 1 :(得分:4)

重要提示:自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"
                            }
                        }
                    ]
                }
            ]
        }
    }
}

答案 2 :(得分:3)

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

{
  "intents": [
    {
      "intent": "SaveIntent",
      "slots": [
        {
          "name": "UpdateText",
          "type": "AMAZON.SearchQuery"
        }
      ]
    }
  ]
}

答案 3 :(得分:2)

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

它确实有效,我已经在生产系统上使用了它。

但是您必须问用户一些问题并填补空缺。

例如:

  • 定义名为query的SearchQuery的广告位类型(选择所需的名称)
  • 在诸如I want to watch {query}{query}I want {query}之类的广告位提示中添加示例话语
  • 向用户提问以填充插槽
const message = 'What movie do you want to watch?'

handlerInput
  .responseBuilder
  .speak(message)
  .reprompt(message)
  .addElicitSlotDirective('query')
  .getResponse();

答案 4 :(得分:0)

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

Alexa目前不支持访问用户原始语音输入。将来可能会这样,或者您可以查看其他语音到文字API,例如Google's

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

为此,您可以按照Amazon的一个使用自定义广告位type的示例进行操作。然后将用户会说的所有可能的单词放入该类别中。

答案 5 :(得分:0)

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

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

我已经开发了一种密码输入模式,可以对其进行修改以收集和连接用户输入。虽然您的输入速度会较慢,但如果您优化了lambda函数,则可以在输入几个句子时获得快速的用户体验。结构是重要的。代码可以很容易地适应。

如何向Amazon Alexa技能套件(ASK)混合字符串输入数字? https://stackoverflow.com/a/45515598/8408056

答案 6 :(得分:0)

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

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

设置意图

Setting up Intent

设置自定义广告位类型

Setting up custom slot type

在设置您的 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"
                }
            }
        }

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