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

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

Для этого вам понадобится сервис 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.**

![](/files/-LzfLl0nTSwhT0VJXl27)

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

![](/files/-LynOB_1sksEjB0asfC4)

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

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

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

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

![](/files/-LzfdsfQ1nbAA1gWW4g2)

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

![Список возможных вариантов обращения пользователя](/files/-Lynedip-umWGlMmveQe)

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

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

![](/files/-MQpetdyn3yvCJvQ7A40)

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

![](/files/-MQpfEfcKxMPCTZE4rvS)

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

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

![](/files/-LynetH_yk1alGR0biOT)

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

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

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

![](/files/-Lzfgj1ymrsPQenKZJZL)

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

![](/files/-Lynh0HqVQFr8F3q4yOX)

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

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

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

![](/files/-LzfleiCDoFO2IDcvtiQ)

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

{{ $nlpLastReponseText }}

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

![](/files/-LzfoFaOBctrJ0kQ1Vss)

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

* Нажмите на кнопку ***Добавить пункт меню***;
* В поле *Код* укажите букву "а" и в фигурных скобках значение 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*.

![](/files/-MR4_BzMwgrt2x_Lg7pw)

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://metabot.gitbook.io/documentation/dialogflow/obuchenie-bota.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
