Вызов подчиненного бота

Описание работы

Предположим, в рамках задачи по настройке бота продавца у вас имеются следующие исходные данные:

  • Компания продает окна

  • У компании существует 5 таблиц от разных поставщиков с прайсами

  • Необходимо вызывать 2 запроса в СРМ - об оформлении заказа, о статусе заказа

  • Инструкция имеет длинное описание на 3 листа А4

  • База знаний содержит не менее 50 файлов

В случае, такой ситуации, мы получим довольно большой объем контекста, т.к. у нас будет большая инструкция со своими условиями + 5 описанных функций для таблицы + 2 описанные функции для вызова веб-хуков и функция по работе с базой знаний. В рамках такого объема модель со 100% вероятностью будет забывать важные пункты либо инструкции, либо будет плохо работать с таблицами и веб-хуками допуская иногда не значительные, а иногда довольно значимые ошибки. За счет наличия ошибок вся "магия" работы с моделью будет теряться.

Проблемы потери внимания могут здесь быть решены за счет следующего решения:

  1. Для работы с таблицами создается отдельный бот, в котором эти таблицы создаются. В основном боте таблиц не будет.

  2. Для работы с веб-хуками создается тоже отдельный бот.

  3. На некоторые блоки так же создаются свои боты.

  4. В случае, когда необходимо вызвать конкретных ботов они вызываются путем написания стандартных вызовов функций (подробнее в статье о функциях).

Таким образом, вместо 8 больших функций у основного бота, мы получим только 3 лаконичные (или чуть больше, если мы решим выделить куски инструкции в отдельные блоки).

Это со 100% вероятностью сразу повысит точность работы модели, а так же сократит себестоимость. Т.к. в первом случае, до оптимизации мы передавали бы большой объем функций при каждом запросе. А после оптимизации отдельные куски вызываются только в конкретный момент времени.

Создание подчиненного бота

На первом этапе нам необходимо создать стандартного бота:

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

  1. Время ожидания в секундах ставим в 0, т.к. тут задержки нам не нужны.

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

В данном случае, мы описали, что задача бота рассчитывать стоимость в таблицах.

Теперь нужно разобраться, как главный бот будет вызывать подчиненного, об этом ниже.

Добавление подчиненного бота главному

Необходимо в основном боте добавить подчиненного бота через раздел Действия:

Название действия - просто название для отображения в списке.

Название функции - это название функции, которое будет видеть LLM-модель. Данное название указывается на английском без пробелов. Название должно отображать общий смысл действия.

Описание функции - более подробное описание смысла действия. По данному описанию Савви будет понимать, когда ее нужно вызывать.

Сообщение об ошибке - сообщение, которое будет получать Савви от действия, в случае, если на стороне веб-хука вернется ошибка. Может быть пустым, в этом случае Савви получит текст ошибки от URL-адреса, на который отправляется веб-хук.

Добавление шага

Внутри Действия можно вызывать последовательность действий, используя разные типы вызовов, поэтому это называется шагами.

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

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

Вызов подчиненного бота

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

Анализ вызовов подчиненных ботов

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

Анализ через чат

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

Здесь мы видим:

  • function - название функции, которая была вызвана

  • arguments - параметры, которые были переданы в функцию

  • response - ответ от функции - в данном случае от подчиненного бота

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

Анализ через экспортный файл

  1. Находим нужный диалог с основным ботом через вкладку История и через пункт Действия -> Экспорт выгружаем файл:

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

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

По кнопке i можно получать информацию о результатах ответа функции:

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

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

Last updated

Was this helpful?