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