Условия
В препромпте, почти как в программировании, можно использовать if условия и switch ветвления.
Условия
Сразу начнём с примера:
Расскажи анекдот. @if (engine.code = ChatGPT) Говори от имени робота. @else Говори от имени человека. @endif
В результате, в зависимости от выбранного провайдера на портале, итоговый препромпт будет отличаться.
Что можно писать в условии @if ()? Посмотрим ниже.
Примечание: регистр и лишние пробелы значения не имеют.
Системные поля
- engine.code – код провайдера (ChatGPT, GigaChat, YandexGPT, ThirdParty ThirdParty – «третья сторона». Т.е. здесь может быть код стороннего провайдера, разработанного партнером. );
- engine.category – может принимать значения text или image. Но на текущий момент препромпты CoPilot работают только для текстов;
- context.module – модуль, который вызывает CoPilot. Например, можно как-то иначе дополнить препромпт, если запрос идет для модуля CRM.
Пример условия по системному полю был в начале страницы. Приведём ещё один:
@if (engine.code = ChatGPT) Не забывай, что ты ChatGPT @endif
Проверка на пустоту
@if (author.name = null) говори от имени анонимуса @endif
Отрицание
@if (engine.code != YandexGPT) {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}
Функции сеттеры
Внутри промптов можно устанавливать температуру и токены. Причем разные, в зависимости от условий Это могут быть как if-условия, так и switch ветвления. .
За это отвечают два сеттера:
- @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** @case(YandexGPT) **инструкции для YandexGPT** @default **инструкции для остальных провайдеров** @endswitch
Что можно вставлять в switch? Все то же, что и в if.
Условие ветвления имеет наивысший приоритет, а это значит, что внутри case-блоков могут содержаться в том числе if-выражения. Блоков ветвления может быть несколько, хотя это уже снизит читабельность.
Пример совместного использования switch и if:
@switch (engine.code) @case(ChatGPT) ты поросенок @if(author.personalgender = m) розового цвета @else синего цвета @endif @case(YandexGPT) ты медведь @default ты волк @endswitch @switch (engine.code) @case(ChatGPT) c Плутона @case(YandexGPT) с Юпитера @default @if(author.personalgender = m) с Марса @else с Венеры @endif @endswitch