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