# Обучение бота

Для полноценной работы чат-бота с распознаванием намерений пользователя, необходимо создать и настроить базу знаний, по запросам к которой бот будет давать правильные ответы и выстраивать логику взаимодействия с пользователем.

Для этого вам понадобится сервис Dialogflow. На нем необходимо авторизоваться с помощью аккаунта Google.

{% hint style="info" %}
Как выполнять регистрацию и  интеграцию с соответствующим намерением из базы знаний в DF рекомендуем  ознакомиться в разделах [Регистрация с Dialogflow](https://metabot.gitbook.io/documentation/dialogflow/registraciya-v-dialogflow) и [Интеграция с Dialogflow](https://metabot.gitbook.io/documentation/dialogflow/integraciya-s-dialogflow).
{% endhint %}

После авторизации на сервисе Dialogflow и создании нового *Проекта / Агента* дальнейшая работа по обучению бота будет производиться в разделе **Intents.**

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LzfKwcfPuEXWAp6RksI%2F-LzfLl0nTSwhT0VJXl27%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=06d74344-aba1-427b-b039-00a840f87f93)

Создаем **Намерения**, с помощью которых бот сможет распознавать текстовые запросы пользователя и подбирать правильные ответы из базы знаний. По кнопке **Create Intent** или нажав на **+** около Intents,  создаем новое намерени&#x435;**.**

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LynJV3rFmS6m1bXOqM6%2F-LynOB_1sksEjB0asfC4%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=45f4795d-0c35-432f-a933-d7706d5e7e14)

Например, создадим намерение **Приветствие** для стартового скрипта бота.

* В поле *Intent name* указать заголовок намерения. например, "Приветствие".
* В разделе *ADD TRAINING PHRASES* описываем перечень возможных вариантов обращения пользователя к чат-боту или синонимы ключевых слов.

{% hint style="info" %}
Если заголовок намерения состоит более чем из одного слова, то слова в заголовке должны быть соединены знаком нижнего подчеркивания "\_".
{% endhint %}

{% hint style="info" %}
Заголовок намерения необходимо указывать такой же, как и параметр *NLP Намерение* в свойствах создаваемых скриптов, при этом регистр первых и последующих букв не важен.
{% endhint %}

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LzfXgeXNn2FLTsJUG3u%2F-LzfdsfQ1nbAA1gWW4g2%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=195b750f-4afe-44fd-b605-462a4fbb5f8d)

{% hint style="info" %}
Галочку на *NLP Action* следует установить, если вы хотите, чтобы в данном скрипте была возможность распознавания других намерений, если же ваш скрипт является переходящим или не предполагает свободного ввода текста, то этот пункт можно не заполнять.
{% endhint %}

![Список возможных вариантов обращения пользователя](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LynOvkNN1Dg44kHdfgU%2F-Lynedip-umWGlMmveQe%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=df4ad764-73ad-4b1b-a63e-a7544a64767b)

{% hint style="warning" %}
При обучении бота, чем больше вы введете однородных по смыслу запросов и синонимов ключевых слов, тем более качественно ваш бот будет обучен.
{% endhint %}

Рекомендуем включить проверку на пересечение обучаемых фраз в различных **Намерениях**. Для этого в настройках *Проекта / Агента* установите активность параметра проверки.

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-MQounEAKLFw4gdK-29O%2F-MQpetdyn3yvCJvQ7A40%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=350546d7-4d58-4858-8d1d-4e669f809555)

Отслеживать проверку на пересечение необходимо в разделе ***Validation.***

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-MQounEAKLFw4gdK-29O%2F-MQpfEfcKxMPCTZE4rvS%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=e52a8ede-b596-4c02-b0ef-d8f5f4bfae82)

При обучении бота необходимо избегать лишних слов и фраз, таких как "пожалуйста", "будьте добры" и так далее.

{% hint style="warning" %}
Так же при обучении бота намерению важно стараться не допускать фраз, которые могут повторяться в соседних намерениях, иначе бот из базы знаний может выбрать некорректный ответ.
{% endhint %}

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LynOvkNN1Dg44kHdfgU%2F-LynetH_yk1alGR0biOT%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=5f9354f2-c985-43a0-bceb-39f4f0cf9a5d)

Знаки вопроса и прочие знаки препинания в конце предложения здесь прописывать не нужно. Применение вариантов с перестановкой слов приветствуется.&#x20;

На момент создания и описания намерения, а также и в дальнейшей работе доступна возможность редактирования намерения.

