2016-09-24 1 views
2

Прецедент Я пытаюсь осуществить следующим образом:Уотсон Диалог: Как сохранить позицию в диалоге потока для дополнительного пользовательского ввода

  1. Пользователь запрашивает части веб-страницы для чтения вслух, например, «читать инструкции», «читать фон», «играть в ноты» и т. д. (Watson STT)
  2. STT-запрос передан на разговор (через сервер приложений) и интерпретирован; ответ указывает тип раздела (оставляя на текущий момент приглашение, если тип раздела был неправильным)
  3. Сервер приложений отвечает пользователю, воспроизводя аудио (Watson TTS) запрашиваемого раздела
  4. Пользователь просит приостановить, остановить, продолжить или воспроизвести выбранную секцию (STT)

Это шаг № 4, с которым у меня проблемы. Если запрос приостановлен, остановитесь или продолжайте, то, возможно, это может быть обработано отдельным #intent, и сервер приложений просто передает команду соответствующему элементу управления <audio>. Однако, если запрос повторен, тогда мне нужно знать, какой тип раздела был первоначально запрошен. У меня такое ощущение, что сервер приложений должен настроить контекст для выполнения этой работы, но я не совсем понимаю, как это сделать. Любые примеры или документация очень ценятся.

ответ

1

Каждый ответ JSON - это дорожная карта разговора. Поэтому, если вы берете связанный объект System + Context из ответа, вы можете вернуть его обратно, чтобы получить более ранний ответ.

Это один из способов приблизиться к нему.

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

{ 
    "output": {}, 
    "context": { 
    "lastIntent": "<? intents[0].intent ?>", 
    "lastConfidence": "<? intents[0].confidence ?>", 
    "lastEntity": "<? entities[0].value ?>" 
    } 
} 

В настоящее время он будет работать, только если вы сохраните его как текстовое значение. Таким образом, вы не можете сделать следующее:

"confidence": <? intents[0].confidence ?>, 

В вашем состоянии узла вы можете сделать что-то вроде:

intents[0].intent == context.lastIntent 
+0

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

1

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

enter image description here

Пользователь говорит: «Прочитайте ингредиенты», которые приводит в действие #play_element + @recipeElement состояние. Затем, если они говорят «Пауза», Уотсон знает, что это относится к условию @recipeElement. Высказывание «Продолжить» или «Повтор» также относится к этому же элементу. «Стоп», однако завершает цикл. Теперь мне просто нужно выяснить, как обращаться с паузой, продолжить или воспроизвести после того, как они скажут «стоп» - в настоящее время она возвращается к условию #play_element, потому что условие Anything Else не работает.