Как записать несколько значений одного объекта в IBM watson assistant после запроса слота?
В моем приложении Watson Assistant я хочу захватить несколько объектов в контексте, а также иметь слот, чтобы задать вопрос пользователю. Вот пример:
- Пользователь: Я хочу лететь из Торонто в Бостон
И Ватсон правильно определяет:
intent: 'booking', @city:'Toronto', @city:'Boston'
Теперь у меня есть слот, который запрашивает класс бронирования:
- Уотсон (Слот): Какой класс вы хотели бы?
- Пользователь: Эконом
На данный момент контекст имеет только первое значение для сущности @city, т. Е. Торонто. Из моего поискового запроса я понимаю, что могу получить доступ к @city[0] и @city 1. И я попытался отразить это в контексте, выполнив следующее, но ценность, которую я получаю, - Нет.
Как я могу правильно захватить оба города @city:Toronto, @city:Boston и одновременно сущность @class:economy?
3 ответа
Возвращаясь к этому, поскольку в Watson Assistant были внесены изменения, чтобы сделать это проще.
1. Создайте две сущности. @fromCity
а также toCity
,
2. Заполните каждую сущность одинаковыми значениями. Названия локаций.
3. Создайте свое намерение с помощью вопросов, как показано ниже.
I want to fly from Toronto to Boston
I have to get to Boston from Toronto ASAP.
I want to get a flight to New York
I'm in Texas and need to fly to San Diego
4. На странице намерений выберите каждый город и отметьте его как @fromCity
или же @toCity
, Это создает контекстные объекты.
Теперь, когда он тренируется, он будет понимать сущности в контексте предложения. Он также поймет, в каких местах вы его не обучали.
Интеллектуальные слоты - когда есть несколько объектов одного типа и больше слотов, которые соответствуют объекту одного типа, тогда, когда слот соответствует первому объекту, он будет "съеден" и недоступен для другого слота - следовательно, следующий слот соответствие с тем же типом объекта будет соответствовать любому другому объекту того же типа. Чтобы добиться того, что вы хотите сделать, просто определите слоты следующим образом (чтобы оба они соответствовали просто @city
юридическое лицо).
Я отвечаю здесь не только для вас, но и для себя, так как у меня был этот вопрос пару раз. Вот как я справился с этим.
Вы можете использовать SPEL, язык выражений для watson, чтобы сопоставить все литеральные значения, соответствующие объекту, и поместить их в переменную контекста, например, внутри конфигурации json:
"context": {
"ReferenceNumber": "@ReferenceNumber.literal",
"ReferenceNumbersRunAdd": "<?$ReferenceNumbersMultiple.addAll(entities['ReferenceNumber'].![literal]) ?>"
}