Мой тип пользовательского слота принимает неожиданные значения

Я заметил кое-что странное при тестировании моей модели взаимодействия с набором навыков Alexa.

Я определил собственный тип слота, например:

CAR_MAKERS Mercedes | BMW | Volkswagen

Схема моего замысла была примерно такой:

{
  "intents": [
    {
      "intent": "CountCarsIntent",
      "slots": [
        {
          "name": "CarMaker",
          "type": "CAR_MAKERS"
        },
   ...

с примерами высказываний, таких как:

CountCarsIntent Add {Amount} cars to {CarMaker}

Теперь, при тестировании в консоли разработчика, я заметил, что могу писать такие вещи, как:

"Add three cars to Ford"

И он действительно правильно это проанализирует! Хотя «Форд» ни разу не упоминался в модели взаимодействия! Лямбда-запрос:

  "request": {
    "type": "IntentRequest",
    ...
    "intent": {
      "name": "CountCarsIntent",
      "slots": {
        "CarMaker": {
          "name": "ExpenseCategory",
          "value": "whatever"
        },
 ...

Это меня действительно удивляет, потому что документация по типы пользовательских слотов довольно ясно говорит о том, что слот может принимать только значения, перечисленные в модели взаимодействия.

Теперь кажется, что значения также анализируются динамически! Это новая функция или мне что-то не хватает?


person Konstantin Schubert    schedule 09.10.2016    source источник
comment
Я заметил, что пользователь @samiles разделяет мое наблюдение в ответе на этот вопрос: stackoverflow.com/a/34078869/1375015   -  person Konstantin Schubert    schedule 09.10.2016


Ответы (2)


На самом деле это нормально (и хорошо, ИМО). Alexa использует список слов, который вы предоставляете, в качестве руководства, а не исчерпывающий список.

Если бы у него не было такой гибкости, не было бы способа узнать, использовали ли пользователи слова, которых вы не ожидали. Таким образом, вы можете изучить и улучшить свой список и обработку.

person Tom    schedule 09.10.2016

Alexa рассматривает указанные значения слотов как «образцы». Следовательно, значения слотов, которые не упоминаются в модели взаимодействия, также будут отображены.

Когда вы создаете пользовательский тип слота, важно понимать, что это обучающие данные для Alexa NLP (обработка естественного языка). Предоставленные вами значения НЕ являются строгим перечислением или массивом, ограничивающим то, что пользователь может сказать. Это имеет два значения

1) вам будут переданы слова и фразы, не входящие в значения вашего слота,

2) ваш код должен выполнить любую необходимую проверку, если то, что сказано, неизвестно.

Поскольку вы знаете допустимые значения для этого слота, всегда выполняйте проверку значения слота в своем коде. Таким образом, когда вы получаете что-то, кроме действующего производителя автомобилей или что-то, что вы не поддерживаете, вы всегда можете вежливо ответить, например

"Извините, я не понял, вы можете повторить"

or

«К сожалению, в нашем списке нет. Не могли бы вы выбрать что-нибудь из [дайте несколько образцов из вашего списка]»

Подробнее здесь

person johndoe    schedule 01.09.2018