2017-05-29 1 views
0

Je tente d'écrire une compétence de "quiz trivial", comme beaucoup d'autres qui existent déjà, mais j'aimerais que l'utilisateur puisse donner des réponses réelles plutôt que " a/b/c "ou" 1/2/3 ". Donc, la conversation va comme ceci:Les réponses de force doivent provenir d'un emplacement personnalisé spécifique, de façon répétée

  • Alexa: Quelle planète est plus proche du Soleil: Mercure ou Vénus?
  • utilisateur: Mercury
  • Alexa: C'est exact! Vous avez un point. Quelle compagnie fabrique la Corvette, la Cadillac ou la Chevrolet?
  • utilisateur: Chevrolet
  • Alexa: Exactement! Vous avez deux points. De quoi étaient faites les fausses dents de George Washington? Bois ou ivoire?

... etc ...

Puisque chaque question a son propre ensemble de réponses, je suis heureux de créer un type de fente personnalisé par question, donc j'avoir une fente LIST_Q1_ANSWERS de ["Mercury", "Venus"] et une fente LIST_Q2_ANSWERS de ["Cadillac", "Chevrolet"], et tout va bien. Cependant, je ne sais pas comment dire à mes compétences que les réponses devraient provenir uniquement de cette machine à sous personnalisée.

Je peut bien sûr créer un Intent spécifique pour chaque question, donc je crée Q1Intent, je commence un dialogue, et je Elicit mon Q1Intent. Cependant, cela ne fonctionne pas, parce que dans ma réponse à leur remplissage dans la fente LIST_Q1_ANSWERS nécessaire, je dois dire « correct » et également demander la prochaine question, ce qui signifie que je dois Elicit la Q2Intent ... et ce n'est pas autorisé; Je devrais d'abord terminer le dialogue, puis en commencer un nouveau. (Alors la conversation irait "Quelle planète ...?" "Mercury" "Correct! Voulez-vous la question suivante?" "Oui" "OK Quelle compagnie ..." et ce n'est pas bon.)

Je peux compliquer les choses ici. Il existe peut-être un moyen plus simple de modéliser l'interface vocale que je veux. Je peux bien sûr définir toutes les réponses différentes dans un grand emplacement personnalisé, et puis juste avoir un seul AnswerIntent, mais alors les gens peuvent répondre Chevrolet à la question des planètes et c'est stupide. (Je sais que je dois faire face aux réponses à une question, pas seulement celles qui sont dans la fente, mais je voudrais biaiser la question pour choisir les réponses à partir de la fente.)

Alors, comment devrais-je faire ça? Les boîtes de dialogue ne fonctionneront pas, je ne pense pas.

Répondre

1

C'est une demande très raisonnable, IMO, mais ce n'est toujours pas possible avec Alexa. Avec d'autres plates-formes bot/AI, vous pouvez spécifier un contexte qui l'amène à essayer de faire correspondre la réponse de l'utilisateur avec un sous-ensemble de vos intentions de compétences (généralement 1, je pense).

Voici une demande de fonctionnalité Alexa populaire qui obtient au même point:

Permettre de désactiver temporairement Intentions/énoncés basés sur l'état d'application
https://forums.developer.amazon.com/content/idea/40045/allow-temporarily-disabling-intentsutterances-base.html

-1

Oui, je crois que vous pouvez faire exactement ce que vous vouloir. J'ai fait quelque chose de similaire dans ma compétence "Who's On First?" baseball skit.

Il y a probablement beaucoup d'autres façons d'y parvenir aussi, mais je pris l'approche suivante:

  1. Créer une intention pour chaque réponse de l'utilisateur. Par exemple, dans l'exemple ci-dessus que vous avez indiqué, "mercure" et "chevrolet" seraient chacun des intentions.
  2. Transmettre les informations dans l'objet de session. Une base de données pourrait être utilisée, mais la session fonctionne bien dans ce cas. Cette information permettra à vos gestionnaires d'intention d'identifier la question qui a été posée. Ce n'est pas vraiment nécessaire si chaque réponse est unique, mais cela permet à plusieurs questions d'avoir la même réponse. Par exemple, peut-être que la réponse «mercure» est une réponse à la fois aux questions «nomme une planète» et «nomme un métal liquide».
  3. Puisqu'il y aura plus de réponses incorrectes possibles que de réponses correctes, il peut être judicieux d'utiliser des emplacements pour les réponses incorrectes. Alternativement, vous pourriez juste manipuler des intentions inégalées comme réponses incorrectes, et utiliser l'identification de question passée dans la session pour identifier quelle question était incorrecte.
  4. Vous pouvez mettre en place la chaîne de réponse par programme. Donc, si la réponse est correcte, ajoutez «Correct, la question suivante est» au début de la question suivante.

J'espère que cela vous donne une idée de la façon de procéder. Beaucoup est possible avec Alexa. Nous avons juste besoin d'être créatif parfois.

+0

Je ne vous suis pas. J'accepte ce que vous avez écrit ci-dessus, mais je ne sais pas comment cela contourne le problème fondamental: vous ne pouvez pas orienter alexa vers quelle intention vous attendez. Donc, vous devez toujours demander à l'utilisateur de préfixer sa réponse avec quelque chose qui amène Alexa à correspondre à la bonne intention, ou avoir un emplacement avec toutes les réponses possibles. – Tom

+0

Salut Tom, Je ne suggère pas d'essayer d'orienter Alexa vers une intention. Je suggère d'avoir une intention pour chaque réponse possible. Si plusieurs questions ont la même réponse possible, utilisez les informations contextuelles transmises dans la session pour savoir quelle question a été posée. Une seule intention peut être invoquée à partir de plusieurs questions. –

+1

Cela a du sens, mais je ne pense pas que ce soit une réponse à la question - à moins que je ne comprenne complètement la question. – Tom