Иногда необходимо, чтобы чат-бот реагировал не на все выражения, близкие по смыслу к примерам реплик, а только на четкие шаблоны.
Для этого рядом с каждым примером реплики в блоке Интенты есть переключатель в виде кавычек. Нажмите на переключатель, чтобы перейти в режим шаблонов. При этом кавычки изменятся на символ @.
Что такое шаблоны интентов
Шаблон - это последовательность слов и сущностей, которые обязательно должны встретиться в реплике пользователя, чтобы чат-бот на нее отреагировал.
При этом Graph не расширяет шаблон синонимами. Такое поведение похоже на регулярные выражения, с тем отличием, что шаблоны в Graph имеют очень простой синтаксис, адаптированный к обработке запросов на естественном языке.
Синтаксис шаблонов
Шаблоны создаются с помощью специального синтаксиса, описывающего расширенные выражения, которые должен понимать чат-бот.
Примеры шаблонов:
- Если в качестве шаблона указать одно слово, например
привет
, чат-бот будет реагировать строго на репликуПривет
. - Если указать
* привет* *
, чат-бот будет реагировать так же и на измененное слово, которое может находиться посередине реплики. Так, при этом шаблоне чат-бот отреагирует не только наПривет
, но и на репликиПриветики
,Ну привет
и другие. - Если в шаблоне использовать тильду, чат-бот будет реагировать на все словоформы в рамках части речи. Например, если указать
* ~яблоко *
, чат-бот отреагирует на реплику вродеДай мне два яблока, пожалуйста
, но не будет реагировать на словояблочко
илияблочный сок
.
Слово
Слово в шаблоне не расширяется синонимами, поэтому во фразе пользователя оно должно появиться точно в том виде, который указан в шаблоне.
Звездочка
Звездочка (*
) обозначает, что на ее месте в реплике пользователя может быть сколько угодно символов, в том числе и ни одного.
Примеры:
* привет
- любое количество слов перед словомпривет
.Чат-бот сработает на словосочетания
Ну привет
илиСкажи мне привет
, а также на словоПривет
.* заказать * стол *
- любое количество слов перед, между и после словзаказать
истол
.Чат-бот сработает на фразах
Я хочу заказать сегодня стол
илиЗаказать стол на двоих
и другие. При этом не сработает назаказать столик
.
Звездочку можно поставить в начале или в конце слова. Это будет значить, что слово в реплике пользователя может начинаться или заканчиваться любыми символами.
Примеры:
привет*
- сработает на словаПривет
,Приветы
,Приветики
и другие.*скажи*
- подойдет для реагирования наСкажи
,Подскажи
,Подскажите
,Скажите
и другие.
Звездочку нельзя использовать внутри слова! А только перед ним и после него.
Тильда
Тильда (~
) сообщает чат-боту, чтобы он реагировал на все словоформы указанного слова (в рамках части речи). Тильда ставится сразу перед словом в именительном падеже.
Пример:
~яблоко
- сработает на все формы слова Яблоко
(яблоки
, яблок
и другие). Не будет работать на слова типа яблочный
, так как это другая часть речи. Не будет реагировать на слова с суффиксами, например, яблочко
.
Тильда ставится перед начальной грамматической формой слова. Для глаголов начальной формой является несовершенный вид. Таким образом при использовании тильды с глаголами пишите, например, ~покупать
, а не ~купить
, ~спрашивать
, а не ~спросить
.
Альтернатива
Заключите несколько слов или других шаблонов в круглые скобки ()
, чтобы шаблон срабатывал на любое из этих слов в реплике пользователя.
Примеры:
(да/ага/угу)
- сработает на любое из словДа
,Ага
,Угу
.* (~яблоко / ~груша) *
- срабатывает на ввод любой формы словаяблоко
, либо любой формы словагруша
, плюс любое количество слов до и после. Например,Дай мне 5 яблок
илиХочу купить десять **груш**
.
Опция
Если какие-то слова не обязательно должны быть во фразе пользователя, то их можно заключить в квадратные скобки []
.
Пример:
* [много] (~яблоко / ~груша) *
- под этот шаблон подойдут фразы Купил много яблок
и Хочу грушу
.
Сущность
Чтобы указать, что во фразе обязательно должна присутствовать какая-то сущность, подставьте ее в шаблон, используя знак $
перед именем сущности.
Пример:
* живу * $CITY *
- сработает на фразу Я живу в Питере
.
При этом чат-бот выделит сущность города (CITY
) и создаст переменную $CITY
с данными указанного города.
Переменная
Используйте два двоеточия ::
, чтобы создать разные переменные для разных сущностей. Например, если в одной фразе присутствует сразу несколько сущностей из одного словаря при этом требуется получить несколько переменных.
Пример:
* $CITY::From * $CITY::To *
- сработает на фразы типа Питер Москва
или Билеты из Москвы до Питера
.
В этом случае чат-бот выделит сущности двух городов и сохранит их в переменные с именами $From
и $To
, чтобы можно было определить, откуда и куда пользователь ищет билеты.
Вложенность шаблонов
Шаблоны можно вкладывать друг в друга без ограничений.