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