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