Перейти к основному содержимому

Синтаксис шаблонов

Иногда необходимо, чтобы бот реагировал не на все выражения клиента, близкие по смыслу к примерам фраз, а только на четкие шаблоны.

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

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

Что такое шаблоны фраз

Шаблон — это последовательность слов и сущностей, которые обязательно должны встретиться во фразе клиента, чтобы бот на нее отреагировал.

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

Синтаксис шаблонов

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

Вот несколько простых примеров:

  • привет

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

  • * привет* *

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

Этот шаблон позволяет боту реагировать на фразы наподобие «привет», «приветы», «приветики», «ну привет Алиса», «снова привет», «скажи мне привет» и подобные.

  • * ~яблоко *

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

Этот шаблон сработает, например, на фразе «дай мне два яблока, пожалуйста».

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

Ниже представлен весь синтаксис шаблонов Aimylogic.

Слово

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

Звездочка

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

* привет

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

* заказать * стол *

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

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

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

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

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

предупреждение
Звездочка используется только перед словом или после него. Внутри слова ее использовать нельзя.

Тильда

Используйте тильду ~, чтобы бот реагировал на все словоформы указанного слова в рамках части речи. Поставьте тильду непосредственно перед словом в именительном падеже.

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

  • Не будет работать на слова другой части речи. Например, «яблочный».
  • Не будет реагировать на слова с суффиксами. Например, «яблочко».

Кроме того, правило срабатывает на всех словоформах омонимов — слов, которые пишутся одинаково, но имеют разные значения или морфологическую форму.

Например, шаблон ~печь сработает на словоформах существительного «печь» («печи», «печью») и глагола «печь» («пеку», «печешь»).

подсказка
Тильда ставится перед начальной грамматической формой слова. Для глаголов начальной формой является несовершенный вид. Поэтому если вы хотите использовать тильду, то нужно писать ~покупать, а не ~купить, ~спрашивать, а не ~спросить.

Альтернатива

Заключите несколько слов или других шаблонов в круглые скобки, чтобы шаблон срабатывал на любое из этих слов во фразе клиента.

Разделите слова знаком / или |.

Шаблон (да/ага/угу) или (да|ага|угу) сработает на любое из слов «да», «ага», «угу».

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

Перестановка

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

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

предупреждение
Клиент должен написать во фразе все слова, указанные в шаблоне, чтобы шаблон сработал.

Опция

Если какие-то слова не обязательно должны быть во фразе клиента, то их можно заключить в квадратные скобки.

Под шаблон * [много] (~яблоко / ~груша) * подойдут фразы «купил много яблок» и «хочу грушу».

Сущность

Чтобы указать, что во фразе обязательно должна присутствовать какая-то сущность, подставьте ее в шаблон, используя знак $ перед именем сущности.

Шаблон * живу * $CITY * сработает на фразу «я живу в Питере».

При этом бот выделит сущность города $CITY и создаст переменную $CITY с данными указанного города.

Переменная

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

Шаблон * $CITY::From * $CITY::To * сработает на фразы наподобие «Питер Москва» или «билеты из Москвы до Питера».

При этом бот выделит сущности двух городов и сохранит их в переменные с именами $From и $To, чтобы вы могли определить, откуда и куда клиент ищет билеты.

Вложенность шаблонов

Вы можете использовать шаблоны внутри других шаблонов без ограничений.

Например, если вы ожидаете, что клиент захочет купить билет в какой-либо город, можете создать подобный шаблон:

{(~заказать/~купить/~билет) * $DATETIME * [$CITY]}