Перейти к основному содержимому
Версия: 3.0

Сущности, слоты и контексты

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

Системные сущности​

Извлекаются без настройки, если установлен сервис Duckling (см. раздел Требования к серверам). Если Duckling отключён, системные сущности не распознаются, а пользовательские продолжают работать.

ТипПримеры во фразеЧто получает бот
time«завтра в 15:00», «в следующий понедельник», «3 марта»Дата и время в ISO-формате, с учётом часового пояса сервера
number«пять тысяч», «12», «полтора»Число
ordinal«третий», «первое»Порядковый номер
amountOfMoney«1500 рублей», «$20»Сумма и валюта
duration«на две недели», «3 часа»Длительность
distance, volume, temperature, quantity«10 км», «2 литра», «25 градусов»Величина и единица
email, phoneNumber, url«ivan@mail.ru», «+7 900 123-45-67», «iqstore.ru»Нормализованное значение

Пользовательские сущности​

Создаются в разделе «Понимание естественного языка», вкладка «Сущности».

  • Список — набор значений с синонимами: сущность «Город» со значениями «Москва» (синонимы «мск», «москве»), «Санкт-Петербург» («питер», «спб»). Включите нечёткое совпадение, чтобы прощать опечатки. Бот получает каноническое значение («Москва»), а не то, что набрал клиент.
  • Шаблон — регулярное выражение для строго заданного формата: номер карты \d{4}, номер заявки [A-Z]{2}-\d{6}, промокод.

Сущности видны в event.nlu.entities: массив объектов с полями name (имя сущности), type (list, pattern, system), data.value (значение), meta.start/meta.end (позиция во фразе). В условии перехода: event.nlu.entities.some(e => e.name === 'Город').

Слоты​

Слот это ожидаемое место сущности в намерении: у намерения «перевод» слоты «сумма» (amountOfMoney) и «получатель» (сущность «Контакт»). Слоты добавляются на вкладке намерения: выберите имя и сущность, затем в обучающих фразах выделите слова, которые соответствуют слоту (разметка показывается цветом). Чем больше размеченных примеров, тем точнее NLU находит слот в живой речи.

Когда намерение распознано, заполненные слоты лежат в event.nlu.slots: event.nlu.slots.сумма.value. Если клиент назвал не всё, слот остаётся пустым, и его дособирает навык «Заполнение слота»: он спрашивает недостающее, проверяет ответ и хранит значение в сессии, см. «Навыки».

Контексты​

Контекст это метка, которую имеют намерения (по умолчанию все в контексте global) и вопросы-ответы. Когда у клиента активны контексты, NLU ищет намерение только среди них, а QnA отвечает только вопросами этих контекстов. Так одно и то же «да» означает разное в разных местах сценария, а вопрос «сколько стоит» внутри раздела «Кредиты» не улетает в ответ про вклады.

  • Контекст намерения задаётся в его настройках; у вопроса-ответа в поле «Контексты».
  • Действие «Добавить контекст» включает контексты для следующих сообщений на заданное число ходов (TTL), «Убрать контекст» снимает отдельные, «Сбросить контекст» возвращает клиента в global. Навык «Заполнение слота» управляет контекстами сам.
  • Текущие контексты видны в event.nlu.includedContexts и в «Панели отладки».

Как проверить​

Откройте эмулятор, напишите фразу и посмотрите «Панель отладки» → вкладка «Отладчик»: там распознанное намерение с уверенностью, список кандидатов, извлечённые сущности и слоты, активные контексты и причина, по которой платформа выбрала процесс, QnA или ничего. Если фраза не распознаётся, добавьте её как пример в намерение и дождитесь переобучения (индикатор внизу Studio).