После ввода всех вариантов возможных обращение необходимо сохранить намерение, нажав на кнопку *Save.*

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LzfXgeXNn2FLTsJUG3u%2F-Lzfgj1ymrsPQenKZJZL%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=6ad4cd79-3ef4-45e1-b17a-37583563472b)

В процессе обучения бота нужно проверять правильность вводимых значений. Для этого, в поле *Try it now* необходимо указать один из введенных вариантов обращения и система должна предоставить ссылку на нужное намерение. Например, при варианте вопроса "До скольки вы открыты" выдается намерение "Часы\_работы".

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LynffR1SdHdpxj8q4LQ%2F-Lynh0HqVQFr8F3q4yOX%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=465610ae-8cba-49cf-a027-6e1bfe6072bd)

Для того, чтобы бот отвечал на обращение пользователя не описанные в намерениях, необходимо создать скрипт **Живой разговор:**

* Укажите название скрипта. Например: "Живой разговор";
* Установить опцию *Включить NLP*;
* Установить интеграцию с намерением в поле *NLP намерение* - установить значение *" **.\*** "*;
* Установить опцию *Использовать определение NLP Action*;
* Установить интеграцию с функцией SmallTalk  в поле *NLP Action*

  &#x20;\- установить значение *" **.\*** "*;
* Остальные параметры без изменения.

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LzfXgeXNn2FLTsJUG3u%2F-LzfleiCDoFO2IDcvtiQ%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=3f58135c-c00b-4b80-babd-0f5874a74663)

{% hint style="info" %}
Для того, чтобы вывести Small Talk ответ бота по распознанному NLP Action, то в скрипт нужно добавить команду [Отправить текст](https://metabot.gitbook.io/documentation/komandy/otpravit-tekst) и в поле *Текст*  указать&#x20;

{{ $nlpLastReponseText }}

Таким образом бот пришлет пользователю сообщение с ответом, полученным от DialogFlow Small Talk.
{% endhint %}

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-LzfXgeXNn2FLTsJUG3u%2F-LzfoFaOBctrJ0kQ1Vss%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=608bfb0a-3c50-4e35-be80-1a3e64f92b53)

В блоке **Меню** необходимо добавить пункт меню ***Повторяем***, применяя следующие параметры:

* Нажмите на кнопку ***Добавить пункт меню***;
* В поле *Код* укажите букву "а" и в фигурных скобках значение 300, например, а{300}. Это регулярное выражение обезопасит чат-бот от случайно введенного не заложенного в сценарии варианта, который может привести к остановке бота.

{% hint style="info" %}
а{300} - это означает, что пользователь должен ввести символ "а" триста раз, чтобы попасть в этот пункт меню.
{% endhint %}

Однако, поскольку мы включили опцию *Включить NLP* у скрипта, то ввод от пользователя в первую очередь будет отправлен в DF для распознавания намерения и только в случае, если намерение не будет найдено, ввод от пользователя будет использован для поиска пункта меню с соответствующим кодом.

{% hint style="warning" %}
Так сейчас работает интеграция с NLP-машиной на платформе Metabot. Если в скрипте включена опция NLP, то при достижении меню ввод от пользователя вначале проверяется в базе знаний NLP и только потом по меню.
{% endhint %}

* Установить опцию *Скрыть код;*
* В поле *Подпись пункта меню* укажите, например, фразу  "Повторяем";
* Установите опцию *Скрыть весь пункт меню*

{% hint style="info" %}
Именно для того, чтобы логика распознавания намерения вначале проверялась в базе знаний NLP, мы установили у пункта меню опцию *Скрыть весь пункт меню*. Таким образом меню существует в логике, но не видно на экране. "Заглушка" в виде a{300} означает, что работает только NLP распознавание по базе и пользователь никогда не попадет в пункт меню.
{% endhint %}

В **Dialogflow** нужно включить функцию **Живой разговор**, где в свою очередь его тоже можно обучить. Для этого нужно перейти в раздел **Small talk**, активировав параметр *Enable*.

![](https://1621485802-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lof4a3yX4z_pjUWqMhw%2F-MR4ZIXVyYLPY17QyMoF%2F-MR4_BzMwgrt2x_Lg7pw%2F%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png?alt=media\&token=a7406f13-751e-4bc1-8e7d-6ec3f78a5ade)

{% hint style="success" %}
Поздравляем Вас с успешным обучением бота распознавать свободное общение бота с пользователями в сервисе Dialogflow!
{% endhint %}
