Про Jai поговорили, настала пора SillyTavern

Спидран до бана на DTF, в прошлый раз, завершился за 6 часов.

В одном из постов я рассказал про Jai. Настало время босса всех Фронтэндов для РП - SillyTavern.
Чтобы не заниматься ctrl+c crtl+v, основы можно найти здесь
Я же хочу поговорить про чуть более сложную настройку и предложить несколько вариантов подсказок/пресетов, которые использую.
Также хочу оговориться - Jai очень сильно не любит, когда на его ресурсах кто-то говорит про таверну, поэтому прошу меня заранее извинить.(По личным ощущениям, процентов 90 пользователей Jai вообще не слышали про SillyTavern)

Завершение текста.

@karasik немного затронул эту тему. Я постараюсь объяснить свое видение этого всего. Внимание - я не являюсь первоисточником, все что я напишу ниже - это мое упрощенно-извращенное понимание того, как это работает.

Завершение текста имеет жесткую структуру промпта, отправляемого в модель. Считается, что лучше работает с маленькими моделями(читай - локальными), однако сейчас я использую завершение текста с R1T2 и Qwen 235b(потому-что тестирую системную подсказку, а не Chat Completion), и не ощущаю проблем на небольшом контексте.
Основная суть: промпт генерируется по жесткому принципу, который указывается в шаблоне контекста, и "выплевывает" огромный кусок текста в модель.

Форматирование SillyTavern
Форматирование SillyTavern

На примере текущего шаблона:

[Системная подсказка] -> [История мира] -> [Описание персонажа] - >[Характер персонажа] -> [Текущий сценарий из карточки персонажа] -> [Свежая история мира] -> [Информация о персоне пользователя]

Примерно по такому шаблону работает и Jai: "жесткий" текст отправляется в LLM, тем самым появляется основная проблема - модель просто "выбрасывает" некоторые куски этого текста. Например - LLM во время РП часто начинает "говорить" или "действовать" за пользователя. Даже, если у вас в подсказке есть строчка а-ля: "Не говори и не действуй за {{user}}". Почему так происходит? Во время обработки огромного текста она просто пропускает мимо эту инструкцию. Чтобы это исправить, вы несколько раз пишите в конце своих сообщений инструкцию: ((OOC: Don't speak or act as {{user}})), пока модель снова не "проглотит" эту инструкцию.

Почему же выбирают Text Completion для маленьких моделей?

  • Небольшие LLM обучены на сплошном тексте(как раз таком, который им "прилетает" от фронтэнда)
  • Завершение текста имеет сниженый расход токенов
  • Не требует автоматизации по контролю шаблонов(что упрощает обучение модели, но заставляет пользователя танцевать с бубном для настройки)

Настройка SillyTavern

Здесь будет очень сложно, но я постараюсь. Существует четыре основных "настройки" в таверне для Text Completion.

  • Text completion preset
  • Context template
  • Instruct template
  • System prompt

Про шаблон контекста я писал выше.
Шаблон инструкции: если в двух словах, то он "переводит" ваш ввод контекстного шаблона на понятный язык для LLM.
Системная подсказка - это те самые промпты, про которые я говорил в посте про Jai. Это список инструкций для LLM, согласно которым вы хотите, чтобы она работала. Вот моя "сыроватая" инструкция для V3
По сути, это переделанный шаблон CherryBox'a завершения чата из поста @karasik, но подготовленный для работы на Jai. Я добавил пару инструкций от себя. Промпт пока проходит тестирование. Советую использовать его на низких температурах, без ограничения по количеству токенов. Также, есть более "сложные" промпты от Анжелики, которыми она поделилась со мной, и которыми разрешила поделиться в этом посте. Она прямо очень заморочилась с этими промптами. Пока тестирую их, с мыслями о переносе их в Chat Completion. Больше промптов можно найти в дискорде Jai.

Text completion preset

Многобукв - простите...

Про Jai поговорили, настала пора SillyTavern

Имеет огромное количество настроек. Когда я говорю "огромное", я имею ввиду РЕАЛЬНО МНОГО. Все можно увидеть на скриншоте. Я же остановлюсь на том, что считаю важным - выбор пресета.

Стандартный Universal-Light. Либо - Universal-Creative. Без шуток. Стандартный пресет делает вещи. Если вы берете маленькую модель и вам говорит создатель модели - используй такие-то настройки, вы делаете как он скажет. Иначе - вы используете стандартные настройки для ВСЕГО, кроме системной подсказки. Пресеты SillyTavern очень хороши сами по себе, и, советую, использовать их. Сколько раз я плевался с мелких моделей, думая, что они фуфло, а на самом деле, я просто не смог их правильно настроить.

Что из настроек можно и нужно крутить? Температура, пенальти, да в целом, любые. Не советую играть в динамическую температуру и DRY. Там слишком сложно. Советую добавлять токены(слова) в BANNED TOKENS, чтобы "речь" модели становилась более разнообразной, а также была возможность убрать ненавистные [FIN], [FIN OR NOT?] и т.д.

[FIN or NOT?]

Я хотел сразу же рассказать про Chat Completion, но пост уже получился слишком огромным. Так что информация про Chat Completion будет немного позже. Что же касается выбора пресетов для Context template и Instruct template - необходимо понимать, из чего "состоит" модель. Как правило, создатели модели пишут об этом, и вы выбираете, условные Lama-3, ChatML и т.д.

Небольшой список локальных LLM, которые мне понравились:

  • Aurora-12b. Могу ошибиться, чью я использовал, но попробуйте всех создателей. Шаблон - chatml.
  • Violet_Twilight и Violet_Magcap. Могли появиться более свежие. Шаблон - Chatml или Mistral V3. Внимание! Какая-то(может обе) из этих моделей "может" в блок рассуждений. Информация по блоку рассуждений для моделей можно найти тут. Не забудьте включить запрос обоснования модели в Preset и настроить блок рассуждений под System Prompt
  • Stheno 8b - просто нестареющая классика. Пресет Lama.
7
13 комментариев