2016-11-14 3 views
7

Ich entwickle eine einfache, benutzerdefinierte Fähigkeit für Alexa. Ich habe es eingerichtet und hostet den Handler auf AWS Lambda. Es funktioniert gut außer ...Alexa Skills Kit (ASK) und Äußerungen

In der Test-Benutzeroberfläche, wenn ich eine gültige Äußerung eingeben, z. B. Hilfe, Abbrechen, Schwimmen, Ausführen (zwei benutzerdefinierte Äußerungen), funktioniert alles gut; Wenn ich jedoch eine Nonsense-Äußerung, z. B. dsfhfdsjhf, eingib, bildet der Alexa-Dienst den Nonsense immer auf die erste gültige Absicht im Intents-Schema ab.

In meinem Lambda-Code habe ich einen Handler für die Handhabung unbekannter Absichten; Die Absicht ist jedoch nie unbekannt. Ist das ein Artefakt der Testschnittstelle? Etwas anderes passiert?

Danke, John

+2

Ich kann die Frage nicht beantworten, aber ich habe ähnliche Diskrepanzen bei der Verwendung der Test-Benutzeroberfläche vs tatsächlichen Gerät erlebt. +1 für die Frage. Ich wollte dich zum Alexa Skills Kit Dev-Forum lenken, aber es sieht so aus, als hättest du die Frage bereits dort gepostet. :-) – TimHayes

+0

Ich denke, das ist ein Artefakt der Testschnittstelle. Hast du das auf deinem Gerät getestet? –

+0

@John haben Sie die Lösung dafür gefunden? – Dhawal

Antwort

0

Statt dsfhfdsjhf einzutippen (die in jeder Sprache nicht aussprechbar ist Alexa weiß), was passiert, wenn Ihre Äußerung Boogie oder schütteln ist?

In einem realen Szenario glaube ich nicht, dass Alexa DSFHFDSJHF jemals passieren würde, so dass es schwierig sein könnte, genau zu planen, was das Verhalten wäre.

+0

Wie ist das nicht sinnvoll? – AppleBaggins

2

Basierend auf der Einbeziehung einer unbehandelten Absicht in Ihrem Ansatz, klingt es wie Sie die Alexa Skills Kit SDK for Node.js verwenden. Ihr Problem ist kein Artefakt der Testschnittstelle. Ja, etwas anderes passiert.

Noch nicht von Amazon anerkannt, ist dies ein anerkanntes Problem im SDK von einer Reihe von Leuten. Siehe this open issue. Aus persönlicher Erfahrung zu dem obigen Vorschlag sprechend, ist es egal, ob Sie echte Wörter oder Kauderwelsch verwenden, die unbehandelte Absicht wird niemals aufgerufen. Bis dies behoben ist, wäre mein Vorschlag, einen Handler zu erstellen, der eine High-Level-Eingabeaufforderung für Ihre Fähigkeit darstellt, und wiederholt für den Benutzer die gültigen Optionen, die sie haben. Positioniere es als den Catch-All. Hoffentlich werden wir sehen, dass dieses SDK besser gewartet wird.

0

Sie möchten also alle Mülleingaben zu einer einzigen Absicht leiten. Du hast Glück. Hier sind ein paar Dinge, die Sie wissen sollten, bevor Sie fortfahren.

In Node.js wird der unbehandelte Handler innerhalb einer MODE abgefeuert, wenn die vom Alexa-Sprachdienst zurückgegebene Absicht innerhalb der angegebenen MODE nicht verfügbar ist.
Ein Beispiel MODE wäre der Bestätigungsmodus. Von den vielen Absichten, die verfügbar sind, sind Ja und Nein die einzigen Absichten, die akzeptiert werden.

var ConfirmationHandlers = Alexa.CreateStateHandler(states.CONFIRMATIONMODE, { 
    'YesIntent': function() { 
     this.handler.state = states.CLOSINGCOSTSMODE; 
     message = ` So you will be buying this house. Great! `; 
     reprompt = `Please carry on with the other intents found in the house buyer skill. `; 
     this.emit(':ask', message, reprompt); 
    }, 
    'NoIntent': function() { 
     this.handler.state = states.GENERALSEARCHMODE; 
     message = ` So you won't be buying this house. That's Ok, Continue searching for your dream house in the House buyer skill. !`; 
     reprompt = `Continue searching for your dream house in the House buyer skill.`; 
     this.emit(':ask', message, reprompt); 
    }, 
    'Unhandled': function() { 
     console.log("UNHANDLED"); 
     var reprompt = ` All other intents are disabled at this moment. Would you like to buy this house Yes or No? `; 
     this.emit(':ask', reprompt, reprompt); 
    } 
}); 

Bevor jedoch die Lambda-Funktion die Alexa Sprachdienst erreichen müssen Ihre Äußerung interpretieren und wo es sich auf einem der verfügbaren Absichten. Wenn Ihre Äußerung Müll ist und keiner bestimmten Absicht zugeordnet wird, wird sie derzeit der ersten Absicht zugeordnet.

Lösung: Wenn Sie eine Müllabsicht hinzufügen möchten, ist dies etwas, das durch das Intent-Schema nicht durch die unbehandelte Absicht behandelt werden sollte. Um eine Müllabsicht hinzuzufügen, kannst du den Anweisungen in diesem Amazon-Artikel folgen.

https://developer.amazon.com/blogs/post/Tx3IHSFQSUF3RQP/Why-a-Custom-Slot-is-the-Literal-Solution

Szenario 3: Ich will einfach alles. Die Verwendung von benutzerdefinierten Slot-Typen für Grammatik wie oben beschrieben erfüllt typischerweise diesen Wunsch und ermöglicht Ihnen, die Genauigkeit durch NLP-Training zu verbessern.Wenn Sie nur noch alles wollen, können Sie einen benutzerdefinierten Steckplatz namens so etwas wie "CatchAll" und eine entsprechende Absicht und Äußerung erstellen: CatchAllIntent {CatchAll}. Wenn Sie die gleichen Trainingsdaten verwenden, die Sie für LITERAL verwendet haben, erhalten Sie die gleichen Ergebnisse. Menschen finden in der Regel, dass Hinzufügen von ein wenig mehr Szenario-spezifische Trainingsdaten verbessert Genauigkeit.

Wenn Sie noch nicht die Ergebnisse, und versucht, die CatchAll Werte auf etwa zwanzig 2 bis 8 Wort zufällige Sätze Einstellung (von einem Zufallswort Generator - wirklich zufällig sein). Wenn der Benutzer etwas sagt, dass mit Ihren anderen Äußerungen übereinstimmt, werden diese Absichten trotzdem gesendet. Wenn nicht mit diesen übereinstimmt, wird es in den CatchAll-Slot fallen. Wenn Sie diese Route gehen, werden Sie Genauigkeit verlieren, weil Sie nicht vollen Nutzen von Alexa NLP sind, so dass Sie stark testen müssen.

Jede Eingabe, die auf einer Ihrer spezifischere Absichten nicht abgebildet wird, wie YES oder NO, wird sehr wahrscheinlich Karte auf diese CatchAll Absicht.

Verwandte Themen