Ноасс: расширение, пресеты и внешняя блокогенерация
Расширение ноасса (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: теперь можно имитировать ноасс и на других сетках с помощью вставки хуманпромпта.
Установка и настройка
Установка и настройка расширения ноасса:
- Установить расширение ноасса.
- В расширении поставить галку
Enable NoAss
. - Импортировать пресет для расширения из пака (папка
noass sets
):- Для каноничного ноасса -
Canon
- Для ДнД ноасса -
Canon
илиCanon with insert
(в последнем случае включитьInsert Zero Prefill
в расширении) - Для ноасса с Нарратором -
Narrator
- Для прозового ноасса -
Prose
- Для тегового ноасса -
Tag
- Для каноничного ноасса -
- По галкам:
Enable Zero Prefill
- включает зеро префил, держать включенным на Claude сетках, убирать на остальныхInsert Zero Prefill
- включает вставку зеро префила в начало сообщения. Включать только на Claude сетках и если про это явно написано.Enable Human Prompt
- включает вставку хуманпромпта перед/после истории чата. Включать только на не Claude сетках, на Claude хуманпромпт и так есть. В хуманпромпт вставлять User first message из пресета (если позиция before) или что-то вроде[continue seamlessly]
(для позиции after).
Установка пресетов и периферии:
- Отключите примеры диалогов в User Settings, если они еще не отключены. Там же ставите галки на
Show {{char}}: in responses
и наShow {{user}}: in responses
. - Импортировать пресет на выбор:
SychNoassCanon
для каноничного ноассаSychNoassDnD
для каноничного ноассаSychNoassNarrator
для ноасса с Нарратором- Один из пресетов борщевика (ГМ, каноничный, прозовый)
- Теговый ноасс
- ГМ ноасс для гемини
После импорта проверьте, чтобы модель в API была правильная, пресет ее может изменить.
- Если нужны блоки:
2.1. Установите расширение для внешней блокогенерации и включите его.
2.2. Импортируйте в расширении блоковый пресетNoassExt-blocks
из пака.
2.2. Выберете в расширении вAPI Settings
правильную прокси и модель для блоков. - Quick Reply:
NoassExt-utils.json
- импортировать и включить, если нужен его функционал. - Regex: (необязательно, но полезно)
Zvezdochka
- Клод любит терять закрывающую звездочку в конце ответа, регекс ее восстанавливает.Add user prefix
- добавляет отображение префикса юзераHide old info
- скрывает старые инфоблоки.Hide facts tracking
- скрывает блоки<new fact>
из видимости.
- Опционально в 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
.
Описание пресетов
- Описание пресетов можно найти здесь - https://rentry.org/noass_extra#пресеты
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}} (Дохуя чаров на самом деле). Но возникает дохуя проблем из за наших любимых соевичков и их АПИ:
- Нам нужно убрать хумана и ассистента, но так не получится из за АПИ куктропиков. Решение - оставляем ассистента и хумана в самом начале, чтобы они рано или поздно утонули в контексте. Литерали топим хуманов и ассистентов
- Нам нужно чтобы сетка за нас не писала - тут изи, просто добавляем стоп токен {{user}}. Ещё раз для понимания, сейчас есть дефолтный стоп токен Human: и мы его просто "подменяем" на юзера, а хуман должен пердеть в самом начале и утонуть в контексте.
- Отсюда и идёт игра в префиле, где Клод пишет один огромный фанфик с подразумеваемой писаниной за юзера. Но стоп токеном мы не даём писать за юзера и пишем сами.
Теперь опять о плюсах, которые это может дать:
- Нет закругления ассистента, потому что он утонет в контексте и потому что он будет Обрыкаться на полуслове, когда хочет написать за юзера.
- Из за того, что он обрывается, возможны короткие ответы, а не шиза с монологами на миллион токенов
- Из за того, что в сути своей это фанфик промпт, ЛЛМ сфокусирована на сторителлинге, без лишней воды
- Префикс ассистента, который и является квинтэссенцией и первопричиной сои начинает работать слабее и слабее, аполоджайзы невозможны, ведь мы не даём пиздеть ни хуману, ни ассистенту, а аполоджайсят только они.
- Это УЖЕ РАБОТАЛО, Я ЭТО ТЕСТИЛ! Но было жутко неудобно из за того, что я там костылил и пердолился, потому что таверна не перепилена была. Щас даже с пердолингом не получится из за джсонов
Из минусов:
- Инструкции при таком подходе надо реализовывать по другому, но я противник инструкций, они мне не нравятся
- Надо делать фанфик промпт
- Таверна пукнет и обмякнет, если так попробовать сделать но её надо переделать
- Куктропики это уже начали фиксить
- Иногда ассистент подтекает, но гораздо реже, проблема этого ебаного соевого файнтюна
- Это всё работало на 2.1 сейчас не ебу, возможно уже пройдена точка невозврата, когда ЛЛМ может только в соевичка ассистента