Alexa - 包罗万象

Posted

技术标签:

【中文标题】Alexa - 包罗万象【英文标题】:Alexa - catchall 【发布时间】:2018-10-01 13:16:50 【问题描述】:

我有一个插入后端和 DialogFlow/ApiAI 的聊天机器人。 我正在尝试在 Alexa 中设置一项技能,以便我可以捕捉到我的技能所说的所有内容,然后将其转发到我的后端,以便我可以使用我现有的基础设施和 convo 设计。

我一直在努力与 Alexa 建立一个捕获所有内容并转发它的意图。 据我了解,您应该使用 AMAZON.SearchQuery,但是当我尝试设置意图时出现以下错误:

构建失败 意图“CATCH_ALL”中的示例话语“CATCH_ALL any”必须包含载体短语。具有短语类型的示例意图话语不能仅包含槽。错误代码:MissingCarrierPhraseWithPhraseSlot -

有人知道怎么做吗?我也尝试使用 AMAZON.Literal,但它似乎已被弃用,并且当我使用它时我无法建立技能。 我有点卡住了。如果有人有解决方案那就太好了...

谢谢。

【问题讨论】:

【参考方案1】:

我终于通过这样做:

    
        "interactionModel": 
            "languageModel": 
                "invocationName": "test",
               "intents": [
                
                "name": "AMAZON.CancelIntent",
                    "samples": []
                ,
                
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                ,
                
                    "name": "AMAZON.StopIntent",
                    "samples": []
                ,
                
                    "name": "CATCHALL",
                    "slots": [
                        
                            "name": "any",
                            "type": "AMAZON.LITERAL"
                        
                    ],
                        "samples": [
                            "hey|any",
                            "hey hey|any",
                           "hey hey hey|any",
                            "hey hey hey hey|any",
                            "hey hey hey hey hey|any"
                        ]
                    
                ],
                "types": []
            
        
    

意图 CATCHALL 的样本指示您要捕获的单词数。所以,我会抓住 1 到这 5 个单词之间的任何句子

不过,我不确定当我提交应用程序时这是否会成为问题。

请注意,除英语(美国)以外的任何语言都不支持 AMAZON.LITERAL,因此这不是我的解决方案,因为它是法语和英语聊天机器人。所以我又回到了起点……

编辑:这是没有 LITERAL 的解决方案:

"interactionModel": "languageModel": "invocationName": "mon invocation", "intents": [ "name": "AMAZON.CancelIntent", "samples": [] , "name": "AMAZON.HelpIntent", "samples": [ "que puis-je faire" ] , "name": "AMAZON.StopIntent", "samples": [ "je veux quitter" ] , "name": "CATCH_ALL", "slots": [ "name": "any", "type": "ANYTHING" ], "samples": [ "any" ] ], "types": [ "name": "ANYTHING", "values": [ "name": "value": "hey" , "name": "value": "hey hey" , "name": "value": "hey hey hey" , "name": "value": "hey hey hey hey" , "name": "value": "hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey hey hey hey hey hey" , "name": "value": "hey hey hey hey hey hey hey hey hey hey hey hey" ] ]

【讨论】:

我想实现和你一样的东西,但我不明白所有这些嘿嘿。它最终会抓住嘿句子.... 好吧,因为没有其他匹配模式,“嘿嘿”总是会找到最接近的。最后,我用随机单词生成了 x 个句子,它实现了相同的目标,但阅读时更容易理解。关键是句子总是比前一个多一个词。否则,它不会捕捉到整个句子。【参考方案2】:

您可以将 AMAZON.SearchQuery 替换为 AMAZON.Person。通常,AMAZON.SearchQuery 需要一个短语和插槽。使用 AMAZON.Person 不需要短语和插槽。它会接受您传递给 Intent 的任何值。

               
                "name": "CATCH_ALL",
                "slots": [
                    
                        "name": "any",
                        "type": "AMAZON.Person"
                    
                ],
                "samples": [
                    "any"                      
                ]
            

【讨论】:

"AMAZON.SearchQuery 需要一个短语和插槽" - 这是关键!【参考方案3】:

很遗憾,目前没有解决方案。 Alexa 不支持以您希望的方式获取所有文本的方式。

【讨论】:

找到了解决方案,我用解决方案编辑了响应 @JulienCoo 是的,但这不是一个“包罗万象”的解决方案。【参考方案4】:

您可以使用一些随机单词创建自定义插槽。


    "interactionModel": 
        "languageModel": 
            "invocationName": "demo",
            "intents": [
                
                    "name": "AMAZON.CancelIntent",
                    "samples": []
                ,
                
                    "name": "AMAZON.HelpIntent",
                    "samples": []
                ,
                
                    "name": "AMAZON.StopIntent",
                    "samples": []
                ,
                
                    "name": "EveryThingIntent",
                    "slots": [
                        
                            "name": "EveryThingSlot",
                            "type": "BAG_OF_WORDS"
                        
                    ],
                    "samples": [
                        "EveryThingSlot "
                    ]
                
            ],
            "types": [
                
                    "name": "BAG_OF_WORDS",
                    "values": [
                        
                            "name": 
                                "value": "Hello World"
                            
                        
                    ]
                
            ]
        
    

【讨论】:

以上是关于Alexa - 包罗万象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ruby on Rails 中创建一个包罗万象的路由?

基本算法——包罗万象

ASP.Net Core razor 页面处理程序成为包罗万象的路线

如何在生产模式下安全地使用“包罗万象”?

在 PHP 中创建一个包罗万象的处理程序?

Ailizhe艾丽哲时尚女装 包罗万象 集海天一色