NoassTavern
Ссылка на актуальную версию
https://tavernikof.github.io/NoAssTavern/
Github: https://github.com/Tavernikof/NoAssTavern
Что это?
Это новый фронтенд, вдохновленный глупой таверной, но заточенный чисто под безжоп. Основная мотивация - исправить то, что плохо сделано в таверне и добавить новый функционал. Запускать можно как в облаке (все данные хранятся в браузере), так и локально на своем ПК.
На данный момент это очень сырая версия и подходит для тех, кто умеет в редактирование пресетов или хотя бы на базовом уровне понимает, как работает лоботомит. Хотя покумить уже можно и сейчас, базовые настройки в наличии
Основные отличия:
- НОДЫ. Да-да, ты не ослышался, влажная мечта уже здесь
- Жирные чаты. Ближайший аналог FatPresets, но без ограничений таверны. Внутри чата хранится история сообщений, информация о всех персонажах и настройки пресета. (настройки прокси остаются глобальными и не хранятся вместе с чатом).
- Редактор промптов. Позволяет более очевидно контролировать, что уйдет в запросе
Что умеет на данный момент:
- Базовые вещи: карточки персонажей, персоны, чаты, пресеты, прокси
- Бекенды: Клод, Гемини, OpenAI (в теории должно поддерживаться все совместимые)
- Внешние блоки
Что НЕ умеет на данный момент:
- Мобильная версия
- Саммари (силлипидор не украдет твой саммари, если его нет)
- Лорбуки уже умеет
- Регексовская магия
- Плагины и темы
Как начать
Запуск
Для запуска существует 2 пути:
- Простой. https://tavernikof.github.io/NoAssTavern/. При этом участвует только клиент, все данные хранятся в браузере. Подходит, если хочешь просто потыкать без заморочек с установкой. (потом можно будет экспортировать все данные и перенести в локальную версию)
- Стандартный. Полноценное приложение с бекендом. Тебе понадобится git и Node.js 20+.
- Скачать последнюю версию. Можно через гит:
git clone git@github.com:Tavernikof/NoAssTavern.git
, либо напрямую архив https://github.com/Tavernikof/NoAssTavern/releases (но потом может быть больно обновляться) - запустить
start.bat
(шиндоус) илиstart.sh
(линукс/мак) - открыть ссылку, которая отобразится в консоли (по умолчанию http://localhost:4501)
- Скачать последнюю версию. Можно через гит:
Настройки
Перед началом потребуется некоторые базовые настройки:
- Добавить настройки подключения.
- Добавить карточки персонажей и персоны
Персоны больше не нужны. Вместо этого создавай свою карточку прямо тут.
Для карточек, которые будут использоваться как персоны, в описании все равно надо указывать {{char}}
- Создать чат
- Готово, вы восхитительны!
В любой момент можно добавить/удалить участников, изменить настройки промптов.
!Внимание! если стереть сохраненную в чате карточку (которая отмечена пометкой current), то она удалится без возможности восстановления
(1) В блоке настройки персон отображаются все добавленные в данный момент карточки. Галочки отвечают за активность карточек. Иконкой отмечена карточка текущего юзера.
Confusing moment
Для карточки юзера действуют особые правила в отношении переменных. При ее обработке автоматически заменяются {{char}}
> {{user}}
и {{description}}
> {{persona}}
.
Если в карточке персонажа написано что-то вроде {{char}} hates {{user}}
, то{{char}}
всегда будет указывать на имя карточки, а {{user}}
на другую карточку.
(2) Impersonate - маленький хелпер, который позволяет быстро сменить префксс юзера и стоп-стринги. Удобно если хочется быстро написать какое-то сообщение за другого персонажа, не пердолясь с настройками карточки
(3) Рычаги - прямо как в таверне. (Одна из немногих вещей, которая была сразу хорошо сделана)
Настройки генерации
В основе генерации лежит нодовый интерфейс. По умолчанию существуют 3 процесса, каждый из них запускается, при определенных действиях:
- Main. Нажатие кнопки "отправить" на последнем сообщение юзера
- Generate. Создание нового свайпа
- Translate. После редактирования сообщения
- Дополнительно можно создать любое количество процессов, все они будут работать как внешние блоки
Ноды
На данный момент существует всего 4 вида нод. Вот они слева направо:
- Create message. Создает пустое сообщение с указанной ролью
- Generate. Запускает генерацию с выбранным промптом на последней выбранной ноде. По умолчанию генерация происходит для выбранного сообщения, но если в процессе создаются новые сообщения через Create message, то все последующие манипуляции будут происзодиться с последним созданным сообщением.
- Translate. Переводит сообщение на нужный язык через я.переводчик. Чекбокс "Overwrite original message" нужен для обработки флоу: пишешь сообщение на русском - нажимаешь отправить - русское сообщение переводится на английский и подставляется вместо русского. Короче поведение аналогично таверне.
- Run scheme. Запускает другой процесс из текущего. Берегись лупов, защиты от дурака нет
Промпты
За основу взят пресет соляночника и адаптирован под нужный формат https://rentry.co/noass4anon2
Низкий поклон и поцелуй в пузико
Можно попробовать импортировать пресет из таверны, но функционал работает криво и подходит только как отправная точка, чтобы не копировать тексты руками
Промпты представляют из себя совокупность 3 сущностей из таверны: пресет + апи + прокси.
Редактор промптов максимально приближен к тому, как формируется запрос в апи:
- Редактор разбит на сообщения. Каждое сообщение будет преобразовано в сообщение в апи, если оно не пустое.
- Внутри редактора можно выделять текст в отдельные блоки, которые используются как "рычаги" в чате. Если текст не выделен в блок, то он всегда будет добавлен
- Для динамического контента работают переменные, их поведение аналогично таверне
Лорбуки
Это набор записей, которые добавляются в контекст, если в N последних сообщениях есть указанные ключевые слова. Поддерживаются как внешние лорбуки (можно импортировать из таверны), так и встроенные в карточку.
Описание параметров
- Position - При срабатывании нескольких записей, они будут включены в том же порядке, в котором перечислены в лорбуке
- Name - просто название, ни на что не влияет
- Strategy
- 🔵 Constant - запись будет включена всегда, keywods игнорируются
- 🟢 Normal - стандартное поведение, запись будет включена, если в истории найдены ключевые слова
- 🔗 Vectorized - запись будет включена, только если ключевые слова найдены в других записях лорбука
- Position group - Группа, к которой относится запись.
- По умолчанию все записи имею дефлотную группу. Группе можно задать любое название
- При импорте из таверны, записи, которые имели позицию с глубиной будут отнесены в группе "in_chat"
- Чтобы группа попала в контекст, ее надо добавить в промпт через переменную
{{lorebook}}
- выведет все записи из стандартной группы{{lorebook:in_chat}}
- выведет все записи из группы in_chat, например так:
- Scan depth - Сколько последних сообщений надо просканировать в поиске ключевых слов.
- Если не задано берется глобальное значение
- Keywords - список ключевых слов для поиска. Поиск:
- Регистронезависимый
- Ищет по целым словам. Например, если добавить слово "king", то сматчится слово "King", но не сматчится "kingdom"
- Рекурсивный. То есть ищется не только по истории, но также по самим записям. Работает только в пределах своего лорбука. Если в чате используется несколько лорбуков, вхождения из других матчиться не будут
- Поддерживаются регулярные выражения (включая флаги), для этого надо обернуть запись в слеши. Например:
/king.*?/i
- Content - Контент, который будет добавлен в контекст при совпадении
Работа в чате
- По аналогии с карточками и пресетами, лорбуки можно в любой момент подключать/отключать.
- При добавлении лорбука внутри чата создается его локальная копия.
- При наличии нескольких лорбуков, они будут применяться в том же порядке, в каком указаны в меню.
- Если у карточек есть собственные лорбуки, они всегда будут использоваться
Переменные
Переменная | Описание |
---|---|
{{user}} |
Имя юзера |
{{persona}} |
Описание юзера |
{{char}} |
Имя персонажа |
{{description}} |
Описание персонажа |
{{scenario}} |
Сценарий |
{{personality}} |
Персона (хз кому оно вообще надо) |
{{history}} |
История сообщений<br/>asd |
{{external}} |
Внешний блок |
{{lastUserMessage}} |
Последнее сообщение юзера |
{{random}} |
Случайное значение из списка |
{{lorebook}} {{lorebook:in_chat}} |
Вхождения лорбуков |
Confusing moment #2
Если в чате несколько карточек персонажей, то {{char}}
и {{description}}
можно использовать с аргументами, чтобы обратиться к конкретной карточке, например {{char:1}}
, индексы начинаются от 1 и карточка юзера учитывается в нумерации.
Использование history отличается от таверны. Задавая аргументы, можно брать диапазон сообщений, таким образом можно делать аналог in-chat блоков с глубиной. Пара примеров:
{{history}}
- все сообщения
{{history:1:10}}
{{history::10}}
- последние 10 сообщений
{{history:11}}
- все сообщения начиная с 11
{{history:7:10}}
- последние 4 сообщения начиная с 7
Полный пример. Делаем аналог current_info на глубине 7:
Немного о бекенде
По умолчанию все запросы (к ллм, к переводчику, etc...) шлются напрямую из браузера. Если запускать стандартный вариант (с бекендом), то появляется возможность проксировать все запросы через бекенд и дополнительно заворачивать весь трафик через внешнюю прокси (только HTTP протокол, SOCKS5 не поддерживается)
Контакты
Github: https://github.com/Tavernikof/NoAssTavern
Почта: sick_kind@proton.me