{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/NLU_core/entities/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"d15624c9-15d4-5389-945b-0aa0c3d4abb5","excerpt":"Сущности Сущность — единица NLU-ядра CAILA. Представляет собой последовательность слов, объединенных некоторым смыслом или правилом. Например: имена, дата и…","html":"<h1>Сущности</h1>\n<hr>\n<p>Сущность — единица NLU-ядра CAILA. Представляет собой последовательность слов, объединенных некоторым смыслом или правилом. Например: имена, дата и время, местоположение и пр.</p>\n<p>CAILA предоставляет для работы:</p>\n<ul>\n<li><em>Системные сущности</em> — встроенные сущности, которые разработчик может активировать в редакторе сущностей.</li>\n<li><em>Пользовательские сущности</em> — сущности, которые разработчик заполняет и настраивает в редакторре сущностей самостоятельно.</li>\n</ul>\n<p class='warn'><a href=/1.10.3/docs/ru/platform_ux/nlu_core_caila/entities  >Подробнее о редакторе сущностей</a></p>\n</br>\n<h3>Использование сущностей</h3>\n<h4>Напрямую</h4>\n<p>Все сущности, найденные во фразе будут доступны в сценарии через переменную <code class=\"language-text\">$jsapi.context().entities</code> или <code class=\"language-text\">$entities</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\">q!:</span> Информация по продукту *\r\n        <span class=\"token variableParameter\">a:</span> Информация по продукту: <span class=\"token constantCharacter\">{{ $entities[0].value }}</span></code></pre></div>\n</br>\n<h4>В интентах</h4>\n<p>Сущности можно использовать в <a href=\"/1.10.3/docs/ru/NLU_core/intent\">интентах</a>.</p>\n<p class='warn'>Подробнее о <a href=/1.10.3/docs/ru/platform_ux/nlu_core_caila/intents  >заполнении слотов в интентах</a> и <a href=/1.10.3/docs/ru/NLU_core/slot_filling  >процессе Slot filling</a></p>\n<p>При активации интента данные по соответствующему слоту попадут в переменную <code class=\"language-text\">$parseTree._&lt;имя слота></code>.</p>\n<p>В этой переменной будет записан исходный текст, по которому найдено совпадение, либо данные <a href=\"/1.10.3/docs/ru/NLU_core/data\"><code class=\"language-text\">DATA</code></a>, заданные для данной сущности в редакторе сущностей.</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> Action: <span class=\"token constantCharacter\">{{ $parseTree._Action }}</span>, Product: <span class=\"token constantCharacter\">{{ $parseTree._Product }}</span>\r\n\r\n    <span class=\"token keyword\">state:</span>\r\n        <span class=\"token storageType\">intent:</span> /продать\r\n        <span class=\"token variableParameter\">a:</span> Action: <span class=\"token constantCharacter\">{{ $parseTree._Action }}</span>, Product: <span class=\"token constantCharacter\">{{ $parseTree._Product }}</span></code></pre></div>\n</br>\n<h4>В паттернах</h4>\n<p>Сущности можно использовать в <a href=\"/1.10.3/docs/ru/Patterns/about_patterns\">паттернах</a>, ссылаясь на них как <code class=\"language-text\">@&lt;имя сущности></code> или <code class=\"language-text\">@&lt;имя сущности>::&lt;имя слота></code>.</p>\n<p>Для сущности, указанной в паттерне, автоматически создается слот, и она попадает в дерево разбора <a href=\"/1.10.3/docs/ru/JS_API/variables/parseTree\"><code class=\"language-text\">$parseTree</code></a>. Значение сущности будет доступно в сценарии как <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\">q!:</span> * @Product::p1 *\r\n        <span class=\"token variableParameter\">a:</span> Информация по продукту: <span class=\"token constantCharacter\">{{ $parseTree._p1 }}</span></code></pre></div>\n<p>Кроме того, вы можете использовать <a href=\"/1.10.3/docs/ru/Patterns/converters\">конвертеры</a> в сущностях. Для этого необходимо задать сущность через именованный паттерн с помощью тега <a href=\"/1.10.3/docs/ru/JAICP_DSL/tags/declarative_tags/patterns\"><code class=\"language-text\">patterns</code></a>, а затем объявить в нем конвертер. Например:</p>\n<div class=\"gatsby-highlight\" data-language=\"sc\"><pre class=\"language-sc\"><code class=\"language-sc\"><span class=\"token keyword\">patterns:</span>\r\n    $four = @four || converter = function() {return 4}</code></pre></div>\n<p>В этом примере мы создали сущность <code class=\"language-text\">@four</code>, в которой объявили конвертер <code class=\"language-text\">converter</code>. Функция конвертера вернет значение <code class=\"language-text\">4</code>.</p>\n</br>\n<h4>В примерах фраз классификатора STS</h4>\n<p>Сущности можно использовать в примерах фраз <a href=\"/1.10.3/docs/ru/classificator/work_with_classificator\">классификатора STS</a>, ссылаясь на них как <code class=\"language-text\">@&lt;имя сущности></code> или <code class=\"language-text\">@&lt;имя сущности>::&lt;имя слота></code>.</p>\n<p>Для сущности, указанной в примере, автоматически создается слот, и она попадает в дерево разбора <a href=\"/1.10.3/docs/ru/JS_API/variables/parseTree\"><code class=\"language-text\">$parseTree</code></a>.</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\">e!:</span> @Pizza::p2\r\n        <span class=\"token variableParameter\">a:</span> Информация о пицце: <span class=\"token constantCharacter\">{{ $parseTree._p2 }}</span></code></pre></div>\n</br>\n<h4>В сущностях</h4>\n<p>В JAICP сущности могут ссылаться на другие сущности.</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-%D0%BF%D0%BE%D0%BB%D1%8F-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\">заполнении поля <em>Значение</em></a>;</li>\n<li><a href=\"#%D0%97%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%BE%D0%BB%D1%8F-DATA\">заполнении поля <em>DATA</em></a>.</li>\n</ul>\n<h5>Заполнение поля <em>Значение</em></h5>\n<p>Рассмотрим пример заполнения адреса клиента. Адрес состоит из двух составных частей: улица и номер дома.</p>\n<p>В меню проекта перейдите на вкладку <em>CAILA > Сущности > Мои сущности</em> и создайте сущности:</p>\n<ul>\n<li><code class=\"language-text\">street_name</code> с паттернами:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Ленина\r\nШкольная\r\nЦентральная</code></pre></div>\n<ul>\n<li><code class=\"language-text\">street</code> с паттерном:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Улица @street_name</code></pre></div>\n<p>Теперь создадим сущность <code class=\"language-text\">address</code>, которая будет ссылаться на сущность <code class=\"language-text\">street</code> и на системную сущность <a href=\"/1.10.3/docs/ru/NLU_core/duckling\"><code class=\"language-text\">@duckling.number</code></a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">@street дом @duckling.number</code></pre></div>\n<p>Теперь допустим, что клиент вводит сообщение <em>Улица Ленина</em>. Поле <em>Значение</em> будет заполнено следующим образом:</p>\n<ul>\n<li><code class=\"language-text\">Ленина</code> у сущности <code class=\"language-text\">street_name</code>;</li>\n<li><code class=\"language-text\">Улица Ленина</code> у сущности <code class=\"language-text\">street</code>.</li>\n</ul>\n<p>Если клиент вводит сообщение <em>Улица Школьная дом 15</em>, то <em>Значение</em> будет заполнено так:</p>\n<ul>\n<li><code class=\"language-text\">Школьная</code> у сущности <code class=\"language-text\">street_name</code>;</li>\n<li><code class=\"language-text\">Улица Школьная</code> у сущности <code class=\"language-text\">street</code>;</li>\n<li><code class=\"language-text\">Улица Школьная дом 15</code> у сущности <code class=\"language-text\">address</code>.</li>\n</ul>\n</br>\n<h5>Заполнение поля <em>DATA</em></h5>\n<p>Допустим, у нас есть свой интернет-магазин, который занимается продажей фруктов и овощей. Будем использовать сущности, чтобы из запроса клиента выделить, какие именно овощи и фрукты он хочет приобрести.</p>\n<p>В меню проекта перейдите на вкладку <em>CAILA > Сущности > Мои сущности</em> и создайте сущности:</p>\n<ul>\n<li><code class=\"language-text\">fruit</code> с паттернами:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">(яблок*|ренет*)\r\n(банан*)\r\n(лимон*)</code></pre></div>\n<ul>\n<li><code class=\"language-text\">vegetable</code> с паттернами:</li>\n</ul>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">(картошк*|картох*|картофель)\r\n(томат*|помидор*)</code></pre></div>\n</br>\n<p>Кроме того, в поле <a href=\"/1.10.3/docs/ru/NLU_core/data\"><em>DATA</em></a> для каждого паттерна добавим значение сущности в формате <code class=\"language-text\">JSON</code>. В это поле можно указать любую информацию, которая может быть нужна для сценария. В нашем случае мы будем указывать характеристики <code class=\"language-text\">name</code> и <code class=\"language-text\">type</code>, которые отвечают за название и тип продукта.</p>\n<p>Например, для паттерна <code class=\"language-text\">(банан*)</code> укажите:</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\r\n    <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"banana\"</span><span class=\"token punctuation\">,</span>\r\n    <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"fruit\"</span>\r\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Сделайте то же самое для каждого паттерна сущности <code class=\"language-text\">vegetable</code>. Например:</p>\n<div class=\"gatsby-highlight\" data-language=\"json\"><pre class=\"language-json\"><code class=\"language-json\"><span class=\"token punctuation\">{</span>\r\n    <span class=\"token property\">\"name\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"potato\"</span><span class=\"token punctuation\">,</span>\r\n    <span class=\"token property\">\"type\"</span><span class=\"token operator\">:</span> <span class=\"token string\">\"vegetable\"</span>\r\n<span class=\"token punctuation\">}</span></code></pre></div>\n</br>\n<p>Теперь объединим эти сущности в сущность <code class=\"language-text\">grocery</code>. Создайте сущность <code class=\"language-text\">grocery</code> и в поле <em>Справочник</em> укажите паттерны <code class=\"language-text\">@vegetable</code> и <code class=\"language-text\">@fruit</code>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1915px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 44.79166666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABvUlEQVQoz4WRS2tTQRiGzx8QXEoU3UiSmtpL2lyaVBAquHAjrly4sLuKUASliypYlSKh1YIb/4KIuPdPuHUhaInJOaExOc2Zy5lzSR7J0BZbvHzw8L4w8PDNjPP5yzdMnGBGECUpdkYjhsPh3xmNiKIIYwyh1oRRjIhSBlLj3LqzzNqLBqvrGzx48pz7D9d4/+EjWmuU0ugwtP0kYRgeIzKGfq+Hk60tceHKDTKVa5yvXef01CLrjR3cfocfbptut0uv1/svvu/zfXcXZ/LmXXKP3nJmZZvMvVecWn7J03ef0HLAXreLFAIlhU0pDxAC8RtBIFBK0Ww2cQqlGvmZEvmZeS4Vy5y9OMFmY5skju0VhA7pqxChDfsqtATa2Dc8whjSNKXVauHk5xbIzlbJFqtMlOpkcpfZ3HpNkiR4nscgEARSIpWyOUZIZTc6RErJvtJ4nc6BsFglNxbO18hkJ2nsvLGfHcexzVAr/jVD4KdJGfh9nFyxQna2ciQ8l5vi8bNN+r5Pq+3ieh1arkvb82z/E23Xww00X909nOnaVSs6lI5zvHWhvEihXKdQqh/vJxmfzS0wfXuFpdUNfgHGUTYplJWMqQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"Сущность grocery\"\n        title=\"Сущность grocery\"\n        src=\"/1.10.3/static/a3ce2af2f832a441b5392ff5663b9db5/c72f7/Screenshot_3.png\"\n        srcset=\"/1.10.3/static/a3ce2af2f832a441b5392ff5663b9db5/e85cb/Screenshot_3.png 480w,\n/1.10.3/static/a3ce2af2f832a441b5392ff5663b9db5/d9199/Screenshot_3.png 960w,\n/1.10.3/static/a3ce2af2f832a441b5392ff5663b9db5/c72f7/Screenshot_3.png 1915w\"\n        sizes=\"(max-width: 1915px) 100vw, 1915px\"\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</br>\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> Start\r\n    <span class=\"token storageType\">q!:</span> $regex&lt;/start>\r\n    <span class=\"token variableParameter\">a:</span> Здравствуйте! В нашем магазине представлен широкий ассортимент овощей и фруктов. Что вы хотите?\r\n\r\n    <span class=\"token keyword\">state:</span> Grocery\r\n        <span class=\"token storageType\">q!:</span> * @grocery *\r\n        <span class=\"token variableParameter\">script:</span>\r\n            $reactions.answer(\"Название продукта: <span class=\"token constantCharacter\">{{ $parseTree._grocery.name }}</span>\");\r\n            $reactions.answer(\"Тип продукта: <span class=\"token constantCharacter\">{{ $parseTree._grocery.type }}</span>\");</code></pre></div>\n<p>Таким образом, если клиент напишет сообщение <em>Картошку</em>, то это сообщение будет распознано сущностью <code class=\"language-text\">vegetable</code>, на которую ссылается сущность <code class=\"language-text\">grocery</code>. Поле <em>DATA</em> у сущности <code class=\"language-text\">grocery</code> заполнится содержимым поля <em>DATA</em> сущности <code class=\"language-text\">vegetable</code>. Бот выведет сообщения:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Название продукта: potato\r\nТип продукта: vegetable</code></pre></div>\n</br>\n<h3>Заполнение массива $entities</h3>\n<p>Рассмотрим пример наличия нескольких вариантов совпадения при поиске сущности.</p>\n<p>Создадим <a href=\"/1.10.3/docs/ru/platform_ux/nlu_core_caila/entities\">пользовательскую сущность</a> <code class=\"language-text\">@City</code>. В справочник сущности поместим два значения <code class=\"language-text\">Нижний Новгород</code> и <code class=\"language-text\">Великий Новгород</code>. При запросе клиента <code class=\"language-text\">Новгород</code> бот должен уточнить, какой именно город пользователь подразумевал.</p>\n<p class='warn'>Для этого необходимо, чтобы в массив <code class=\"language-text\">$entities</code> попали все значения сущности.</p>\n<p>При помощи <a href=\"/1.10.3/docs/ru/NLU_core/CAILA_direct_API/CAILA_direct_API\">метода CAILA API</a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">PUT    /cailapub/api/caila/p/{accessToken}/entities/{entityId}</code></pre></div>\n</br>\n<p>Добавим параметр для сущности <code class=\"language-text\">@City</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">{\r\n  \"fuzzySearch\": true    // позволяет находить и помещать в массив несколько значений\r\n}</code></pre></div>\n<p>Теперь в <code class=\"language-text\">$context.entities</code> будет храниться список из значений <code class=\"language-text\">Нижний Новгород</code> и <code class=\"language-text\">Великий Новгород</code>, и бот может задать уточняющий вопрос клиенту.</p>","frontmatter":{"title":"","description":null},"headings":[{"value":"Сущности"}]}},"pageContext":{"slug":"/docs/ru/NLU_core/entities/","previous":{"fields":{"slug":"/docs/ru/NLU_core/intent/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/NLU_core/duckling/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}