Как предотвратить переход пользователя к другому намерению в середине разговора? - PullRequest
0 голосов
/ 29 января 2019

Допустим, у меня есть 2 основных намерения, т.е. Set Appointment и Cancel Appointment.

У каждого из намерений есть свои дополнительные вопросы и так далее.Когда пользователь находится в цепочке следования за намерением, Set Appointment, я хочу запретить переход пользователя к другому намерению, если он / она говорит "cancel appointment for abc"

, поскольку обанамерения имеют пустой контекст ввода, поэтому их можно вызывать из вызова Google Assistant, т. е. Tell XYZ App to set appointment for..... Похоже, что это позволяет пользователю переключаться между намерением в середине разговора.

Как мне ограничить это поведение?Или здесь есть какие-то лучшие дизайнерские практики?

1 Ответ

0 голосов
/ 29 января 2019

Прежде всего, помните, что Intents представляют то, что говорит пользователь , не то, что вы делаете с тем, что говорит пользователь.

Во-вторых, помните, чтоПользователи могут изменить ход разговора в любое время.Поэтому имеет смысл, что, если они начнут добавлять встречу, они могут захотеть отменить эту встречу.

Лучший подход заключается в том, что, если они пытаются отменить в середине записи, вы сами решаете, какхочу справиться с этим изменением в разговоре.А потом просто ответь так.Вы можете изменить треки.Или вы можете сказать что-то вроде «давайте сначала добавим эту новую встречу, а затем мы можем отменить старую».По этой схеме:

  • У вас есть одно намерение, которое соответствует «установить встречу на 10 утра»
  • В вашем обработчике:
    • Если вы не предпринимаете никаких действий, вы начнете запрашивать их о дополнительной информации о настройке встречи или что-то еще.
    • Если вы уже назначаете встречу, попросите их, если они хотят изменить время на 10 часов утра
    • Если вы 'Отмените встречу, скажите им, что вы будете говорить об отмене старого, когда закончите с новым.

Я склонен придерживаться этого подхода вв большинстве (хотя и не во всех) случаях.Это позволяет мне кодировать логику и позволяет определить лучший способ ответа на основе всего состояния.

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

  • Намерение, без входного контекста, которое соответствует «установить встречу на 10 утра».Обработчик этого намерения установит контекст «set» и начнет запрашивать дополнительную информацию.
  • Намерение, с вашим «установленным» входным контекстом, который соответствует «установить встречу на 10 утра».Это может сделать что-то вроде перезапуска приглашения или просто изменить время, которое они запрашивают.
  • Намерение, с вашим входным контекстом «отмена», которое соответствует «установить встречу на 10 утра».Этот обработчик сообщит им, что вы спросите об отмене старых встреч в конце.

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

...