Мне удалось воссоздать вашу ошибку:
Слот "{_____}" недопустим в высказывании "__________" для намерения "___".Слоты в высказывании должны иметь форму {slotName}.
Это вызвано наличием любого символа рядом с фигурными скобками , а Лексу нужны пробелы по обе стороны от "{slotName}».Вам придется полностью удалить запятую, потому что, если вы просто исправите это, поставив пробел между }
и ,
, вы получите эту ошибку:
"," в высказывании "________«для намерения» ___ содержит неподдерживаемый символ или слово.Выражение может состоять только из символов Unicode, пробелов и допустимых знаков препинания.Допустимые знаки препинания: периоды аббревиатур, подчеркивания, апострофы и дефисы.Если в вашем высказывании есть заполнитель слота, убедитесь, что он имеет формат {slotName} и имеет пробелы на обоих концах.
Кроме того, после удаления запятой вы все равно должны получить еще одну ошибку:
Имя слота "Service" использовалось более одного раза в высказывании "Мне нужны {Service} {Service} и {Service}" для намерения "FindService".
Чтобы исправить это, вы должны создать несколько слотов с разными slotNames
, но все использовать один и тот же slotType
.Используйте имена слотов, такие как: Service_one
Service_two
Service_three
.Обратите внимание, что вы не можете использовать цифры (0-9) в именах слотов, иначе вы получите ошибку:
Значение, указанное для «slots. #. Member.name», недопустимо.Элемент должен соответствовать шаблону регулярного выражения: ^ (A-Za-z?) + $
После создания этих 3-х отдельных слотов вы можете написать новое допустимое высказывание, например:
I need {Service_one} and {Service_two}
I need {Service_one} {Service_two} and {Service_three}
Нет ошибок с этой настройкой.Теперь я не знаю, насколько хорошо Лекс будет дифференцировать список высказываний №2, особенно если два слота расположены рядом друг с другом и искать одинаковые значения slotType.Поэтому вам придется проверить это и посмотреть, как Лекс заполняет слоты, а затем создать соответствующий код проверки Lambda.