Вызов подчиненного бота
Описание работы
Предположим, в рамках задачи по настройке бота продавца у вас имеются следующие исходные данные:
Компания продает окна
У компании существует 5 таблиц от разных поставщиков с прайсами
Необходимо вызывать 2 запроса в СРМ - об оформлении заказа, о статусе заказа
Инструкция имеет длинное описание на 3 листа А4
База знаний содержит не менее 50 файлов
В случае, такой ситуации, мы получим довольно большой объем контекста, т.к. у нас будет большая инструкция со своими условиями + 5 описанных функций для таблицы + 2 описанные функции для вызова веб-хуков и функция по работе с базой знаний. В рамках такого объема модель со 100% вероятностью будет забывать важные пункты либо инструкции, либо будет плохо работать с таблицами и веб-хуками допуская иногда не значительные, а иногда довольно значимые ошибки. За счет наличия ошибок вся "магия" работы с моделью будет теряться.
Проблемы потери внимания могут здесь быть решены за счет следующего решения:
Для работы с таблицами создается отдельный бот, в котором эти таблицы создаются. В основном боте таблиц не будет.
Для работы с веб-хуками создается тоже отдельный бот.
На некоторые блоки так же создаются свои боты.
В случае, когда необходимо вызвать конкретных ботов они вызываются путем написания стандартных вызовов функций (подробнее в статье о функциях).
Таким образом, вместо 8 больших функций у основного бота, мы получим только 3 лаконичные (или чуть больше, если мы решим выделить куски инструкции в отдельные блоки).
Это со 100% вероятностью сразу повысит точность работы модели, а так же сократит себестоимость. Т.к. в первом случае, до оптимизации мы передавали бы большой объем функций при каждом запросе. А после оптимизации отдельные куски вызываются только в конкретный момент времени.
Создание подчиненного бота
На первом этапе нам необходимо создать стандартного бота:


Стандартную инструкцию для подчиненного бота нужно убрать, т.к. элементы приветствия, тональности, общие сведения и пр. могут не иметь функционального значения, и он должен ориентироваться только на выполнение конкретной задачи. Исходя из примера выше опишем ему персональную инструкцию:

Время ожидания в секундах ставим в 0, т.к. тут задержки нам не нужны.
Внутри инструкции максимально лаконично описываем суть конкретной задачи, которую бот должен делать. Можно даже добавить, что он технический бот, и его задача возвращать ответ в конкретном формате, например, в JSON.
В данном случае, мы описали, что задача бота рассчитывать стоимость в таблицах.
Теперь нужно разобраться, как главный бот будет вызывать подчиненного, об этом ниже.
Добавление подчиненного бота главному
Необходимо в основном боте добавить подчиненного бота через раздел Действия:

Название действия - просто название для отображения в списке.
Название функции - это название функции, которое будет видеть бот. Данное название указывается на английском без пробелов. Название должно отображать общий смысл действия.
Описание функции - более подробное описание смысла действия. По данному описанию Савви будет понимать, когда ее нужно вызывать.
Добавление шага
Внутри Действия можно вызывать последовательность действий, используя разные типы вызовов, поэтому это называется шагами.
При добавлении шага, мы можем выбрать один из трех вариантов: вызов веб-хука, вызов подчиненного бота, или вызов таблицы. Про первый вариант мы уже рассказывали в предыдущей главе, в данном случае нас интересует Вызов подчиненного бота:

При заполнении формы шага ваша задача только выбрать подчиненного бота:

Вызов подчиненного бота
В целом, заполнив описание и названия действия этого уже достаточно для того, чтобы бот автоматически вызывался из основного бота. Но на всякий случай, для того, чтобы нивелировать возможные неочевидные для основного бота случаи, мы можем в инструкции прямо указать в какой момент нам нужно вызывать подчиненного бота, обратившись к нему по названию функции указанной в Действии:

Анализ вызовов подчиненных ботов
При внедрении Савви самый долгий процесс - это отладка и корректировка инструкций. Подробно по работе с отладкой мы разбирались в отдельном разделе. Отладка подчиненных ботов работает по похожему принципу и мы рассмотрим два способа: через чат и через файл экспорта.
Анализ через чат

В ответе, который ожидаемо был сформирован подчиненным ботом нажимаем на кнопку со значком i и смотрим в открывшееся модальное окно:

Здесь мы видим:
Выполняется функция - название функции, которая была вызвана
Инструмент - видим ответ от функции - в данном случае от подчиненного бота
Ответ, который был получен от подчиненного бота изменяется главным ботом - это нормально и правильно.
Анализ через экспортный файл
Находим нужный диалог с основным ботом через вкладку История и через пункт Действия -> Экспорт выгружаем файл:

Файл сохраняется в папку Загрузки, открываем его как обычный файл:

В файле экспорт в более удобном виде отображаются вызовы функций.
По кнопке i можно получать информацию о результатах ответа функции:

А, если функция представляет из себя вызов подчиненного бота, то мы увидим рядом с иконкой i иконку в виде головы робота. При нажатии на нее у нас откроется отдельное модальное окно с отдельным экспортом именно по этому боту:

Дальше анализ происходит аналогично, если он что-то вызывал, какие-то функции внутри себя, то мы это увидим так же ввиде служебных надписей (на скрине выше они отсутствуют).
Last updated
Was this helpful?