Amazon Alexa: слова пользователя магазина

Я новичок в написании навыков Alexa и хочу написать навык для хранения слов говорящего.
Например, если я скажу: «Алекса, сохраните {все, что я говорю}», он должен сохранить слова в некоторой строке.
Насколько я понимаю, схема намерения должна выглядеть примерно так

{
   intents:[
       "intent" : "SaveIntent"
   ]
}

и высказывания вроде

SaveIntent save
SaveIntent store

В этом случае, как мне сохранить "{что бы я ни сказал}"?


person Kuldeep Ghate    schedule 16.05.2016    source источник


Ответы (7)


Для захвата речевого ввода произвольной формы (а не определенного списка возможных значений) вам необходимо использовать тип слота AMAZON.LITERAL. Документация Amazon для типа слота Literal описывает вариант использования, аналогичный вашему, когда создается навык, позволяющий взять любую фразу и опубликовать ее на сайте социальных сетей. Это делается путем создания намерения StatusUpdate:

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

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

Учитывая, что в описанном вами сценарии вы пытаетесь захватить очень динамические фразы, в документации есть пара вещей, которым вы захотите уделить особое внимание:

Если вы используете тип AMAZON.LITERAL для сбора текста произвольной формы с большими вариациями количества слов, которые могут быть в слоте, обратите внимание на следующее:

  • Чтобы охватить весь этот диапазон (минимум, максимум и все между ними), потребуется очень большой набор образцов. Постарайтесь предоставить несколько сотен или более образцов для учета всех вариаций слов значения слота, как указано выше.
  • Держите фразы внутри слотов достаточно короткими, чтобы пользователи могли произнести фразу целиком, не делая паузы.

Длительный голосовой ввод может привести к снижению точности, поэтому избегайте разработки интерфейса разговорной речи, который требует для значения слота более нескольких слов. Фраза, которую пользователь не может произнести без паузы, слишком длинна для значения слота.

Тем не менее, вот снова пример Образца высказываний из документации:

StatusUpdate опубликует обновление {прибыло | UpdateText}

StatusUpdate опубликовать обновление {время ужина | UpdateText}

StatusUpdate опубликует обновление {выходит в обед | UpdateText}

... (еще образцы, показывающие фразы из 4-10 слов)

StatusUpdate опубликует обновление {собираюсь зайти в продуктовый магазин сегодня вечером | UpdateText}

Если вы предоставите достаточно примеров разной длины, чтобы дать точную картину диапазона ожидаемых пользовательских высказываний, тогда ваше намерение сможет точно фиксировать динамические фразы в реальных случаях использования, к которым вы можете получить доступ в слоте UpdateText. Исходя из этого, вы сможете реализовать намерение, соответствующее вашим потребностям.

