{
    "componentChunkName": "component---src-templates-doc-page-js",
    "path": "/docs/ru/NLU_core/activation/selectNLUResult/",
    "result": {"data":{"site":{"siteMetadata":{"title":"Gatsby-doc-engine"}},"markdownRemark":{"id":"2f7bc9b3-ca1e-5f85-9aad-8060203146e2","excerpt":"selectNLUResult При совместном использовании в одном сценарии нескольких типов правил активации они срабатывают в порядке убывания приоритета: Паттерны. Примеры…","html":"<h1>selectNLUResult</h1>\n<hr>\n<p>При совместном использовании в одном сценарии нескольких типов <a href=\"/1.11.7/docs/ru/NLU_core/activation/rules\">правил активации</a> они срабатывают в порядке убывания приоритета:</p>\n<ol>\n<li>Паттерны.</li>\n<li>Примеры и группы примеров.</li>\n<li>Интенты.</li>\n</ol>\n<p>Если такое поведение нежелательно, вы можете самостоятельно определить механизм выбора нужного правила при одновременном срабатывании правил разных типов.</p>\n<h2>Задание обработчика</h2>\n<p>Для настройки нужного поведения необходимо в сценарии задать обработчик <code class=\"language-text\">selectNLUResult</code> и передать его в функцию <a href=\"/1.11.7/docs/ru/JS_API/built_in_functions/bind\"><code class=\"language-text\">bind</code></a>:</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"selectNLUResult\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">$context</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n    <span class=\"token comment\">// ...</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Объект с текущим контекстом, который принимает функция-обработчик в качестве аргумента, содержит вложенный объект <code class=\"language-text\">nluResults</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\">\"patterns\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span> \r\n    <span class=\"token comment\">// Все правила активации, которые вернул классификатор на паттернах</span>\r\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\r\n  <span class=\"token property\">\"examples\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\r\n    <span class=\"token comment\">// Правила, которые вернул классификатор на примерах</span>\r\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\r\n  <span class=\"token property\">\"intents\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\r\n    <span class=\"token comment\">// Правила от классификатора на интентах</span>\r\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\r\n  <span class=\"token property\">\"selected\"</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\r\n    <span class=\"token comment\">// Выбранное правило активации</span>\r\n  <span class=\"token punctuation\">}</span>\r\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p class='warn'>Чтобы переопределить примененное правило активации, запишите нужное значение в <code class=\"language-text\">nluResults.selected</code>.</p>\n<h2>Примеры использования</h2>\n<h3>Переопределение порядка срабатывания правил</h3>\n<p>Изменим порядок срабатывания правил активации, например, так, чтобы интенты имели приоритет над паттернами.</p>\n<p class='warn'>Задать обработчик можно в разделе <a href=/1.11.7/docs/ru/JAICP_DSL/tags/declarative_tags/init  ><code class=\"language-text\">init</code></a> либо в отдельном файле с расширением <code class=\"language-text\">.js</code>, который затем нужно подключить в сценарий при помощи тега <a href=/1.11.7/docs/ru/JAICP_DSL/tags/declarative_tags/require  ><code class=\"language-text\">require</code></a>.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"selectNLUResult\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">$context</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n    <span class=\"token comment\">// Для отладки выведем результаты в лог.</span>\r\n    <span class=\"token function\">log</span><span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n\r\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>intents<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n        <span class=\"token comment\">// Если есть хотя бы один результат от классификатора на интентах, используем первый результат.</span>\r\n        $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>intents<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\r\n        <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\r\n    <span class=\"token punctuation\">}</span>\r\n\r\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>patterns<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n        <span class=\"token comment\">// Если результата от интентов нет, но есть результат от паттернов, используем паттерны.</span>\r\n        $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>patterns<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\r\n        <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\r\n    <span class=\"token punctuation\">}</span>\r\n\r\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>examples<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n        <span class=\"token comment\">// Если нет результата от интентов и паттернов, используем результат от примеров.</span>\r\n        $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>examples<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\r\n    <span class=\"token punctuation\">}</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3>Срабатывание правила с максимальным весом</h3>\n<p>Настроим порядок активации так, чтобы приоритет был у правила с наибольшим весом — вне зависимости от того, от паттернов, примеров или интентов получен результат.</p>\n<div class=\"gatsby-highlight\" data-language=\"js\"><pre class=\"language-js\"><code class=\"language-js\"><span class=\"token function\">bind</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"selectNLUResult\"</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">$context</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\r\n    <span class=\"token comment\">// Получим все результаты от всех классификаторов в виде массива.</span>\r\n    <span class=\"token keyword\">var</span> allResults <span class=\"token operator\">=</span> _<span class=\"token punctuation\">.</span><span class=\"token function\">chain</span><span class=\"token punctuation\">(</span>$context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">omit</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"selected\"</span><span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">values</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">flatten</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n\r\n    <span class=\"token comment\">// Сосчитаем максимальное значение `score` среди всех результатов.</span>\r\n    <span class=\"token keyword\">var</span> maxScore <span class=\"token operator\">=</span> _<span class=\"token punctuation\">.</span><span class=\"token function\">chain</span><span class=\"token punctuation\">(</span>allResults<span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">pluck</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"score\"</span><span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">max</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\r\n        <span class=\"token punctuation\">.</span><span class=\"token function\">value</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n\r\n    <span class=\"token comment\">// Запишем в `nluResults.selected` результат с максимальным весом.</span>\r\n    $context<span class=\"token punctuation\">.</span>nluResults<span class=\"token punctuation\">.</span>selected <span class=\"token operator\">=</span> _<span class=\"token punctuation\">.</span><span class=\"token function\">findWhere</span><span class=\"token punctuation\">(</span>allResults<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\r\n        <span class=\"token literal-property property\">score</span><span class=\"token operator\">:</span> maxScore\r\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\r\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p class='warn'>В примере используются возможности библиотеки <a href=https://underscorejs.org/ target=\"_blank\" rel=\"noopener noreferrer\">Underscore.js</a>.</p>","frontmatter":{"title":"","description":null},"headings":[{"value":"selectNLUResult"}]}},"pageContext":{"slug":"/docs/ru/NLU_core/activation/selectNLUResult/","previous":{"fields":{"slug":"/docs/ru/NLU_core/client_entities/client_entities/"},"frontmatter":{"title":"","description":null}},"next":{"fields":{"slug":"/docs/ru/NLU_core/activation/rules/"},"frontmatter":{"title":"","description":null}}}},
    "staticQueryHashes": ["1209419333"]}