Ноасс: расширение, пресеты и внешняя блокогенерация

Расширение ноасса (ST 1.12.0+)

Ссылка - https://gitgud.io/Monblant/noass
Установка:
• Если есть git: Extensions → Install extension (сверху справа) → Вставить ссылку https://gitgud.io/Monblant/noass
• Если нет git: Скачать zip архив с https://gitgud.io/Monblant/noass → Распаковать в SillyTavern/data/default-user/extensions → переименовать там папку noass-master в noass → Перезагрузить таверну
Обновление: Extensions → Manage extensions (сверху справа) → скролл вниз → кнопка обновить рядом с NoAss
Note: линия контекста (пунктирная) из-за расширения меняет свое поведение и становится бессмысленной. Не обращайте на нее внимание.

Остальное

Карточки, промпты и все такое под ноасс - https://rentry.org/noass_extra
Пак с пресетами, регексами и блоками - catbox | fastupload
Расширение для внешней блокогенерации - https://rentry.org/ext_blocks



Краткое описание

Обозначения

  • Ноасс - от 'no assistant', методика избавления от взаимодействия Human-Assistant в чате
  • Стопстринг - строка, по которой генерация прерывается

Что делает расширение ноасса

  • Склеивает всю чатхистори в одно сообщение от роли ассистента. Сетка будет воспринимать его как префил.
  • Добавляет суффиксы/префиксы для сообщений юзера/чара
  • Добавляет Zero Prefill (ZWJ по умолчанию) в случае, если префил кончается на \n или пробел, чтобы избежать ошибки trailing whitespaces.

В чем идея

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

Зачем нужно

  • Перейти от чата между хуманом и ассистентом к непосредственному взаимодействию между персонажами
  • Убрать bias по отношению к хуману - хумана в истории теперь нет, только персонажи
  • Отойти от файнтюна сетки на вопрос-ответного ассистента - меньше закруглений и сюжетных лупов

Для работы ноасса требуется, чтобы модель поддерживала префил. В основном это модели Claude.
UPD: теперь можно имитировать ноасс и на других сетках с помощью вставки хуманпромпта.

Установка и настройка

Установка и настройка расширения ноасса:

  1. Установить расширение ноасса.
  2. В расширении поставить галку Enable NoAss.
  3. Импортировать пресет для расширения из пака (папка noass sets):
    • Для каноничного ноасса - Canon
    • Для ДнД ноасса - Canon или Canon with insert (в последнем случае включить Insert Zero Prefill в расширении)
    • Для ноасса с Нарратором - Narrator
    • Для прозового ноасса - Prose
    • Для тегового ноасса - Tag
  4. По галкам:
    • Enable Zero Prefill - включает зеро префил, держать включенным на Claude сетках, убирать на остальных
    • Insert Zero Prefill - включает вставку зеро префила в начало сообщения. Включать только на Claude сетках и если про это явно написано.
    • Enable Human Prompt - включает вставку хуманпромпта перед/после истории чата. Включать только на не Claude сетках, на Claude хуманпромпт и так есть. В хуманпромпт вставлять User first message из пресета (если позиция before) или что-то вроде [continue seamlessly] (для позиции after).

Установка пресетов и периферии:

  1. Отключите примеры диалогов в User Settings, если они еще не отключены. Там же ставите галки на Show {{char}}: in responses и на Show {{user}}: in responses.
  2. Импортировать пресет на выбор:

После импорта проверьте, чтобы модель в API была правильная, пресет ее может изменить.

  1. Если нужны блоки:
    2.1. Установите расширение для внешней блокогенерации и включите его.
    2.2. Импортируйте в расширении блоковый пресет NoassExt-blocks из пака.
    2.2. Выберете в расширении в API Settings правильную прокси и модель для блоков.
  2. Quick Reply: NoassExt-utils.json - импортировать и включить, если нужен его функционал.
  3. Regex: (необязательно, но полезно)
    • Zvezdochka - Клод любит терять закрывающую звездочку в конце ответа, регекс ее восстанавливает.
    • Add user prefix - добавляет отображение префикса юзера
    • Hide old info - скрывает старые инфоблоки.
    • Hide facts tracking - скрывает блоки <new fact> из видимости.
  4. Опционально в User Settings можно выставить в Chat Style значение Document. Такое отображение будет наиболее близким к тому, как сетка воспринимает чатхистори (как единую стену текста, а не чат).

