Наименование организации:
ООО «Мой Софт»
40702810310000021416
Расчетный счет:
АО «ТИНЬКОФФ БАНК»
Банк:
044525974
БИК:
781101001
Корреспондентский счет:
7811616280
ИНН:
781101001
КПП:
1167847299410
ОГРН:
ОКПО:
03614300
Бесщетников Антон Игоревич
Генеральный директор:
192019, г. Санкт-Петербург, ул. Мельничная, д. 18, литер А, пом. 18-H 10, оф. 805
Юридический адрес:
Почтовый адрес:
192019, г. Санкт-Петербург, а/я 2
Реквизиты компании ООО «Мой Софт»
Инструкции и промпты

Шаблоны в инструкции агента: один промпт на разные каналы

Одна инструкция вместо трёх копий: условия по каналу, блок выбора, свои переменные и фильтры движка Liquid2 в промпте агента.

Команда платформы СаввиОбновлено 23 сентября 20267 мин чтения
Лист-трафарет с вырезанными окнами лежит поверх трёх разных форм, одна из них коралловая
Коротко

Шаблон в инструкции — это правила, по которым платформа собирает текст промпта перед каждым ответом. Одна инструкция подставляет артикулы Ozon, Wildberries или Яндекс.Маркета по коду канала, приветствие меняет по дню недели, пустое поле закрывает запасным словом. Движок Python Liquid2 с условиями, выбором и фильтрами находится на стадии бета-тестирования.

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

Шаблон собирает инструкцию заново перед каждым ответом

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

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

!
Статус функции

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

Проверьте на своих диалогах.Регистрация без карты, 500 ₽ на тест по промокоду BLOG500

Собрать агента

Условие подставляет артикулы той площадки, откуда пришло сообщение

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

Ты — сотрудник компании «Мои колёса».

Если клиент спрашивает про артикулы колёс, отправь ему эти:
{% if channel_name == "ozon" %}
OZ123, OZ456, OZ789
{% elsif channel_name == "wildberries" %}
WB124954309, WB30924, WB12093
{% else %}
YM123, YM123123
{% endif %}

Ветка if проверяется первой, elsif подхватывает, если предыдущая не сработала, и таких веток может быть сколько угодно. else — запасной вариант на случай, когда не совпало ничего. Без else и при несовпадении всех условий в инструкцию не добавится ничего. Кусок про артикулы просто исчезнет, агент ответит уверенно и без них. Так что запасная ветка нужна везде, где текст обязателен.

Значение channel_name берётся из шапки экспорта диалога, там же лежат поля, которые принёс канал. Что это за поля и откуда они появляются, объясняют переменные ИИ-агента; внутри шаблона важно одно — они доступны в двойных скобках по имени.

Когда вариантов много, читаемее блок выбора

Пять elsif подряд превращают инструкцию в лестницу, которую страшно править. Для случая, когда сравнивается одно и то же значение, в движке есть блок выбора:

Если клиент спрашивает про артикулы колёс, отправь ему эти:
{% case channel_type %}
    {% when 'ozon' %}
        OZ123, OZ456, OZ789
    {% when 'wildberries' %}
        WB124954309, WB30924, WB12093
    {% when 'yandex_market' %}
        YM123, YM123123
{% endcase %}

if берут, когда проверки разные по смыслу: день недели в одной ветке, наличие почты в другой. case берут, когда варианты — это значения одной переменной: канал, тип клиента, статус сделки. Запасная ветка else работает в обоих.

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

assign собирает данные площадки в одном месте

Если про каждый канал нужно знать три вещи — название площадки, артикулы колёс и артикулы рулей — условия расползаются по всему тексту. Тег assign создаёт свою переменную, и тогда блок выбора стоит один раз в начале, а дальше идёт обычный человеческий текст:

{% assign platform = '' %}
{% assign wheels_articles = '' %}

{% case channel_type %}
  {% when 'wildberries' %}
    {% assign platform = 'Wildberries' %}
    {% assign wheels_articles = 'WB123, WB456, WB789' %}
  {% when 'ozon' %}
    {% assign platform = 'Ozon' %}
    {% assign wheels_articles = 'OZ1212313, OZ452346' %}
{% endcase %}