person Sam Hanley    schedule 16.05.2016
comment
Как мне «обучить» ЛИТЕРАЛЬНОГО, если мой ввод может быть таким же случайным, как «TBD-2019-UK», «17_TBD_UK_Leicester», «17_TBD_UK_Leicester 1», «18_TBD_UK_Leicester 2», «Chicago IL United States» и т. Д.? Это не «очень» случайная комбинация, но это довольно случайная комбинация года, города, штата, страны, некоторого другого ключевого текста в произвольном порядке. Даже если в «Образцах высказываний» указано «Чикаго, штат Иллинойс, США», LITERAL не сможет передать что-то вроде «Питтсбург, штат Пенсильвания, США», если это также не предусмотрено. Я не могу придумать ВСЕ возможные перестановки и комбинации. - person Lightning Evangelist; 07.06.2016
comment
Кроме того, пользователь может добавить больше значений. На данный момент, даже если мы решим игнорировать специальные символы, как мы можем получить речь пользователя в тексте? Проблема в том, что если не найдено подходящего намерения, вместо того, чтобы возвращать текст речи пользователя, моя Alexa просто ничего не делает. Просто гаснет без ничего. Любые идеи? Как и в комментарии Калдипа Гейта ниже, я хотел бы знать, как работает «Алекса, Саймон говорит ...». Это именно то, чего я пытаюсь достичь. Может, мне стоит открыть новую тему? - person Lightning Evangelist; 07.06.2016
comment
Вы не сможете узнать, как работает функция Simon Says, потому что это собственный навык, поэтому он, возможно, использует функции, недоступные в общедоступном SDK Skills Kit. Как сторонний разработчик, вам лучше всего просто предоставить широкий спектр типов фраз, которые вы можете ожидать от пользователя, а речевой движок сделает все возможное, чтобы экстраполировать их, чтобы быть готовым ко всему. К сожалению, это не хуже, чем у общедоступного SDK. - person Sam Hanley; 07.06.2016
comment
Я указал 428 образцов высказываний. Теперь под «широким разнообразием», если вы имеете в виду «ВСЕ перестановки и комбинации» года, города, штата, других ключевых точек данных, то это непрактично. Это серьезное ограничение. Вы знаете, можно ли программно указать высказывания? - person Lightning Evangelist; 07.06.2016
comment
Если вы указали 428 высказываний, которые представляют широкий диапазон возможных входных данных, и он все еще не улавливает ваше намерение точно, тогда ответ может заключаться в том, что платформа еще недостаточно хороша в литералах для того, что вы хотите. Вы также, к сожалению, не можете указать высказывания программно - я ищу источник, из которого я это читал. - person Sam Hanley; 07.06.2016
comment
И я надеюсь, вы понимаете, что я не пытаюсь произвести впечатление строгого или чего-то подобного - я тоже столкнулся с досадными недостатками платформы, и я знаю, насколько это может быть неприятно. Я публикую этот материал только с точки зрения человека, который потратил много времени на изучение документации и форумов Amazon в поисках цитат о том, что можно и чего нельзя делать. - person Sam Hanley; 07.06.2016
comment
Нисколько. Я ценю ваш вклад. Я просто предположил, что это слишком просто, чтобы ASK не поддерживал его, и сказал себе: «Позвольте мне сначала позаботиться о других сложных вещах», и обнаружение этого на данном этапе для меня действительно расстраивает. Что есть, то есть! - person Lightning Evangelist; 07.06.2016
comment
Важно помнить, что Amazon даже рекламирует свой речевой движок как имеющий 90% -ную точность (в настоящее время я не могу найти источник для этого, но уверен, что читал его где-то в их часто задаваемых вопросах). Причина, по которой он может быть настолько точным, заключается в том, что в значительной степени он полагается на то, что вы говорите ему, что ожидать от него. Последовательный и точный захват текста произвольной формы намного сложнее, и, как я обнаружил, платформа просто не ориентирована на такие варианты использования. - person Sam Hanley; 07.06.2016
comment
Тип AMAZON.LITERAL устарел, и навыки, которые его используют, не будут проходить сертификацию после 30 ноября 2016 г. Запрещение приложениям прослушивать случайные разговоры - это проблема конфиденциальности. Если бы это было разрешено, тогда приложение могло бы показаться невиновным, скажем, обеспечивать погоду, но затем тайно оставаться активным, слушая и записывая все, что говорится в комнате. Он может оставаться в этом состоянии до тех пор, пока не будет вынужден выйти из-за тайм-аута бездействия. - person Dan; 15.10.2016
comment
Дэн, не могли бы вы дать ссылку на информацию об Literal прекращении поддержки? - person jwfearn; 16.10.2016
comment
developer.amazon.com/public/solutions/alexa/alexa-skills-kit/ - person Tomislav Markovski; 27.10.2016
comment
Судя по отзывам разработчиков, он больше не является устаревшим: developer.amazon.com/public/solutions/alexa/alexa-skills-kit/ - person fredw; 19.03.2017

Важно: поддержка AMAZON.LITERAL прекращена с 22 октября 2018 г. Старые навыки, полученные с помощью 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"
                            }
                        }
                    ]
                }
            ]
        }
    }
}
person adam shamsudeen    schedule 16.11.2018
comment
Это спасло мне жизнь :) Большое спасибо @Adam! - person mdaddy; 13.01.2019
comment
Оно работает! не могли бы вы подробнее рассказать, как это работает? - person user2503775; 24.11.2019
comment
@ user2503775, поскольку все предложения полностью случайны, модель классификации текста будет запутана и классифицирует почти весь ввод пользователя в этом намерении. - person adam shamsudeen; 25.11.2019
comment
Это помогает добавить в languageModel внутри вашей модели взаимодействия следующее: "modelConfiguration": { "fallbackIntentSensitivity": { "level": "LOW" } }, - person Steve Nelson; 28.04.2020


