Руководство по Савви
English
  • ВВЕДЕНИЕ
  • БЫСТРЫЙ СТАРТ
  • ОСНОВНЫЕ НАСТРОЙКИ
    • Системная инструкция
      • Лучшие практики
        • Правила написания инструкций
        • Способы повышения точности и качества ответов
        • Отладка инструкций
        • Оптимизация стоимости
        • Отправка изображений в чат
      • Переменные
      • Функции
      • Мультиязычность
      • Типовые ошибки
    • Дополнительные настройки
      • Маскирование персональных данных
      • Фоллоу-апы
      • Пользовательские переменные
      • Структурированные ответы (отправка картинок ботом)
    • Оповещения от Савви
      • Настраиваемые уведомления в ТГ
  • База знаний
    • База знаний
      • Прямые вопросы
      • Большие файлы
  • Работа с таблицами
    • Таблицы (CSV-XLS / Google)
      • Получение данных
      • Запись/изменение данных
  • ДЕЙСТВИЯ
    • Веб-хуки
    • Мультиагентность
      • Вызов подчиненного бота
      • Переключение активного бота
  • Обработка файлов
  • Чтение URL-ссылок
  • КАНАЛЫ
    • CRM-системы
      • amoCRM
      • Kommo
      • Битрикс24
    • Чаты для сайта
      • Jivo
    • Мессенджеры
      • WhatsApp
      • Telegram
    • Социальные сети
      • Instagram*
      • VK
    • Маркетплейсы
      • Wildberries
      • OZON
      • Яндекс.Маркет
      • Авито
    • Хелпдеск-системы
      • UseDesk
      • PlanFix
    • Омниканальные платформы
      • Umnico
    • Персональный канал (API)
      • Отправка сообщений
      • Получение сообщений
  • ИНТЕГРАЦИИ
    • YCLIENTS
    • ALTEGIO
    • Google-календарь
  • Аналитика
    • Анализ графиков
  • ПАРТНЕРАМ
    • Партнерская программа
    • Обучение
  • Юридическая информация
    • Условия использования
    • Политика конфиденциальности
    • Согласие на обработку персональных данных
    • Согласие на получение рассылок
Powered by GitBook
On this page
  • Какая стоимость является нормальной?
  • От чего зависит стоимость ответов?
  • Как уменьшить стоимость?
  • Сокращение истории диалога
  • Отключение истории вызова функций
  • Сокращение инструкции/промта за счет подчиненных ботов
  • Оптимизация ответов полученных от функций (таблиц, базы знаний и пр.)
  • Использование английского языка

Was this helpful?

  1. ОСНОВНЫЕ НАСТРОЙКИ
  2. Системная инструкция
  3. Лучшие практики

Оптимизация стоимости

PreviousОтладка инструкцийNextОтправка изображений в чат

Last updated 5 months ago

Was this helpful?

Один из распространенных вопросов: "как рассчитать стоимость диалога, и от чего она зависит?". В данной статье подробно расскажем как управлять стоимостью и оптимизировать ее.

Какая стоимость является нормальной?

Средняя стоимость полноценного диалога внутри платформы по всем учетным записям варьируется от 10 до 20 руб. за диалог.

Это значит, что есть клиенты, у которых средняя стоимость диалога равно 4 рублям, а есть те, у которых средняя стоимость 1 диалога равна 30 рублям.

Важно!

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

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

Давайте рассмотрим это подробнее.

От чего зависит стоимость ответов?

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

Это происходит из-за того, что мы отправляем в модель гораздо больше символов, чем получаем от нее, а именно, мы отправляем:

  1. Сообщение клиента

  2. Системный промт/инструкцию бота

  3. Функции, которые созданы внутри бота:

  • таблицы,

  • подчиненные боты,

  • элементы базы знаний,

  • элементы работы с СРМ-системами (чтение полей, запись полей и пр.)

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

  1. Информацию, полученную при вызове функции (базы знаний, таблицы и пр.) - чтобы подать ее в модель и она могла это обработать.

  2. Историю диалога - чтобы бот понимал контекст и не терялся.

  3. Историю вызова функций - чтобы бот не запрашивал одни и те же функции несколько раз.

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

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

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

НО решения есть, о них ниже.

Как уменьшить стоимость?

Рассмотрим несколько основных способов оптимизации стоимость ответов от Савви.

Сокращение истории диалога

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

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

В этих случаях, можно использовать обрезку истории при помощи настройки передачи истории сообщений, которая находится в настройках бота в разделе Дополнительно:

Тут существует несколько вариантов:

  1. Передавать историю за X минут. В том случае, можно указать количество минут, в течение которых бот будет помнить историю сообщений.

  2. Передавать историю за X сообщений. В этом случае, можно указать количество сообщений в диалоге, за которые бот будет помнить историю диалога.