Описание пака

Чего делает NoassExt-utils:

  • Regenerate blocks - перегенерирует блоки для последнего сообщения.
  • Generate summary - генерирует саммари.
  • Rewrite greeting - переписывает гритинг по правилам каноничного ноасса и выдает его системным сообщением. Теги копировать не надо.
  • Generate profile - генерирует анкету персонажа по информации из инпута.
  • Request comment - генерирует комментарий от Ассистента. Задаете запрос в инпуте и нажимаете кнопку. В отличие от других кнопок, для комментария всегда используется основная сетка.
  • Reload chat - перезагружает чат
  • Export blocks - экспортирует все предыдущие включенные блоки в системное сообщение. Полезно при переносе чата.
  • Purge blocks - очищает блоки в последнем сообщении. Также полезно при переносе чата.

Кнопки на генерацию не дадут идеальный гритинг/анкету, руками лучше что-то доделать.

Описание блоков:

В расширении ExtBlocks во вкладке Preset blocks перечислены все блоки. Там же их можно подредактировать, если нужно.

  • <current info> - краткая информация о сцене и персонажах
  • <reflexion> - анализ текущей сцены
  • <summary> - поивентовое саммари, приближено к меморибуку
  • <thinking> - простая думалка как продолжить сцену, вставляется на 0 глубину. Рекомендуется не держать включенной долго.
  • <story beginning> и <profile> - утилитарные блоки для QR расширения, включать не требуется, сами по себе ничего не делают.
  • <basic dnd/canon rewrite> - рерайт блоки (переписывают основной ответ) для днд и канон пресета соответственно. Цель переписывания - минимизировать структурные лупы, убрать purple prose, починить форматирование, если сломалось.
  • <events> - инвентарь событий, накапливает все события, которые появляются в блоках <new fact>; собираемое саммари, которому не нужны допзапросы. Для работы в пресете (сейчас только ДнД) надо включить ползунки Fact Template и Fact Tip.

Описание пресетов

SOCKS-прокси

В паке в папке socks есть скрипт для проксирования запросов через SOCKS. Как использовать:

  • Установить зависимости через запуск install_req.bat
  • Отредактировать в start.bat желаемый хост (адрес oai-прокси) и адрес сокс-прокси (формат там задан), запустить
  • Сама oai-прокси будет доступна по адресу http://127.0.0.1:3000. В таверне в Proxy Server URL нужно заменить хост на этот адрес.

Известные проблемы:

  • В групповых чатах расширения правильно работать не будут.
  • Прорывы хумана - свайпайте/включайте думалку.

Про ноасс

Моменты в каноничном ноассе:

Базовые правила форматирования:

  • 1 абзац - 1 префикс. Префикс персонажа - **char name:**
  • Под префиксом персонажа могут содержаться *действия*, "речь" и 'мысли' в любом количестве и порядке.
  • Нарратив (плейнтекст, экспозиция) должен содержать только необходимый минимум действий персонажей. Основные действия должны быть под префиксом.
  • В своем ответе префикс писать не нужно - его подставит скрипт.
  • Свой ответ должен соответствовать правилам форматирования и быть в меру развернутым.

