Диалоговый поток: есть ли способ предотвратить запуск намерений первого уровня? - PullRequest
1 голос
/ 31 января 2020

У меня есть набор намерений, которые могут быть вызваны.

  • включить свет
  • выключить свет
  • закрыть дверь
  • открыть дверь

Для каждого намерения я иметь набор последующих целей, например,

  • включить свет
    • выбрать источник света (входной контекст light-on-followup)
    • выбрать запасной источник света (входной контекст light-on-followup)

Я хочу убедиться, что, если пользователь вызвал turn light on намерение, и я спрашиваю его which light source do you want to turn on?, он может вызвать select light source или если высказывание не соответствует тому, что резервное намерение вызвано.

Проблема, с которой я сталкиваюсь: если пользователь говорит turn light off, находясь в диалоговом окне turn light on, резервное намерение не инициируется, а вместо этого пользователь вызывает намерение высшего порядка turn light off. Я хочу предотвратить это. Есть ли способ сделать это?

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

1 Ответ

2 голосов
/ 31 января 2020

Прежде всего - вы уверены, что хотите этого?

Представьте себе следующий сценарий:

User:  Turn the light on
Agent: Which light do you want to turn on?
User:  Oh, no, I meant turn it off

Это не необычный разговор, который может иметь место. Если пользователь передумает или поймет, что имел в виду что-то другое, он должен быть в состоянии это сделать. Хороший принцип проектирования VUI заключается в том, что пользователь может вести разговор в любом направлении в любое время, и вы должны позволить ему делать это в максимально возможной степени.

Dialogflow настроен на работу таким образом, намеренно пытаясь находите совпадения, которые имеют смысл в общем контексте, а не заставляют пользователей по узкому пути по умолчанию.

Однако, если вы действительно хотите сделать то, что вы просите, вы можете попробовать что-то вроде этого:

  • Настройка входного контекста (в нашем примере назовем его root) для всех элементов уровня root, ожидаемых пользователем сегодня
  • Когда root - Уровень Intent распознан, для его Выходного контекста установлено значение root, равное 0, что означает, что ни один из них не будет совпадать.
  • Для Выходного контекста любого из последующих элементов снова установите контекст root Таким образом, могут быть распознаны только root -уровни.
...