Промпты

Промпты управляют генерацией ответов LLM. Они определяют контекст и параметры, отправляемые AI-модели.
Конфиг
Поддерживается 3 провайдера:
- OpenAI (В теории поддерживается любой OpenAI совместимый, но могут быть нюансы)
- Gemini
- Claude
Список моделей всегда запрашивается из прокси. Если по какой-то причине прокси не может отдать список моделей, ее название можно ввести вручную и выбрать пункт Create "..."
Client-only stop string - некоторые прокси не поддерживают стоп-стринги. Этот параметр позволяет обрубать генерацию со стороны клиента, когда в тексте встречается stopSequence.
Контент

- Контент разбит на сообщения.
- При отправке запроса, каждое сообщение будет обработано и отправлено от указанной роли.
Роль system
Gemini не поддерживает роль system, поэтому, для него она преобразуется в assistant
- Пустые сообщения вырезаются
- Если добавить последнее сообщение от лица assistant, то получится префилл
Переменные
| Переменная | Описание |
|---|---|
{{user}} | Имя персоны |
{{persona}} | Описание персоны |
{{char}} | Имя персонажа |
{{description}} | Описание персонажа |
{{impersonate}} | Текущая выбранная персона |
{{scenario}} | Сценарий |
{{history}} {{history:1:2}} | История сообщений (см примечание ниже) |
{{external}} {{external:current_info}} {{external:summary}} | Внешний блок |
{{lastUserMessage}} | Последнее сообщение юзера |
{{random}} {{random::1::2::3}} | Случайное значение из списка |
{{lorebook}} {{lorebook:in_chat}} | Вхождения лорбуков |
{{newline}} | Перенос строки |
{{setvar}} {{addvar}} {{incvar}} {{decvar}} {{getvar}} | Работа с локальными переменными. При установке они буду доступны только во время текущей генерации. Например, если переменная будет установлена в основном пресете, ее значение не будет доступно в при генерации доп. блока |
{{setglobalvar}} {{addglobalvar}} {{incglobalvar}} {{decglobalvar}} {{getglobalvar}} | Работает аналогично локальным переменным, но в отличии от них при установке, запоминаются для текущего чата до следующей перезаписи. Позволяет шарить переменные между разными запросами |
{{char}} и {{description}}
Если в чате несколько карточек персонажей, то {{char}} и {{description}} можно использовать с аргументами, чтобы обратиться к конкретной карточке.
В примере выше:
{{char:1}}развернется в "Maria"{{char:2}}в "Anon" (Несмотря на то, что Anon указан как персона){{char:3}}в "Kotya"{{char}}в "Maria, Kotya", то есть имена всех персонажей, кроме персоны юзера, склеенные через запятую.
Также есть нюансы с использованием этих тегов внутри карточек.
{{impersonate}}
По умолчанию заменяется именем текущей персоны. 
{{random}}
Заменяется на случайный аргумент.
{{random::value 1::value 2}}- Заменится на строку "value 1" или "value 2"
{{external}}
Подключает внешний блок. Контент ищется начиная с текущего сообщения и вверх по истории.
В виде агрумента принимает имя блока: {{external:current_info}}, {{external:summary}}
{{lorebook}}
Выводит все совпавшие записи в указанном группе.
Пример:

Есть запись с Position group = "Default". Чтобы ее вывести достаточно указать {{lorebook}}

Но если у записи задана Position group, то для ее вывода надо указать имя группы: {{lorebook:in_chat}}
{{history}}
У {{history}} поддерживается 2 опциональных аргумента, которые позволяют брать только диапазон сообщений. Таким образом можно делать аналог in-chat блоков с глубиной. Пара примеров:
{{history}}- все сообщения{{history:1:10}}{{history::10}}- последние 10 сообщений{{history:11}}- все сообщения начиная с 11{{history:7:10}}- последние 4 сообщения начиная с 7
Полный пример. Делаем аналог current_info на глубине 1:
{{external:summary}} // Подключаем саммари
{{history:3}} // Все остальные сообщения
{{external:current_info}} // Внешний блок
{{history:1:2}} // Последнее сообщение юзера
// Здесь указывается 1:2, потому что во время генерации "1" - это текущее сообщение, которое сейчас генерируетсяКод-блоки

Код блоки, подключенные для текущего промпта.
Смотри отдельную статью, как это работает.