Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Условия в промптах». Вы узнаете экспертные методики работы с условия промптах и научитесь избегать типичных ошибок начинающих разработчиков.
Условия в промптах
Тут может не хватать некоторых данных — дополним в ближайшее время
- нужны правки под стандарт написания
В препромпте, почти как в программировании, можно использовать if условия и switch ветвления.
Условия
Сразу начнём с примера:
@if (engine.code = ChatGPT)
Говори от имени робота.
@else
Говори от имени человека.
@endifВ результате, в зависимости от выбранного провайдера на портале, итоговый препромпт будет отличаться.
Что можно писать в условии @if ()? Посмотрим ниже. Регистр и лишние пробелы значения не имеют.
Системные поля
engine.code— код провайдера (ChatGPT, GigaChat, YandexGPT, ThirdParty)engine.category— может принимать значения text или image. Но на текущий момент препромпты CoPilot работают только для текстовcontext.module— модуль, который вызывает CoPilot. Например, можно как-то иначе дополнить препромпт, если запрос идет для модуля CRM
Пример условия по системному полю был в начале страницы. Приведём ещё один:
@if (engine.code = ChatGPT)
Не забывай, что ты ChatGPT
@endifПроверка на пустоту
@if (author.name = null)
говори от имени анонимуса
@endifОтрицание
@if (engine.code != ChatGPT)
{context_messages}
@endifРабота с базовыми маркерами
Это базовые маркеры, а также предустановленные разработчиком маркеры. Но в силу того, что в них содержится пользовательский контент, использовать их имеет смысл только для проверки на непустоту.
@if (marker.original_message != null)
похвали за {original_message}
@else
похвали за {user_message}
@endifС другой стороны через проверку маркера вы можете опираться на какой-то системный предустановленный маркер, который всегда устанавливается разработчиком при наступлении определенных условий.
@if (marker.role = vip)
пиши очень важно
@endifРабота с маркерами результата
Информацию о маркерах результата вы найдёте на странице документации о маркерах.
Как применять их в условиях? По логике вещей, использовать вы их можете только в задачах проверки на пустоту. Например:
@if (current_result0 != null)
Это не первое уточнение пользователя, будь внимательнее, пожалуйста!
@endifВажное уточнение — проверять доступность маркера нужно только для вашей логики. Запись такого вида:
@if (current_result0 != null)
{current_result0}
@endifбессмысленна, так как если маркера нет, то он и так вырежется из текста автоматически.
Функции внутри if-условий
Внутри условия if-выражения можно использовать функции.
Пока что поддерживается только определение длины length(). Внутрь этой функции, в принципе, можно передать любой маркер, в том числе пользовательский.
@if (length(marker.user_message) < 10)
Итоговый ответ должен быть очень лаконичным.
@else
Пиши как Толстой.
@endif
{user_message}Функции сеттеры
Внутри промптов можно устанавливать температуру и токены. Причем разные, в зависимости от условий.
@setTemperature()@setTokens()
Дополним пример из предыдущего раздела про функции, использовав сеттеры:
@if (length ( marker.user_message ) < 10)
Итоговый ответ должен быть очень лаконичным.
@setTemperature(0.12)
@setTokens(200)
@else
Пиши как Толстой.
@setTemperature(1)
@setTokens(1200)
@endifВетвление
Это известный в программировании switch. Придет на помощь, когда у вас есть разные блоки промпта, но каждый из них выполняется строго в определенном порядке. Хороший пример, когда у вас разный текст промпта для разных провайдеров. Давайте на этом примере и рассмотрим.
@switch (engine.code)
@case(ChatGPT)
**инструкции для GPT**
@default
**инструкции для остальных провайдеров**
@endswitchЧто можно вставлять в switch? Все то же, что и в if.
Условие ветвления имеет наивысший приоритет, а это значит, что внутри case-блоков могут содержаться в том числе if-выражения. Блоков ветвления может быть несколько, хотя это уже снизит читабельность.
Пример совместного использования switch и if:
@switch (engine.code)
@case(ChatGPT)
ты поросенок
@if(author.personalgender = m) розового цвета @else синего цвета @endif
@default
ты волк
@endswitch
@switch (engine.code)
@case(ChatGPT)
c Плутона
@default
@if(author.personalgender = m) с Марса @else с Венеры @endif
@endswitch[ThirdParty]: ThirdParty — «третья сторона». Т.е. здесь может быть код стороннего провайдера, разработанного партнером.
[условия]: Это могут быть как if-условия, так и switch ветвления.
💡 Экспертное мнение и рекомендации
Советы эксперта по интеграции:
- Всегда используйте кэширование при частых запросах к условия промптах, чтобы разгрузить базу данных.
- Соблюдайте стандарты PSR при написании обработчиков для «Условия в промптах».
- Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru