бот-каркас / LUIS - контекст диалога теряется, когда служба работает на нескольких машинах - PullRequest
0 голосов
/ 09 сентября 2018

У нас есть локальное (не лазурное) развертывание бота с использованием среды MS bot. В настоящее время служба работает на трех машинах, каждая из которых обслуживает одну конечную точку API. Все работает нормально, когда у нас есть служба, работающая только на одной машине. Однако, если мы запустим его на всех трех, контекст разговора может потеряться. Например, у нас есть поток:

  1. Пользователь говорит, что хочет сделать х
  2. Бот совпадает с правильным намерением LUIS и запрашивает дополнительную информацию
  3. Пользователь предоставляет необходимую информацию (IP-адрес)
  4. Бот запускает метод, чтобы найти информацию, которую он хочет, и возвращает ее им. Мы делаем это с помощью context.Wait ().

Если у нас есть служба, работающая на нескольких машинах, иногда это происходит так:

  1. машина A обрабатывает шаги 1 и 2
  2. контроллер на машине B получает ответ, который пользователь дает на шаге 3, и, я полагаю, потому что у него нет контекстной машины, с которой машина A имела, он отправляет этот текст в LUIS вместо вызова метода, который должен быть вызван. У LUIS нет намерения, соответствующего IP, и возникает ошибка.

Каков наилучший способ обработки контекста диалога, когда служба работает на нескольких машинах? Context.Forward? И / или другие идеи?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

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

0 голосов
/ 09 сентября 2018

Немного странный вопрос. Способ, которым работает LUIS, заключается в том, что он сначала проверяет намерение, а затем обнаруживает соответствующие сущности для намерения, в результате чего мы получаем прогноз для предоставления ответа. Независимо от того, какую службу вы используете на своем локальном хосте, вы должны иметь в виду, что ключевой языковой процессор работает в облаке Azure. SDK - всего лишь реализации. Таким образом, он может упростить связь между интерфейсом чата (в вашем случае это будет эмулятор бота) и службой приложений LUIS (MS Cognitive Services). Мне все еще неясно, о какой архитектуре вы упоминаете.

...