Какой способ в каких ситуациях использовать?

Например, если речь идет о повторяющихся обращениях, что характерно при работе с YCLIENTS / Altegio, можно выбирать первый вариант - ограничение по количеству минут.

Если речь идет о каких-то сервисных ботах, для внутренней базы знаний, например, подключенных через Telegram-ботов, то тут можно ставить ограничение по количеству сообщений (хотя вариант по времени тут тоже подходит).

Здесь можно сказать ограничения являются обязательными, т.к. когда вся переписка идет в рамках одного диалога и если он очень длинный, каждое сообщение становится очень дорогим.

Отключение истории вызова функций

Еще одна полезная функция, которая влияет на стоимость - Сохранять историю вызова функций.

Данная настройка так же находится в дополнительных настройках бота:

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

Например, клиент спросил: "Когда будет доставка по номеру заказа 12345". Модель обращается в СРМ и получает всю информацию по заказу, например, в таком виде:

  • Номер заказа: 12345

  • Дата сборки заказа: 24.12.2024

  • Дата поступления в пункт для отправки: 25.12.2024

  • Дата доставки: -

  • Состав заказа: Джинсы Levis, футболка TH, майка CC.

Бот может ответить так: "Срок доставки пока не определен, но ваш заказ уже собран".

Если клиент начинает уточнять: "Но хотя бы примерно?"

Бот может ответить так: "Вижу, что ваш заказ уже поступил в пункт для отправления, скоро мы получим дату доставки и свяжемся с вами". При этом ему не пришлось снова отправлять запрос в СРМ для получения информации по заказу.

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

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

Сокращение инструкции/промта за счет подчиненных ботов

Как это работает рассмотрим на примере ниже:

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

Если мы загрузим все таблицы в одного бота, то мы получим 10 разных функций, каждая со своим описанием, инструкцией и пр.

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

Мы можем здесь сделать иначе:

  1. Загрузить все таблицы в этого подчиненного бота

Получается, что весь объем функций-таблиц будет содержаться во втором боте, а в первом у нас будет только одна функция названная "Прайсы", соответственно мы в 10 раз сократим описание функций.

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

Оптимизация ответов полученных от функций (таблиц, базы знаний и пр.)

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

При работе с таблицами

При работе с файлами базы знаний

При чтении и записи данных из СРМ

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

Использование английского языка

Не всегда очевидный, но крайне эффективный способ - использование в основной инструкции английского языка вместо русского. Как правило русский язык стоит в 3-4 раза дороже, т.к. в русском языке токен (символ) соответствует 1 букве, а иногда на одну букву, например, букву Ы будет приходиться 2 токена. В сравнении с этим, в английском языке 1 токен может соответствовать целому слову, что в свою очередь обходится дешевле.

Еще один довольно очевидный и действенный способ - это внимательно смотреть, а какой объем информации вам возвращают вызванные ботом функции. Насколько весь объем нужен вам? Нельзя ли его разбить на смысловые куски? Обязательна ли это информация?

Рассмотрим на конкретных примерах.

Сокращение объема результирующей информации из таблиц

Часто бывает так, что при обращениям к таблице мы можем получить из нее большой объем информации, что как уже очевидно - ведет к увеличению объема обрабатываемого контекста и соответственно стоимости.

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

Если сузить поиск на уровне обращения клиента невозможно, то можно использовать оператор LIMIT при запросе к таблице, и определить максимальный объем запрашиваемых данных.

Сокращение объема при работе с типовыми CRM

В данном случае, имеется ввиду работа с amoCRM и Битрикс24, с которыми имеется возможность получать данные из полей сделки, контакта и записывать туда информацию.

Чем больше полей мы выберем для запроса или записи, тем больше длина функции, которая за это отвечает.

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

Создать подчиненного бота (как это делается смотрите в соответствующем )

Например, при работе с таблицами, получим результат, мы можем получить большой объем данных, например 20 строк с какой-то информацией. Чем больше информации - тем дороже ответ. Поэтому можно заранее предусмотреть какие-то вопросы, которые могут сузить поиск в таблице и находить более конкретную информацию. Если так сделать исходя из сценария диалога сделать не получается, то можно ограничивать получаемую информацию из таблицы используя оператор LIMIT. Подробнее об этом описано в .

Если говорить о базе знаний и работе с блоком , то тут решение еще проще - не создавайте файлы с большим текстом, разбивайте его на более мелкие смысловые файлы.

Подробно о работе с таблицами описано в отдельном .

раздел
разделе
разделе о таблицах
Прямые вопросы
разделе