Пресет + внешняя блокогенерация для ноасса
V-0.2.1
Ссылка на пак - https://files.catbox.moe/gznj23.zip
Changelog: добавление форматирования для мыслей персонажей, правки в пресет, правки в промпты и шаблоны блоков, добавление декоративного регекса для отображения тэга {{user}}
Updated: пресет, Ext.json, add_user_prefix.json
Note: пресет тестировался только на соннете
TL;DR
Claude Sonnet/Opus - основная сетка чисто для генерации истории.
GPT-4/Claude - дополнительная сетка для автогенерации инфоблока, рефлексии и глобального саммари.
Пресет на мемо, регексы для скрытия.
Не забывайте менять гритинги!
Установка ноасса:
- Кинуть
noass.js
иstart_noass.bat
(илиstart_noass.sh
) в какую-нибудь папку (желательно не в таверновскую). - Поменять в 7 строчке
noass.js
ссылку на прокси. - Добавить в Таверне в Advanced Formatting (буква А) в Custom Stopping Strings:
["**{{user}}:**", "\n\n"]
(или["{{user}}:", "\n\nNarrator:"]
для ноасса с Нарратором) - Поменять в Таверне ссылку прокси на
http://127.0.0.1:3000
. В итоге должно выглядеть например так:http://127.0.0.1:3000/proxy/anthropic
. - Запускать ноасс через
start_noass.bat
(илиstart_noass.sh
) (либо из командной строки черезnode noass.js
, удостоверившись, что была пробитаnpm i express express-http-proxy
).
Дополнение про Termux:
запускаешь таверну
с левой части экрана термукса свайпаешь вправо
там new session и запускаешь во второй только что запустившейся сессии скриптустановка:
mkdir ~/noass
cd ~/noass
wget ССЫЛКА_НА_АРХИВ
unzip ИМЯ_АРХИВА.zip
npm i express express-http-proxyзапуск:
cd ~/noass
node noass.js
Установка остального:
- Пресет
SychNoass_0_2_1.json
импортировать. В большинстве случаев работает из коробки. - Quick Reply (пропустить шаг, если не используются блоки): импортировать и включить
Ext.json
. Отредактировать скриптEnablers
следующим образом:- Если вам не нужны инфоблок и рефлексия, то в
/setvar key=enableBlocks
выставитеfalse
- Если вам не нужна рефлексия, то в
/setvar key=enableThinking
выставитеfalse
- Если вам не нужен инфоблок, то в
/setvar key=enableStats
выставитеfalse
- Если вам не нужно глобальное саммари, то в
/setvar key=enableGlobalSummary
выставитеfalse
. - Если вам нужно глобальное саммари, то задайте нужный период строкой ниже (стандартный - каждые 20 сообщений)
- Если вам не нужен инжект рандомных воспоминаний, то в
/setvar key=randomMemoryInject
выставитеfalse
- Если вам не нужны инфоблок и рефлексия, то в
- Regex:
- Если используете блоки, то импортируйте все регексы из папки regex.
- Если не используете - импортируйте только
Zvezdochka
. Опционально можно импортироватьAdd user prefix
для отображения префикса {{user}}
(Опц.) Настройка дополнительной сетки для генерации блоков:
- Поменять в 9 строчке
noass.js
значениеaddUse
наtrue
. - В 10 строчке указать
gpt
илиclaude
в зависимости от типа допсетки. - В 11 строчке поменять ссылку на дополнительную прокси.
- В 12 строчке выставить адрес метода (messages для
claude
и chat completions дляgpt
). Например:/proxy/openai/chat/completions
. - В 13 строчке выставить конкретную модель сетки.
- В 14 строчке вставить апикей/пароль от прокси.
- В 15 строчке выставить
x-api-key
дляclaude
илиAuthorization
дляgpt
. - Можно подредактировать джейл для
gpt
на 108 строчке. - Перезапустить ноасс.
(Опц.) Настройка прокси:
- Запустить консоль в папке ноасса, пробить команду
npm i socks-proxy-agent
. - Поменять в 19 строчке
noass.js
значениеuseSOCKS
наtrue
. - В 20 строчке указать хост и порт прокси.
3.1. Если на прокси есть авторизация, то формат такой:socks://login:pass@host:port
Чего делает:
- После генерации ответа чаром генерирует блоки к этому ответу по шаблону.
- Отдельной генерацией идет полное саммари (если включено), после генерации блоков на заданном периоде.
- После ответа юзера инжектит инфоблок, рефлексию и рандом мемори под мемо.
- Скрывает регексами блоки из чата от сетки. Скрывает рефлексию от юзера.
Описание блоков:
- Инфоблок - краткая информация о сцене и персонажах
- Рефлексия - анализ текущей сцены
- Рандом мемори - случайное воспоминание (одно из прошлых сообщений от чара)
- Глобальное саммари - саммари всего повествования, включает в себя онтологию (высокоуровневое описание элементов истории и отношений между персонажами) и классическое саммари.
Как модифицировать:
- В пресете можно добавлять constraints в
Custom
под свой вкус. - Промпт и шаблон блоков можно менять в Quick Reply, скрипты
Prompt
иTemplate
соответственно. Промпты и шаблоны разделены для каждого блока и содержатся в первых двух строчках и последней строчке (для саммари полной истории).
Пример того, как надо менять шаблон, чтобы скрипт его принял:
Пример шаблона инфоблока (старый)
<current_info>
```
Time: [HH:MM | DD.MM.YY | day of week]
Location: [Location, sublocation]
Scene: [Notable objects enumeration, may be random]
World: [Observable surrounding actions (excluding {{user}} and {{char}}), '-' if none]
Portrayals:
• Character name:
> [outward physical/mental condition] | [outward emotion]
> [relative position/location] | [brief description of relationships]
> [clothing, physical description] | [items]
```
</current_info>
В изначальном шаблоне нужно поменять все |
на \|
и все переносы строк на {{newline}}
. Затем получившуюся строчку вставить после /setvar key=statsTemplate
в скрипте Template и не забыть |
в конце, чтобы отделить от следующей инструкции.
Известные проблемы:
- Стриминг в таверне не показывается с
gpt
на дополнительной сетке. - Если удалить несколько сообщений и после этого свайпнуть последнее вместо того, чтобы отправить сообщение за юзера, то инжекты останутся старыми. Это из-за того, что не существует триггера на свайп. Не критично, но может быть неприятно.
- Если включить допсетку, то Test message, /gen и /genraw попадают к ней. Не баг, а фича.
- В групповых чатах генерация блоков корректно работать не будет.
- Для допгенерации на прокси должны быть разрешены запросы без стриминга
- Прорывы хумана - свайпайте.
Про ноасс
Моменты в каноничном ноассе:
- Нужно менять гритинг карточки в соответствии с форматированием пресета (префиксы, звездочки, описания сцен). Без этого клод вряд ли подхватит формат. Стиль дальнейшего рп сильно зависит от гритинга.
- Гритинг желательно начинать с описания сцены плейнтекстом (сама сцена, расстановка персонажей, завязка).
- В гритинг можно включать речь и действия от юзера (также с префиксом). Нежелательно вставлять в гритинг длинные монологи от чаров.
- В дальнейшем префикс юзера писать не надо, его подставляет сам скрипт. (исключение - многоабзацевый ответ с экспозицией, там может быть смысл вставить второй префикс). Желательно отвечать развернуто и не ломать формат.
Отличия ноасса с Нарратором от каноничного:
- | Каноничный | С Нарратором |
---|---|---|
Формат | Пьеса/сценарий | Интерактивная история |
Префиксы | Имена персонажей | {{user}} и Narrator |
Содержание | Действия под префиксами и экспозиция | Свободное |
Гритинг | Необходимо подстраивать под форматирование | Любой |
Лупы | Меньше | Больше |
Закругления | Нет | Могут возникнуть |
Positivity bias | Нет | Есть |
Пресет | Из коробки | Архивный https://files.catbox.moe/rxdq0r.zip |
Пасты про ноасс:
1.
Короче смотри, немного оффтоп, но на самом деле клод не просто отвечает на твое сообщение и потом останавливается - он бесконечно генерирует огромную простыню диалога между хуманом и ассистентом. То есть, например ты сказал ему решить пример по матану:
Human: реши пример
Assistant: да, вот решение
и дальше бы продолжил буквально генерировать за тебя (например, написал бы от лица хумана просьбу решить еще один пример), НО, его останавливает вшитый стоп-токен от куктропиков - Human:
Еще проще говоря: Клод - это не Assistant. Клод - это нейронка генерирующая диалог между хуманом и ассистентом.
И вот мы подбираемся к тому самому файнтюну на ассистента, а именно - вместо того чтобы бесконечно генерировать РП/фанфик, генерируется тот самый диалог между хуманом и ассистентом, который, очевидно, даже через маску персонажей будет влиять на аутпут (а отсюда следует соя, лупы, пассивность и прочее что требуется от Assistant'а и на что он тренирован).
И вот безасс решает эту проблему. Теперь диалог идет не между хуманом и ассистентом, а между непосредственно персонажами учатствующими в истории и/или нарратором.
2.
Нифига, смотри как устроен Клод (по крайней мере был до джсонов)
Это просто ЛЛМ, которая ебашит диалог между хуманом и ассистентом. Без стоп токенов она тупо будет писать и за юзера (Оу ноу! Это грех!) и ассистента. Я это всё узнал, когда как раз в профиле и пробовал играть, потому что тогда была дырка со стоп токенами через пробелы и Клод писал за хумана. Без стоп токенов происходит литерали следующее:
Хуман: помоги мне
Ассистент: бла бла бла, помог
Хуман: Спасибо бро!
Это всё пишет просто ЛЛМ, но чтобы юзер мог с ней писать, начинается напяливание совы на глобус. Разрабы сделали хумана стоп токеном. В результате, когда ассистент дописал, его прерывают и не дают писать за хумана, за него пишешь ты. И если ассистент (вот те самые строчки с Ассистент:, а не сферический ассистент на стороне куктропиков. Его на самом деле не существует, он просто фикция и за ассистента пишет ЛЛМ) обучается на то, чтобы давать один конкретный ответ на запрос юзера - он всегда будет пытаться давать один ответ, короткий и с теми самыми "закруглениями", потому что идёт файнтюн на асисистента. Так что как ты проект не отправляй, в своей сути из за файнтюна ассистент всегда будет пытаться отвечать одним сообщением. И в промпте может не быть хумана и ассистента вообще, все эти ограничения это ничто иное, как ограничение со стороны АПИ куктропиков, искусственное. Весь ассистент искуственный, целиком.
3.
>Ну короче пусть сам ХМЛ-шиз все разъяснит опять, тут шиза невиданных масштабов, а я спать пошел
Ну погнали. Я на юшке выше объяснил, как работает хуман ассистент, в чем я убедился на 100% на опыте, когда пердолился с форматом промпта.
Моя задумка простая в своей идее- заменить хумана и ассистента на {{user}}: и {{char}} (Дохуя чаров на самом деле). Но возникает дохуя проблем из за наших любимых соевичков и их АПИ:
- Нам нужно убрать хумана и ассистента, но так не получится из за АПИ куктропиков. Решение - оставляем ассистента и хумана в самом начале, чтобы они рано или поздно утонули в контексте. Литерали топим хуманов и ассистентов
- Нам нужно чтобы сетка за нас не писала - тут изи, просто добавляем стоп токен {{user}}. Ещё раз для понимания, сейчас есть дефолтный стоп токен Human: и мы его просто "подменяем" на юзера, а хуман должен пердеть в самом начале и утонуть в контексте.
- Отсюда и идёт игра в префиле, где Клод пишет один огромный фанфик с подразумеваемой писаниной за юзера. Но стоп токеном мы не даём писать за юзера и пишем сами.
Теперь опять о плюсах, которые это может дать:
- Нет закругления ассистента, потому что он утонет в контексте и потому что он будет Обрыкаться на полуслове, когда хочет написать за юзера.
- Из за того, что он обрывается, возможны короткие ответы, а не шиза с монологами на миллион токенов
- Из за того, что в сути своей это фанфик промпт, ЛЛМ сфокусирована на сторителлинге, без лишней воды
- Префикс ассистента, который и является квинтэссенцией и первопричиной сои начинает работать слабее и слабее, аполоджайзы невозможны, ведь мы не даём пиздеть ни хуману, ни ассистенту, а аполоджайсят только они.
- Это УЖЕ РАБОТАЛО, Я ЭТО ТЕСТИЛ! Но было жутко неудобно из за того, что я там костылил и пердолился, потому что таверна не перепилена была. Щас даже с пердолингом не получится из за джсонов
Из минусов:
- Инструкции при таком подходе надо реализовывать по другому, но я противник инструкций, они мне не нравятся
- Надо делать фанфик промпт
- Таверна пукнет и обмякнет, если так попробовать сделать но её надо переделать
- Куктропики это уже начали фиксить
- Иногда ассистент подтекает, но гораздо реже, проблема этого ебаного соевого файнтюна
- Это всё работало на 2.1 сейчас не ебу, возможно уже пройдена точка невозврата, когда ЛЛМ может только в соевичка ассистента