SIlly Tavern Chat Completion Preset [Очередной лонг]

Или попытка совладать с безумием LLM.

SIlly Tavern Chat Completion Preset [Очередной лонг]

Text completion vs Chat completion

Наглядную разницу я уже показывал и пытался объяснить, но, думаю, стоит повторить:

  • Chat completion "ест" больше токенов
  • Может не поддердживаться малыми LLM
  • Меньше настроек связанных с температурой.
  • Работает не просто "выплевывая" текст в модель, а добавляет инструкции, тем самым указывая модели, что это пропустить нельзя(но LLM иногда плевать на это)
  • Современные модели "затачиваются" под работу с Chat Completion

Основы

SIlly Tavern Chat Completion Preset [Очередной лонг]

Все, что мы настраивали в Text Completion - теперь находится только в preset-меню Silly Tavern. Для упрощения, я буду называть его "левым" меню, а меню "AI response format" - "верхним" меню.

Итак, если мы выбираем Chat Completion - "верхнее" меню выходит из чата. Абсолютно не важно, что будет выбрано в нем, вся наша настройка происходит через собственную систему форматирования, которую вы настраиваете сами, по определенному шаблону.

Важно! Если вы используете модель с обоснованием(Reasoning), не забывайте поставить галочку Request model reasoning!

Разбор на примере

Изначально, чтобы разобраться во всем этом, я брал пресет CherryBox'a для R1 и докручивал его до того, что хочу сам. Сейчас пользуюсь R1T2(Химера), и в целом, мой пресет работает.

SIlly Tavern Chat Completion Preset [Очередной лонг]

Порядок следующий

  • Role - определяет роль модели. Как правило, сюда вписывается что-то вроде: "You are a Roleplay Master...". Без этого блока ИИ (если он не обучен специально на RP) будет «теряться», пробовать разные варианты поведения и постоянно сбиваться с нужной задачи
  • Story Context - включает всё, что определяется «внешними» модулями: персона ({{user}}), карта персонажа ({{char}}), история мира и т. д. Учтите, LLM не понимает, кто такой {{user}}, а кто такой {{char}}. На их место Таверна подставляет соответствующие имена.
  • Guidlines - мои предпочтения: как я хочу, чтобы развивалась история, каким образом LLM должна форматировать ответ, его длину и прочие нюансы.
  • Start - команда к началу RP
  • Reminder - указания для модели о том, как формировать ответы
Guidlines команды
Guidlines команды

Accent handler и оставшиеся блоки «вводятся» в модель в определённые места промпта, вне зависимости от их расположения в «левом» меню.

  • Accent Handler - я не самый большой знаток английского, поэтому часто пишу модели на русском (возможно, зря). Нередко модель воспринимает это как фразу вроде «он сказал на непонятном языке». Чтобы это исправить, я придумал блок, который объясняет модели, что я говорю по-английски, но с акцентом. Кроме того, Deepseek любит отвечать на русском, если с ним заговорить на русском. Поэтому внутри этой инструкции я добавил пункт, что модель не должна переходить на русский. Это не всегда помогает, но в целом работает. (в последнее время заставляет модель говорить за {{user}}. Либо до этого мне очень везло. Выключаем, крч)
  • Reasoning - этот блок отвечает за форматирование рассуждений. Мы же используем R-модель, верно? Пусть её «размышления» работают на нас максимально эффективно.
  • Timeblock - это красивое отображение времени в ответе, которое помогает модели ориентироваться в контексте. Оно реально спасает от абсурдных конструкций вроде: «Вы только проснулись. На часах шесть утра. За окном красный закат»
  • Infoblock - это конструкция, добавляемая в конец сообщения, которая должна помогать LLM лучше «понимать» окружающий контекст. Но честно говоря, блок получился громоздким, поэтому я им редко пользуюсь.

Что важно знать?

Все инструкции разделены XML-тегами (<tag>...</tag>), чтобы их логически структурировать. Эти блоки также делятся на более мелкие элементы, которые LLM воспринимает по отдельности. Я видел разные подходы к форматированию, но во многих источниках именно XML-теги считаются наиболее эффективными.

Accent Handler block
Accent Handler block

Как видите, в нашем пресете мы выстраиваем структуру обращения к модели самостоятельно. Но порядок этих блоков не случаен — он должен придерживаться золотого правила:

  • Роль ИИ
  • Информация о мире (Story context)
  • История чата
  • Информация о том, как LLM должна ответить

Особенности моделей

Каждая модель имеет свои «привычки». Например, Deepseek часто перегружает ответы лишними токенами::

"Ее телефон зазвонил, она не обратила на него внимание"

Сообщение номер 1

"Ее телефон зазвонил снова. На экране было 19732864 пропущенных"

Сообщение номер 19732864

Наша задача — убирать такие моменты с помощью правильно настроенных пресетов. Подобных нюансов у каждой модели хватает, и они становятся очевидны только после длительных RP-сессий с одной LLM.

Кому-то нравится «кровь и содомия», кто-то хочет, чтобы персонаж буквально «вел за руку» через каждое сообщение, а кто-то предпочитает, чтобы модель предлагала варианты ответа. Все эти вещи настраиваются индивидуально.

Один пресет на все модели?

Если вы делаете пресет, например, для Deepseek R1, он может подойти и для производных (V3, R1T2). Но важно помнить, что он может работать некорректно. В случае с моим пресетом, если вы захотите протестировать его на V3, удалите всё, что связано с Reasoning.

Итог

Chat Completion — это более тонкая настройка всех аспектов модели. Я не буду кричать, что за ним «будущее», но стоит учитывать, что это более серьёзный и правильный подход.

P.s. мой пресет будет лежать тут. Если что-то будет работать не правильно, я мог скинуть не тот, потому что я в них запутался.
P.S.S. Хочу передать привет Kimi K2 и Openrouter, которые не могут в стабильность.

9
1
20 комментариев