Пресет + внешняя блокогенерация для ноасса

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 - дополнительная сетка для автогенерации инфоблока, рефлексии и глобального саммари.
Пресет на мемо, регексы для скрытия.
Не забывайте менять гритинги!

Установка ноасса:

  1. Кинуть noass.js и start_noass.bat (или start_noass.sh) в какую-нибудь папку (желательно не в таверновскую).
  2. Поменять в 7 строчке noass.js ссылку на прокси.
  3. Добавить в Таверне в Advanced Formatting (буква А) в Custom Stopping Strings: ["**{{user}}:**", "\n\n"] (или ["{{user}}:", "\n\nNarrator:"] для ноасса с Нарратором)
  4. Поменять в Таверне ссылку прокси на http://127.0.0.1:3000. В итоге должно выглядеть например так: http://127.0.0.1:3000/proxy/anthropic.
  5. Запускать ноасс через 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

Установка остального:

  1. Пресет SychNoass_0_2_1.json импортировать. В большинстве случаев работает из коробки.
  2. 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
  3. Regex:
    • Если используете блоки, то импортируйте все регексы из папки regex.
    • Если не используете - импортируйте только Zvezdochka. Опционально можно импортировать Add user prefix для отображения префикса {{user}}

(Опц.) Настройка дополнительной сетки для генерации блоков:

  1. Поменять в 9 строчке noass.js значение addUse на true.
  2. В 10 строчке указать gpt или claude в зависимости от типа допсетки.
  3. В 11 строчке поменять ссылку на дополнительную прокси.
  4. В 12 строчке выставить адрес метода (messages для claude и chat completions для gpt). Например: /proxy/openai/chat/completions.
  5. В 13 строчке выставить конкретную модель сетки.
  6. В 14 строчке вставить апикей/пароль от прокси.
  7. В 15 строчке выставить x-api-key для claude или Authorization для gpt.
  8. Можно подредактировать джейл для gpt на 108 строчке.
  9. Перезапустить ноасс.

(Опц.) Настройка прокси:

  1. Запустить консоль в папке ноасса, пробить команду npm i socks-proxy-agent.
  2. Поменять в 19 строчке noass.js значение useSOCKS на true.
  3. В 20 строчке указать хост и порт прокси.
    3.1. Если на прокси есть авторизация, то формат такой: socks://login:pass@host:port

Чего делает:

  1. После генерации ответа чаром генерирует блоки к этому ответу по шаблону.
  2. Отдельной генерацией идет полное саммари (если включено), после генерации блоков на заданном периоде.
  3. После ответа юзера инжектит инфоблок, рефлексию и рандом мемори под мемо.
  4. Скрывает регексами блоки из чата от сетки. Скрывает рефлексию от юзера.

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

  1. Инфоблок - краткая информация о сцене и персонажах
  2. Рефлексия - анализ текущей сцены
  3. Рандом мемори - случайное воспоминание (одно из прошлых сообщений от чара)
  4. Глобальное саммари - саммари всего повествования, включает в себя онтологию (высокоуровневое описание элементов истории и отношений между персонажами) и классическое саммари.

Как модифицировать:

  1. В пресете можно добавлять constraints в Custom под свой вкус.
  2. Промпт и шаблон блоков можно менять в 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 и не забыть | в конце, чтобы отделить от следующей инструкции.

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

  1. Стриминг в таверне не показывается с gpt на дополнительной сетке.
  2. Если удалить несколько сообщений и после этого свайпнуть последнее вместо того, чтобы отправить сообщение за юзера, то инжекты останутся старыми. Это из-за того, что не существует триггера на свайп. Не критично, но может быть неприятно.
  3. Если включить допсетку, то Test message, /gen и /genraw попадают к ней. Не баг, а фича.
  4. В групповых чатах генерация блоков корректно работать не будет.
  5. Для допгенерации на прокси должны быть разрешены запросы без стриминга
  6. Прорывы хумана - свайпайте.

Про ноасс

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

  1. Нужно менять гритинг карточки в соответствии с форматированием пресета (префиксы, звездочки, описания сцен). Без этого клод вряд ли подхватит формат. Стиль дальнейшего рп сильно зависит от гритинга.
  2. Гритинг желательно начинать с описания сцены плейнтекстом (сама сцена, расстановка персонажей, завязка).
  3. В гритинг можно включать речь и действия от юзера (также с префиксом). Нежелательно вставлять в гритинг длинные монологи от чаров.
  4. В дальнейшем префикс юзера писать не надо, его подставляет сам скрипт. (исключение - многоабзацевый ответ с экспозицией, там может быть смысл вставить второй префикс). Желательно отвечать развернуто и не ломать формат.

Отличия ноасса с Нарратором от каноничного:

- Каноничный С Нарратором
Формат Пьеса/сценарий Интерактивная история
Префиксы Имена персонажей {{user}} и Narrator
Содержание Действия под префиксами и экспозиция Свободное
Гритинг Необходимо подстраивать под форматирование Любой
Лупы Меньше Больше
Закругления Нет Могут возникнуть
Positivity bias Нет Есть
Пресет Из коробки Архивный https://files.catbox.moe/rxdq0r.zip

Пасты про ноасс:

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 сейчас не ебу, возможно уже пройдена точка невозврата, когда ЛЛМ может только в соевичка ассистента
Edit
Pub: 17 Apr 2024 12:12 UTC
Edit: 16 May 2024 22:41 UTC
Views: 2863