Я пытаюсь использовать SDK Dialogflow Node (с использованием v2 API) версии 0.8.2
для создания намерения, которое выполняет заполнение слота созданной пользователем сущностью, определенной мной.
На высоком уровне,У меня есть и тип объекта (еда), который поступает из внешней базы данных, которую я не контролирую.У меня есть несколько примеров продуктов со следующими категориями -> Списки экземпляров:
Junk food -> [beer, doughnuts, pizza]
Meat, Dairy or Eggs -> [steak, 'eggs, brown', 'eggs, green', ham]
...
Я немного опасаюсь присутствия запятых и союзов / дизъюнкций в синонимах и канонических именах экземпляров, происходящих из этого внешнегобаза данных;но как человек, управляемый данными;Я бы предпочел отказаться от простой реализации, если на этом этапе есть причина.
В любом случае, главное намерение, которое я хочу сейчас, - ответить на такие вопросы, как:
do you guys have ham, doughnuts or pizza?
can I get broccoli here?
do you offer beer, steak, radishes, ketchup or asparagus?
...
Идея состоит в том,что клиент может запросить об одном или любом количестве товаров.Очевидный способ сделать это (для меня) - создать намерение с примерами обучения и указать один параметр для заполнения слотов, для которого установлено isList=true
.
Что я пытаюсь сделать более технически?
Мне нужно иметь возможность управлять агентом Dialogflow из кода с помощью Node SDK.Сущности и намерения будут генерироваться другим инструментом, который просматривает внешние API, базы данных и т. Д. И помогает мне автоматически генерировать некоторый контент для управления разговором.
Сейчас я отправляю запрос createIntent с примерно 6 примерами обучения для тестирования.Примерно так:
"intent": {
"displayName": "test-complex-list",
"trainingPhrases": [
{
"type": "EXAMPLE",
"parts": [
{
"text": "do you have "
},
{
"text": "pizza",
"entityType": "@food",
"userDefined": true,
"alias": "food"
},
{
"text": " or "
},
{
"text": "beer",
"entityType": "@food",
"userDefined": true,
"alias": "food"
},
{
"text": "?"
}
]
},
...
"parameters": [
{
"displayName": "food",
"entityTypeDisplayName": "@food",
"isList": true
}
]
...
Я получаю ответ об успешном возвращении из Dialogflow API ... ууу!
Теперь я переворачиваюсь на консоль Dialogflow для проверки, прежде чем двигаться вперед, ивведите: do you have ham, doughnuts or pizza?
в верхнюю правую область текста теста.Ответ, который я вижу, указывает, что правильное намерение было обнаружено, но я возвращаюсь: Parameter=food
и Value=[Meat, Dairy or Eggs]
.Кажется, он не подхватил мою нездоровую пищу (эй, может быть, Dialogflow полезен).
Я вспомнил, как тестировал этот вариант использования в консоли раньше, и он работал;поэтому я нажимаю «Сохранить», жду «Обучение агента завершено», а затем снова вставляю свой запрос.На этот раз значение заполнения слота составляет [ "Meat, Dairy or Eggs", "Junk Food", "Junk Food" ]
... именно то, что я ожидал.
Мой вопрос такой: : какая черная магия происходит, когда я нажимаю «Сохранить» вконсоль Dialogflow?Я экспортировал агент в файл .zip
до и после «сохранения» и вывел результаты.Похоже, единственное отличие состоит в том, что идентификаторы, которые присваиваются различным элементам агента, различны.
На самом деле нет проблем с другими моими намерениями (здесь опущены), но это, пожалуй, самое сложное.
Я подозреваю, что это ошибка в Dialogflow;но прежде чем жаловаться, я подумал, что изучу более вероятный вариант (я что-то упустил).