Документация для разработчиков
Темная тема

Условия

В препромпте, почти как в программировании, можно использовать 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


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024