Гритинг:

  • Должен соответствовать правилам форматирования. От гритинга сильно зависит стиль дальнейшего РП.
  • Гритинг лучше всего начинать с объявления акта (например, ## Act: [act name]), начальной экспозиции (описание сцены, расстановка персонажей и завязка), затем должно идти непосредственное взаимодействие персонажей.
  • В гритинг можно включать действия и речь от юзера (здесь нужно ставить его префикс как любому другому персонажу).
  • Нежелательно в гритинг вставлять монологи

Мемо:

Рентри ХМЛа про мемо в целом - https://rentry.co/DrunkArcadeExample
TL;DR, важные для РП напоминания компактно хранятся на глубине. Пресет каноничного ноасса предполагает, что в мемо содержатся следующие вещи:

  • Ограничения, они же псевдоинструкции - напоминания ассистента самому себе, каким должно быть повествование (форматирование, содержание, персонажи и т.д.)
  • Анкеты персонажей - структурированные компактные описания персонажей, содержащие только необходимую информацию. Развернутая информация и предыстория отправляются в системпромпт.
  • Планы на историю (опционально) - кратковременное или долговременное представление, как должна выглядеть история, чаще всего идеи/теги

Помимо пресетного мемо можно использовать вставку на глубину через Character's Note / Author's Note для каких-то особых вещей.

Структурные лупы:

С увеличением контекста могут возникать повторяющиеся структуры: одинаковое слово в начале параграфа, одинаковый порядок ответов, одинаковая структура предложений и т.д. Если игнорировать их, то повторяющихся структур будет становиться все больше, и в силу внутриконтекстного обучения возникнет структурный луп. Это ударит по качеству РП: сетка будет стараться повторять один и тот же формат независимо от текущего смысла. Это приведет к тому, что ей придется выдумывать детали из пальца/опускать нужные детали, не менять темп повествования и даже подгонять сам сюжет под форматный луп. Какие методы борьбы со структурными лупами предполагаются в ноассе:

  • Редактирование сообщения вручную (эффективно только на ранних этапах лупа)
  • Автоматическое переписывание сообщения - это делается с помощью внешнего рерайт блока. Необходима хорошая допсетка/допзапрос.
  • Ручной префил - устоявшийся порядок ответов можно разбить заданным префилом с префиксом какого-то персонажа/началом нарратива (в пресете или расширении)
  • Думалка (CoT) - с помощью планирования ответа также можно избегать части лупов. В ноассе думалка делается с помощью внешних блоков.
  • Смена акта - хороший комбобрейкер, форсируется с помощью префила. Иногда акт меняет и сама сетка.

Старые пасты про ноасс:

1.
Короче смотри, немного оффтоп, но на самом деле клод не просто отвечает на твое сообщение и потом останавливается - он бесконечно генерирует огромную простыню диалога между хуманом и ассистентом. То есть, например ты сказал ему решить пример по матану:
Human: реши пример
Assistant: да, вот решение
и дальше бы продолжил буквально генерировать за тебя (например, написал бы от лица хумана просьбу решить еще один пример), НО, его останавливает вшитый стоп-токен от куктропиков - Human:
Еще проще говоря: Клод - это не Assistant. Клод - это нейронка генерирующая диалог между хуманом и ассистентом.
И вот мы подбираемся к тому самому файнтюну на ассистента, а именно - вместо того чтобы бесконечно генерировать РП/фанфик, генерируется тот самый диалог между хуманом и ассистентом, который, очевидно, даже через маску персонажей будет влиять на аутпут (а отсюда следует соя, лупы, пассивность и прочее что требуется от Assistant'а и на что он тренирован).
И вот безасс решает эту проблему. Теперь диалог идет не между хуманом и ассистентом, а между непосредственно персонажами учатствующими в истории и/или нарратором.

2.
Нифига, смотри как устроен Клод (по крайней мере был до джсонов)
Это просто ЛЛМ, которая ебашит диалог между хуманом и ассистентом. Без стоп токенов она тупо будет писать и за юзера (Оу ноу! Это грех!) и ассистента. Я это всё узнал, когда как раз в профиле и пробовал играть, потому что тогда была дырка со стоп токенами через пробелы и Клод писал за хумана. Без стоп токенов происходит литерали следующее:
Хуман: помоги мне
Ассистент: бла бла бла, помог
Хуман: Спасибо бро!
Это всё пишет просто ЛЛМ, но чтобы юзер мог с ней писать, начинается напяливание совы на глобус. Разрабы сделали хумана стоп токеном. В результате, когда ассистент дописал, его прерывают и не дают писать за хумана, за него пишешь ты. И если ассистент (вот те самые строчки с Ассистент:, а не сферический ассистент на стороне куктропиков. Его на самом деле не существует, он просто фикция и за ассистента пишет ЛЛМ) обучается на то, чтобы давать один конкретный ответ на запрос юзера - он всегда будет пытаться давать один ответ, короткий и с теми самыми "закруглениями", потому что идёт файнтюн на асисистента. Так что как ты проект не отправляй, в своей сути из за файнтюна ассистент всегда будет пытаться отвечать одним сообщением. И в промпте может не быть хумана и ассистента вообще, все эти ограничения это ничто иное, как ограничение со стороны АПИ куктропиков, искусственное. Весь ассистент искуственный, целиком.

3.
>Ну короче пусть сам ХМЛ-шиз все разъяснит опять, тут шиза невиданных масштабов, а я спать пошел
Ну погнали. Я на юшке выше объяснил, как работает хуман ассистент, в чем я убедился на 100% на опыте, когда пердолился с форматом промпта.
Моя задумка простая в своей идее- заменить хумана и ассистента на {{user}}: и {{char}} (Дохуя чаров на самом деле). Но возникает дохуя проблем из за наших любимых соевичков и их АПИ:

  1. Нам нужно убрать хумана и ассистента, но так не получится из за АПИ куктропиков. Решение - оставляем ассистента и хумана в самом начале, чтобы они рано или поздно утонули в контексте. Литерали топим хуманов и ассистентов
  2. Нам нужно чтобы сетка за нас не писала - тут изи, просто добавляем стоп токен {{user}}. Ещё раз для понимания, сейчас есть дефолтный стоп токен Human: и мы его просто "подменяем" на юзера, а хуман должен пердеть в самом начале и утонуть в контексте.
  3. Отсюда и идёт игра в префиле, где Клод пишет один огромный фанфик с подразумеваемой писаниной за юзера. Но стоп токеном мы не даём писать за юзера и пишем сами.

Теперь опять о плюсах, которые это может дать:

  1. Нет закругления ассистента, потому что он утонет в контексте и потому что он будет Обрыкаться на полуслове, когда хочет написать за юзера.
  2. Из за того, что он обрывается, возможны короткие ответы, а не шиза с монологами на миллион токенов
  3. Из за того, что в сути своей это фанфик промпт, ЛЛМ сфокусирована на сторителлинге, без лишней воды
  4. Префикс ассистента, который и является квинтэссенцией и первопричиной сои начинает работать слабее и слабее, аполоджайзы невозможны, ведь мы не даём пиздеть ни хуману, ни ассистенту, а аполоджайсят только они.
  5. Это УЖЕ РАБОТАЛО, Я ЭТО ТЕСТИЛ! Но было жутко неудобно из за того, что я там костылил и пердолился, потому что таверна не перепилена была. Щас даже с пердолингом не получится из за джсонов

Из минусов:

  1. Инструкции при таком подходе надо реализовывать по другому, но я противник инструкций, они мне не нравятся
  2. Надо делать фанфик промпт
  3. Таверна пукнет и обмякнет, если так попробовать сделать но её надо переделать
  4. Куктропики это уже начали фиксить
  5. Иногда ассистент подтекает, но гораздо реже, проблема этого ебаного соевого файнтюна
  6. Это всё работало на 2.1 сейчас не ебу, возможно уже пройдена точка невозврата, когда ЛЛМ может только в соевичка ассистента

Ссылки:

  1. Пресеты борщевика и полезные штуки
  2. Теговый ноасс
  3. Мемо и теги
  4. Оригинальный скрипт ноасса
  5. Архивный пак со скриптом ноасса через прокси
  6. Расширение для перезаписи персоны
  7. Расширение для саундтреков с ютуба
  8. Расширение на встроенные фоны
Edit
Pub: 17 Apr 2024 12:12 UTC
Edit: 28 Oct 2024 09:26 UTC
Views: 12335