Сущности сеанса DialogFlow и преобразование значений в мою базу данных

Это немного сложно объяснить, поэтому я надеюсь, что использование примера будет наиболее эффективным.

Мы создаем службу, которая позволяет Parent поддерживать список своих Children и выполнять действия против этих Children.

Parent - это пользователь, произносящий высказывания агенту / намерению DF.

Parent добавляет своих дочерних элементов (имена) в базу данных через веб-интерфейс (не DF) ДО использования DF.

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

РОДИТЕЛЬСКИЙ СТОЛ

ID  Name
1   User A
2   User B     

ДЕТСКИЙ СТОЛ

ID  NAME  PARENT_ID
1   John  1
2   Jon   2
3   Jake  2

Фразы намерений имеют следующий формат и параметры

"Do {ACTION} for {CHILD_NAME}"

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

Например, если Пользователь А произнесет следующее:

"Do {ACTION} for John"

Как мы гарантируем, что агент извлекает «Джона», а не «Джона», когда он передает параметры исполнению?

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

Я не уверен, как это сработает в моем случае. Нельзя ожидать, что я буду поддерживать список ВСЕХ возможных имен, и даже если бы я мог, у меня было бы несколько записей для John и Jon, и все равно не было бы Я предполагаю, что агент знает, какой из них использовать.

Может быть, есть способ динамически добавлять заполнители сущностей для каждого использования и возможные значения параметров для этой сущности динамически на основе значений, которые мы храним в базе данных, но это кажется недостижимым и нереалистичным?

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


person TheJediCowboy    schedule 30.03.2019    source источник


Ответы (1)


Это был длинный вопрос, поэтому я в основном отвечу на

Как мы гарантируем, что агент извлекает «Джона», а не «Джона», когда он передает параметры исполнению?

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

User: "Do {ACTION} for John"

Agent: "Ok, I heard, 'Do {ACTION} for John.' Is that correct?"

User: "Yes"

// call updateDatabase()

У вас по-прежнему будет проблема для пользователей Google Assistant, использующих устройства без экранов, но вы можете написать дополнительную логику для обработки ответвление для возможностей поверхности, например ...

const hasScreen =
conv.surface.capabilities.has('actions.capability.SCREEN_OUTPUT');
const hasAudio =
conv.surface.capabilities.has('actions.capability.AUDIO_OUTPUT');
const hasMediaPlayback =
conv.surface.capabilities.has('actions.capability.MEDIA_RESPONSE_AUDIO');
const hasWebBrowser =
conv.surface.capabilities.has('actions.capability.WEB_BROWSER');

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

Agent: "Ok, I heard, 'Do {ACTION} for John, spelled 'J', 'O', 'H', 'N'.' Is that correct?"
person Max Wiederholt    schedule 01.04.2019