{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/NLU_core/slot_filling/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"ee7f961f-a0d8-5578-8ed7-74ba9ff3b3bc","excerpt":"Slot Filling Slot Filling (слот-филлинг) — процесс дозапроса информации для выполнения запроса клиента. Полученные данные в ходе дозапроса доступны для…","html":"<h1>Slot Filling</h1>\n<hr>\n<p><em>Slot Filling (слот-филлинг)</em> — процесс дозапроса информации для выполнения запроса клиента. Полученные данные в ходе дозапроса доступны для использования в сценарии.</p>\n<p><em>Slots (слоты)</em> — данные, которые клиент передает с запросом или в процессе дозапроса. У каждого слота есть обязательные атрибуты: <code class=\"language-text\">Имя</code>, <code class=\"language-text\">Тип</code>.</p>\n<p>В данной статье рассматриваются вопросы:</p>\n<ul>\n<li><a href=\"#%D0%97%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%BB%D0%BE%D1%82%D0%BE%D0%B2-%D0%B8%D0%B7-%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0\">Заполнение слотов из запроса</a>.</li>\n<li><a href=\"#%D0%9F%D0%BE%D0%B4%D0%BA%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F-%D1%81%D0%BB%D0%BE%D1%82-%D1%84%D0%B8%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3%D0%B0\">Подключение модуля слот-филлинга</a>.</li>\n<li><a href=\"#%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC-%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8-%D1%83%D1%82%D0%BE%D1%87%D0%BD%D1%8F%D1%8E%D1%89%D0%B8%D1%85-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D0%BE%D0%B2\">Механизм обработки уточняющих вопросов</a>.</li>\n<li><a href=\"#%D0%9F%D1%80%D0%B5%D1%80%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%81%D0%BB%D0%BE%D1%82-%D1%84%D0%B8%D0%BB%D0%BB%D0%B8%D0%BD%D0%B3%D0%B0\">Прерывание слот-филлинга</a>.</li>\n</ul>\n</br>\n<h4>Заполнение слотов из запроса</h4>\n<p class='warn'><a href=/1.10.3/docs/ru/platform_ux/nlu_core_caila/intents  >Подробнее о заполнении слотов в интерфейсе</a></p>\n<p>Если рассматривать <a href=\"/1.10.3/docs/ru/NLU_core/intent\"><code class=\"language-text\">интент</code></a> как функцию, которую клиент может вызвать, <code class=\"language-text\">слот</code> является переменной, параметром этой функции.</p>\n<p>Например, для интента <code class=\"language-text\">/Погода</code> примером фразы может быть <code class=\"language-text\">Погода в Лондоне сегодня</code> и два слота <code class=\"language-text\">City</code> и <code class=\"language-text\">Date</code>.\r\nДля примера фразы в слот <code class=\"language-text\">City</code> попадет — Лондон, в слот <code class=\"language-text\">Date</code> — сегодня.</p>\n<p>При этом заполненные слоты будут переданы в сценарий в переменной <code class=\"language-text\">$parseTree._&lt;ИмяСлота></code>. В значении переменной будет ассоциированное значение, при его отсутствии — текст.</p>\n<p>Использование заполненных слотов в сценарии:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\">    <span class=\"token keyword\">state:</span>\r\n        <span class=\"token storageType\">intent!:</span> /Погода\r\n        <span class=\"token variableParameter\">a:</span> Погода в <span class=\"token constantCharacter\">{{ $parseTree._City }}</span> на <span class=\"token constantCharacter\">{{ $parseTree._Date }}</span></code></pre></div>\n</br>\n<h5>Атрибут <code class=\"language-text\">Тип</code></h5>\n<p>Каждый слот должен иметь <code class=\"language-text\">Тип</code>, который соответствует сущности <code class=\"language-text\">Тип = сущность</code>. Этот тип определяет тип данных, которые попадут в слот. Вы можете использовать как <a href=\"/1.10.3/docs/ru/NLU_core/entities\">системные, так и кастомные сущности</a>.</p>\n<p>Например, для слота <code class=\"language-text\">Date</code> с типом <code class=\"language-text\">@zb.datetime</code>: слово \"сегодня\" из запроса клиента попадет в сущность <code class=\"language-text\">@zb.datetime</code> и будет помещено в слот <code class=\"language-text\">Date</code>.</p>\n<p class='warn'>Если в интенте присутствует несколько слотов с одинаковым типом, то они будут заполнены последовательно.</p>\n<p>При необходимости обработать произвольное количество слотов одного типа в запросе или переменные с разными типами сущностей, обращайтесь к структуре <a href=\"/1.10.3/docs/ru/NLU_core/entities\"><code class=\"language-text\">$entities</code></a>, в которую будут переданы все найденные сущности в исходном виде.</p>\n</br>\n<h5>Атрибут <code class=\"language-text\">Обязательность</code></h5>\n<p>Каждый слот имеет атрибут <code class=\"language-text\">Обязательность</code>:</p>\n<ul>\n<li>Если слот обязателен и при этом уточняющие вопросы не указаны, то система не будет выдавать этот интент без заполненного слота в ответах.</li>\n<li>Если слот обязателен и при этом уточняющие вопросы указаны, то система может вернуть интент без этого слота. Интент будет обработан модулем слот-филлинга, клиенту будут заданы уточняющие вопросы.</li>\n</ul>\n<p class='warn'><a href=/1.10.3/docs/ru/platform_ux/nlu_core_caila/intents  >Перед переходом к процессу слот-филлинга ознакомьтесь подробнее с заполнением слотов</a></p>\n</br>\n<h5>Массивы в слотах</h5>\n<p>Для обработки запросов с повторяющимися сущностями в сценарии необходимо в заполненном слоте <code class=\"language-text\">$parseTree._&lt;ИмяСлота></code> иметь массив.</p>\n<p>Переведите переключатель <em>Массив</em> в активное положение, чтобы в слот помещались все сущности данного типа, оформленные как массив:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1149px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 13.541666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABJ0AAASdAHeZh94AAAAe0lEQVQI122PWw7DMAgEff+T1mmoX6R+gbdy2lj56MdoWGmRwHCucFlwlI7eBSJfVHXNF0MFerP8wWzbE+QjQmKklMDMCCGAiFaePphhyWOnF+zu4HyA99N+dSam1gJVwRjjvGq6946c85kvgIFHVLxLg42/j1o7u/fdDwsC6eh8PXZ7AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"массивы в слотах\"\n        title=\":size=950\"\n        src=\"/1.10.3/static/cd994f2781bf15df01e18763f03266e4/72372/Screenshot_2.png\"\n        srcset=\"/1.10.3/static/cd994f2781bf15df01e18763f03266e4/e85cb/Screenshot_2.png 480w,\n/1.10.3/static/cd994f2781bf15df01e18763f03266e4/d9199/Screenshot_2.png 960w,\n/1.10.3/static/cd994f2781bf15df01e18763f03266e4/72372/Screenshot_2.png 1149w\"\n        sizes=\"(max-width: 1149px) 100vw, 1149px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<p>Если переключатель <em>Массив</em>:</p>\n<ul>\n<li><strong>Не активен</strong>: в слот помещается первое обработанное значение данной сущности.</li>\n<li><strong>Активен</strong>: в слот помещаются все сущности данного типа, оформленные как массив. Если обнаружено только одно значение сущности, оно также оформляется как массив.</li>\n</ul>\n</br>\n<h4>Подключение модуля слот-филлинга</h4>\n<p>Для подключения модуля слот-филлинга укажите в сценарии в файле <code class=\"language-text\">main.sc</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">require:</span> slotfilling/slotFilling.sc\r\n  module = sys.zb-common</code></pre></div>\n</br>\n<h4>Механизм обработки уточняющих вопросов</h4>\n<p>Система будет задавать уточняющие вопросы по очереди в порядке их определения для всех слотов, которые остались незаполненными.</p>\n<p>В ответах клиента будет производиться поиск сущностей, соответствующих слотам. Если подходящие сущности были найдены, то соответствующий слот будет заполнен.</p>\n<p>После того, как все слоты были заполнены, управление передается в основной сценарий со всеми заполненными слотами в <code class=\"language-text\">$parseTree</code>.</p>\n<p class='tip'>Выйти из сценария слот-филлинга возможно только, либо ответив на все вопросы, либо командой <code class=\"language-text\">/start</code>.</p>\n<p>Рассмотрим сценарий:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\">    <span class=\"token keyword\">state:</span>\r\n        <span class=\"token storageType\">intent!:</span> /Погода\r\n        <span class=\"token variableParameter\">a:</span> Погода в <span class=\"token constantCharacter\">{{ $parseTree._City }}</span> на <span class=\"token constantCharacter\">{{ $parseTree._Date.value }}</span></code></pre></div>\n<p>При этом слоты заполнили следующим образом:</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1150px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 16.666666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABJ0AAASdAHeZh94AAAAgklEQVQI111OWw7CMAzr/Q+KxAbb8miTrOqMWihIfFhWYst2YiJsB2ERA2eDmSEi4B6IcJgVuBWEvzV3/+g/nuh3yjmDmYdZVUFE6L8esEvBsjEeR8aTFKoCIh6+7v9HD01z0XVdg0VkrAMaVm247Sfu0rDyiXr60HvhDGitfVFrxQtqFujydF1o8QAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"заполнение слотов\"\n        title=\":size=950\"\n        src=\"/1.10.3/static/320265389d4cd6eaf2f71b63b2cfe89e/33d1d/Screenshot_1.png\"\n        srcset=\"/1.10.3/static/320265389d4cd6eaf2f71b63b2cfe89e/e85cb/Screenshot_1.png 480w,\n/1.10.3/static/320265389d4cd6eaf2f71b63b2cfe89e/d9199/Screenshot_1.png 960w,\n/1.10.3/static/320265389d4cd6eaf2f71b63b2cfe89e/33d1d/Screenshot_1.png 1150w\"\n        sizes=\"(max-width: 1150px) 100vw, 1150px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<p>Здесь <code class=\"language-text\">@City</code> — кастомная сущность, в которой мы указали все города, доступные для прогноза погоды.</p>\n<p>Запросы клиента:</p>\n<ol>\n<li><code class=\"language-text\">Погода на завтра в Москве</code>: слоты заполнены, бот сразу предоставит ответ.</li>\n<li><code class=\"language-text\">Погода на завтра</code>: слот <code class=\"language-text\">City</code> не заполнен, будут заданы уточняющие вопросы. Как только будет дан корректный ответ, управление перейдет в сценарий, бот даст ответ.</li>\n<li><code class=\"language-text\">Погода в Москве</code>: слот <code class=\"language-text\">Date</code> не заполнен, будут заданы уточняющие вопросы. Как только будет дан корректный ответ, управление перейдет в основной, бот даст ответ.</li>\n</ol>\n</br>\n<h4>Прерывание слот-филлинга</h4>\n<p>Условия прерывания процесса слот-филлинга вы можете сконфигурировать в файле <a href=\"/1.10.3/docs/ru/common/bot_structure/configuration_file\"><code class=\"language-text\">chatbot.yaml</code></a> в секции <a href=\"/1.10.3/docs/ru/common/bot_structure/configuration_file#injector\"><code class=\"language-text\">injector</code></a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">injector</span><span class=\"token punctuation\">:</span>\r\n    <span class=\"token key atrule\">slotfilling</span><span class=\"token punctuation\">:</span>\r\n        <span class=\"token key atrule\">maxSlotRetries</span><span class=\"token punctuation\">:</span> <span class=\"token number\">1</span>\r\n        <span class=\"token key atrule\">stopOnAnyIntent</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">true</span>\r\n        <span class=\"token key atrule\">stopOnAnyIntentThreshold</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0.2</span></code></pre></div>\n<p>Здесь параметры:</p>\n<ul>\n<li><code class=\"language-text\">maxSlotRetries</code> — количество попыток для одного слота. Если клиент ответил указанное количество раз и слот не был заполнен, процесс слот-филлинга будет прерван. Последняя фраза клиента будет обработана в сценарии бота.</li>\n<li><code class=\"language-text\">stopOnAnyIntent</code> — принимает булево значение <code class=\"language-text\">true/false</code>, параметр прерывания процесса слот-филлинга по интенту.</li>\n<li><code class=\"language-text\">stopOnAnyIntentThreshold</code> — параметр соответствия, задающий минимально необходимую похожесть фразы на один из классов. Является параметром прерывания процесса слот-филлинга по интенту.</li>\n</ul>\n<h5>Прерывание по интенту</h5>\n<p>Если <code class=\"language-text\">stopOnAnyIntent: true</code> и запросу клиента соответствует интент с параметром <code class=\"language-text\">confidence</code> выше, чем  <code class=\"language-text\">stopOnAnyIntentThreshold</code>, слот-филлинг будет прерван по интенту.</p>\n<p class='warn'>Параметр <code class=\"language-text\">confidence</code> — степень уверенности платформы JAICP, что введенная фраза относится к определенному интенту.</p>\n<p>Обратите внимание, что важно учитывать контекст начала слот-филлинга. Например, если при прерывании в стейт с соответствующим интентом невозможно попасть (например, тег <code class=\"language-text\">intent</code> не глобальный), то запрос попадет в <code class=\"language-text\"> event!: noMatch</code>.</p>\n<p>Если параметры для прерывания в конфигурационном файле <code class=\"language-text\">chatbot.yaml</code> не указаны, слот-филлинг будет прерываться согласно параметрам по умолчанию:</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">injector</span><span class=\"token punctuation\">:</span>\r\n    <span class=\"token key atrule\">slotfilling</span><span class=\"token punctuation\">:</span>\r\n        <span class=\"token key atrule\">maxSlotRetries</span><span class=\"token punctuation\">:</span> <span class=\"token number\">2</span>\r\n        <span class=\"token key atrule\">stopOnAnyIntent</span><span class=\"token punctuation\">:</span> <span class=\"token boolean important\">false</span>\r\n        <span class=\"token key atrule\">stopOnAnyIntentThreshold</span><span class=\"token punctuation\">:</span> <span class=\"token number\">0.2</span></code></pre></div>","frontmatter":{"title":"","description":null},"headings":[{"value":"Slot Filling"}]}},"pageContext":{"slug":"/docs/ru/NLU_core/slot_filling/","previous":{"fields":{"slug":"/docs/ru/NLU_functions/NLU_functions/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/NLU_core/rule_activation/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}