по состоянию на конец 2018 года я использую SearchQuery, чтобы получить все, что говорит пользователь.

Он действительно работает, и он у меня есть в производственных системах.

Но нужно что-то спросить у пользователя и заполнить слот.

Например:

  • Определите тип слота SearchQuery с именем query (выберите любое имя)
  • Добавьте образцы высказываний в подсказки слота, например 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();
person rafinskipg    schedule 15.01.2019
comment
Почему-то сейчас это не работает. Это все еще работает? - person stonecharioteer; 27.09.2019

Обновлено: это неверный ответ. в комментариях упоминается тип Amazon.Literal слота, который должен позволять это.


Alexa в настоящее время не поддерживает доступ к необработанному речевому вводу пользователей. Это может быть возможно в будущем, или вы можете взглянуть на какой-нибудь другой API голоса в текст, такой как Google.

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

Для этого вы можете следовать одному из примеров использования настраиваемого слота на Amazon введите. Затем поместите в эту категорию все возможные слова, которые мог бы сказать пользователь.

person Alex Rouse    schedule 16.05.2016
comment
Привет, Алекс, спасибо за ответ. Есть встроенная команда «Алекса, Саймон говорит…», которая повторяет все, что говорит говорящий после этого. Мне было интересно, как в этом случае сохраняется исходный речевой ввод. - person Kuldeep Ghate; 16.05.2016
comment
Сторонние разработчики в настоящее время не имеют доступа ко всем возможностям Alexa, вы можете увидеть это в некоторых приложениях Amazon, таких как поиск музыки, а также в некоторых известных приложениях, таких как Uber, которые могут определять местоположение пользователей, но в общем приложении. разработчики не могут. Надеюсь, это изменится в будущем по мере развития платформы. - person Alex Rouse; 16.05.2016
comment
Этот ответ неверен - вы можете реализовать тип слота AMAZON.Literal, который позволит захватывать ввод произвольной формы. Тем не менее, вы должны предоставить ему множество примеров входных данных, чтобы научить его понимать, какого общего типа входные данные следует ожидать. - person Sam Hanley; 17.05.2016
comment
Я считаю, что мы не должны использовать AMAZON.Literal, поскольку это может иметь необъяснимые последствия с увеличением количества слотов и намерений. Например, если нам нужно сопоставить другие намерения, наш запрос будет случайно сопоставлен с AMAZON.Literal. Просто мой взгляд. - person AkshayM; 26.07.2018

(8/5/17) К сожалению, эта функция была удалена с Amazon с удалением AMAZON.LITERALS.

Однако, в зависимости от того, насколько вы заинтересованы в вводе данных в свободной форме, вас может удовлетворить ввод MODE, который захватывает одно слово, имя, город, номер, букву, символ и т. д. за раз и строки их вместе в одну переменную без каких-либо сообщений между ними.

Я работал над режимом ввода пароля, который можно изменить для сбора и объединения вводимых пользователем данных. Хотя ваш ввод будет медленнее, если вы оптимизируете лямбда-функцию, вы сможете добиться быстрого взаимодействия с пользователем при вводе нескольких предложений. Структура - вот что важно. Код можно легко адаптировать.

Как ввести смешанную строку с числами в Amazon Alexa Skills Kit (ASK)? https://stackoverflow.com/a/45515598/8408056

person Caleb Gates    schedule 05.08.2017

Вот лучший способ достичь того, что вы искали. Попробовав несколько методов, я получил полные слова заявления, которое задала Алекса.

Вам необходимо выполнить следующие настройки в вашем навыке Alexa (название намерения, название слота и тип слота, которые вы можете выбрать в соответствии с вашими потребностями)

Настройка намерения

Настройка намерения

Настройка специального типа слота

Настройка пользовательского типа рекламного места

После настройки навыка 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"
                }
            }
        }

Примечание *: В этом методе вам нужно будет правильно обрабатывать высказывания, если имеется более одного намерения.

person Abhijeet Abnave    schedule 05.02.2021