Синтаксис шаблонов
Иногда необходимо, чтобы бот реагировал не на все выражения клиента, близкие по смыслу к примерам фраз, а только на четкие шаблоны.
Для этого при добавлении нового интента используйте шаблоны с определенным синтаксисом.
По умолчанию, когда вы переходите в редактирование блока Интенты и начинаете добавлять строки, они добавляются как примеры фраз, а не как шаблоны. Об этом свидетельствует иконка слева от каждой фразы. Чтобы сделать фразу шаблоном, нажмите на иконку напротив каждой фразы. Она изменится на иконку .
Что такое шаблоны фраз
Шаблон — это последовательность слов и сущностей, которые обязательно должны встретиться во фразе клиента, чтобы бот на нее отреагировал.
При этом Aimylogic не будет расширять шаблон синонимами. Это похоже на регулярные выражения, но только с тем отличием, что шаблоны в Aimylogic имеют очень простой синтаксис, адаптированный к обработке запросов на естественном языке.
Синтаксис шаблонов
Чтобы написать шаблон, нужно использовать специальный синтаксис. С помощью него можно описать очень гибкие выражения, которые должен понимать ваш бот.
Вот несколько простых примеров:
привет
Этот шаблон, состоящий только из одного слова, позволяет боту реагировать только на точную фразу «привет». Если фраза будет отличаться хотя бы на один символ, она не будет распознана ботом.
* привет* *
В данном случае у слова «привет» могут быть разные окончания, а также до и после него может быть любое количество слов.
Этот шаблон позволяет боту реагировать на фразы наподобие «привет», «приветы», «приветики», «ну привет Алиса», «снова привет», «скажи мне привет» и подобные.
* ~яблоко *
Шаблон включает все словоформы существительного «яблоко», а также любое количество слов до и после данного слова.
Этот шаблон сработает, например, на фразе «дай мне два яблока, пожалуйста».

Ниже представлен весь синтаксис шаблонов Aimylogic.
Слово
Слово в шаблоне не расширяется синонимами, поэтому во фразе клиента оно должно появиться именно в том виде, в котором указано в шаблоне.

Звездочка
Этот символ в шаблоне означает, что на его месте во фразе клиента может быть сколько угодно символов, в том числе и ни одного.
* привет
В этом шаблоне может быть любое количество слов перед словом «привет». Сработает на словосочетания «ну привет» или «скажи мне привет», а также просто на слово «привет».

* заказать * стол *
Шаблон позволяет вводить любое количество слов перед, между и после слов «заказать» и «стол».
Сработает на фразах «я хочу заказать сегодня стол», «заказать стол на двоих» и подобных. Не сработает на фразу «заказать столик».

Шаблон привет*
сработает на слова «привет», «приветы», «приветики» и так далее. Так как вы не указали, что до слова и после слова могут быть другие слова, то на словосочетания, где есть слово «привет» или производные от него, бот реагировать не будет.

Шаблон *скажи*
подойдет под «скажи», «подскажи», «подскажите», «скажите» и т. п.

Тильда
Используйте тильду ~
, чтобы бот реагировал на все словоформы указанного слова в рамках части речи. Поставьте тильду непосредственно перед словом в именительном падеже.
К примеру, шаблон ~яблоко
сработает на все формы слова «яблоко» — «яблоки», «яблок» и т. д. Однако есть ряд ограничений в работе такого шаблона:
- Не будет работать на слова другой части речи. Например, «яблочный».
- Не будет реагировать на слова с суффиксами. Например, «яблочко».

Кроме того, правило срабатывает на всех словоформах омонимов — слов, которые пишутся одинаково, но имеют разные значения или морфологическую форму.
Например, шаблон ~печь
сработает на словоформах существительного «печь» («печи», «печью») и глагола «печь» («пеку», «печешь»).
~покупать
, а не ~купить
, ~спрашивать
, а не ~спросить
.Альтернатива
Заключите несколько слов или других шаблонов в круглые скобки, чтобы шаблон срабатывал на любое из этих слов во фразе клиента.
Разделите слова знаком /
или |
.
Шаблон (да/ага/угу)
или (да|ага|угу)
сработает на любое из слов «да», «ага», «угу».

Шаблон * (~яблоко / ~груша) *
срабатывает на ввод любой формы слова «яблоко» либо любой формы слова «груша». При этом во фразе может присутствовать любое количество слов до и после. Например, «дай мне 5 яблок» или «хочу купить десять груш».

Перестановка
Заключите фразу в фигурные скобки, чтобы бот распознавал шаблон вне зависимости от порядка слов во фразе, которую напишет клиент.
Шаблон {меня зовут *}
сработает на ввод любой фраз, в которой обязательно есть слова «меня» и «зовут», а также любое количество других слов вне зависимости от порядка. Например, шаблон сработает на фразы «меня зовут Саша», «Саша меня зовут» и так далее.

Опция
Если какие-то слова не обязательно должны быть во фразе клиента, то их можно заключить в квадратные скобки.
Под шаблон * [много] (~яблоко / ~груша) *
подойдут фразы «купил много яблок» и «хочу грушу».
Сущность
Чтобы указать, что во фразе обязательно должна присутствовать какая-то сущность, подставьте ее в шаблон, используя знак $
перед именем сущности.
Шаблон * живу * $CITY *
сработает на фразу «я живу в Питере».
При этом бот выделит сущность города $CITY
и создаст переменную $CITY
с данными указанного города.
Переменная
Если вы ожидаете в одной фразе клиента сразу несколько сущностей из одного словаря, а вам нужно получить несколько переменных, то используйте два двоеточия, чтобы создать разные переменные для разных сущностей.
Шаблон * $CITY::From * $CITY::To *
сработает на фразы наподобие «Питер Москва» или «билеты из Москвы до Питера».
При этом бот выделит сущности двух городов и сохранит их в переменные с именами $From
и $To
, чтобы вы могли определить, откуда и куда клиент ищет билеты.
Вложенность шаблонов
Вы можете использовать шаблоны внутри других шаблонов без ограничений.
Например, если вы ожидаете, что клиент захочет купить билет в какой-либо город, можете создать подобный шаблон:
{(~заказать/~купить/~билет) * $DATETIME * [$CITY]}