DialogFlow: управление идентификацией намерений при конфликте контекста - PullRequest
0 голосов
/ 09 декабря 2018

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

Например,Допустим, я поддерживаю предоставление информации о погоде и рейсах, для каждого я построил соответствующее намерение.Рассмотрим следующий диалог:

  • Пользователь: я хочу забронировать рейс на сегодня.
  • Агент: Куда?
  • Пользователь: Какая погода в Риме?
  • Агент: В Риме 21 ° C.
  • Пользователь: Значит, в Риме.

На данном этапе я хотел бы совершить полетбыть распознанным и получить «Рим» в качестве параметра, в дополнение к ранее сохраненному параметру «сегодня». Однако я не могу сказать, будет ли система определять полет или прогноз погоды, поскольку предложение может применяться к обоим - в зависимости отв контексте.

Мне удалось получить желаемое поведение, определив основные и 2 контекстно-зависимых параметра для каждого объекта диалога (т. е. полет с полетом в качестве выходного контекста, время полета с полетом в качестве входного и выходного контекстапункт назначения полета с полетом в качестве входного и выходного контекста и то же самое для погоды), установив продолжительность жизни 1 для каждого контекста и восстановив его в коде, как только другое намерение будет завершено - чтобы сохранитьУже заполненные слоты, а также для поддержки таких фраз, как «Рим» и понимание их контекстуальны.Я также подумал о динамическом изменении приоритета намерений, но пока не уверен, возможно ли это.

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

1 Ответ

0 голосов
/ 15 декабря 2018

Я думаю, что ваш подход сбивает с толку то, что разговоры не обязательно подобны стеку, а Intents не «выполняются» в модели Dialogflow.Содержание просто соответствует тому, что пользователь сказал , с возможностью сузить это по контексту, если это необходимо.Возможность задавать контексты позволяет вам определять направление обработки ответа пользователя, но вы все равно должны использовать эти входные данные, чтобы определить, на что реагирует пользователь.

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

...