Ты — сотрудник компании «Мои колёса». Твоя задача — отвечать на вопросы
под товарами на {{ platform }}.
Если клиент спрашивает про новые колёса, отправь артикулы: {{ wheels_articles }}

Дальше по инструкции название площадки и списки артикулов подставляются одной строкой, сколько бы раз они ни понадобились. Правка нового артикула занимает одно место вместо трёх копий промпта. Заодно видно, зачем пустые значения объявлены сверху: канал, который не попал ни в одну ветку, получит пустые строки вместо ошибки.

Фильтры приводят значение в порядок до того, как его увидит модель

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

ФильтрЧто делает
capitalizeпервая буква заглавная, остальные строчные: «иВАн» становится «Иван»
defaultподставляет запасное значение, когда переменной нет в канале
downcase, upcaseприводит строку целиком к нижнему или верхнему регистру
truncate, truncatewordsобрезает текст по числу символов или слов и ставит многоточие
stripубирает пробелы по краям строки
dateформатирует дату и время в нужный вид
plus, minus, divided_byприбавляет, вычитает и делит число

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

7 переменных системных, доступных в шаблоне без вопросов клиенту
11 фильтров описано в документации как самые полезные
1 тысяча токенов, из которых складывается объём инструкции
Источник: документация Савви, раздел «Шаблоны в инструкциях»

Пересчитайте, во что обходятся три копии одного промпта

Пересчитайте объём инструкции до того, как браться за условия. Документация называет прямую связь: стоимость работы агента зависит в том числе от объёма инструкции, а тысяча токенов стоит 1 ₽. Промпт, где рядом лежат блоки под три площадки, уезжает модели целиком в каждом ответе, включая два блока, которые сейчас не нужны. Шаблон отдаёт только сработавшую ветку.

Дальше порядок такой.

1 Сложите копии рядом Откройте промпты всех агентов, которые отличаются парой абзацев, и отметьте расхождения цветом. Обычно это артикулы, ссылки, название площадки и график.
2 Сведите отличия к одной переменной Если все расхождения крутятся вокруг кода канала, хватит блока выбора с assign в начале инструкции. Если поводов несколько — дню недели нужна своя проверка.
3 Прогоните каждую ветку В тестовом диалоге проверьте все варианты, включая запасной. Именно запасная ветка показывает, что случится с новым каналом, которого в списке ещё нет.

Остальное остаётся обычной гигиеной промпта: короткие формулировки и один смысл на абзац. За это отвечают семь правил инструкции, и шаблон их не отменяет. Если после сборки инструкция похудела заметно, счёт за месяц стоит пересмотреть вместе с остальными статьями расхода — их перечисляет разбор того, как снизить стоимость диалога.

Частые вопросы

Что такое шаблон в инструкции ИИ-агента

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

Можно ли одной инструкцией обслуживать Ozon, Wildberries и Яндекс.Маркет

Да, для этого в документации описан пример с артикулами: код канала сравнивается со списком площадок, и в промпт попадают артикулы только нужной. Отдельный агент под каждую площадку для этого не заводится.

Чем условие if отличается от блока выбора case

Условие if удобно, когда проверок немного или они про разные вещи, и допускает любое количество веток elsif. Блок case создан для случая, когда одна и та же переменная сравнивается со множеством вариантов: каналы, типы клиента, статусы сделки.

Что будет, если ни одно условие не сработало

Если запасная ветка else не указана, в инструкцию не добавится ничего: агент получит промпт без этого куска. Поэтому в блоках, где кусок обязателен, запасная ветка прописывается всегда.

Как подстраховаться, если переменная пришла пустой

Подойдёт фильтр default: он подставит заданное слово, когда значения нет. Например, почта приходит из Usedesk и отсутствует в Telegram, и вместо пустоты в промпт попадёт запасная строка.

Шаблоны уже можно использовать в рабочем агенте

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

Команда платформы СаввиПишем о том, как бизнес внедряет ИИ-агентов, на данных платформы. Обновлено 23 сентября 2026.
BLOG500
Собрать агента