Автоменеджмент записей лорбука
Расширение для автоменеджмента записей чатового лорбука (ST 1.12.0+)
Ссылка - https://gitgud.io/Monblant/sillytavern-loremanager
О лорбуках - https://docs.sillytavern.app/usage/core-concepts/worldinfo/
Установка: Extensions → Install extension (сверху справа) → Вставить ссылку https://gitgud.io/Monblant/sillytavern-loremanager
Обновление: Extensions → Manage extensions (сверху справа) → скролл вниз → кнопка обновить рядом с LoreManager
Суть расширения
Ключевые понятия
Input Schema
или шаблон поиска - шаблон, с помощью которого ведется поиск соответствий в сообщениях для дальнейшей обработкиOutput Schema
или шаблон записи - шаблон, с помощью которого создается содержимое записей лорбука- Плейсхолдер - выражение вида
{{placeholder}}
, которое можно применять в шаблонах и некоторых полях для захвата информации - Группа - набор шаблонов и правил, по которым информация извлекается из чата, преобразуется и отправляется в лорбук
- Снапшот лорбука - моментальная копия лорбука, хранимая вместе с сообщениями
Ключевые функции
- Автоматическое создание записей для лорбука, привязанного к чату, на основе шаблонов (
Input Schema
иOutput Schema
) - Автоматическое создание лорбука для чата (если еще не создан), управление его состоянием через снапшоты
- Динамическое обновление существующих записей чатового лорбука на основе шаблонов, заданных правил и содержимого новых сообщений
- Встраивание шаблонов в карточку персонажа
Применение
- Накопление информации о лоре и окружении в виде профилей/описаний/блоков и т.д.
- Ведение динамических саммари блоков без надобности допвызовов
- Гибкое управление присутствием записей в контексте по сравнению с постоянными инжектами
- Создавать карты со встроенными правилами извлечения информации
- При удалении сообщений откатывать состояние лорбука без надобности его редактировать
Настройки
Общие
Enable LoreManager
- управляет состоянием расширения.
LoreManager Preset
- отвечает за активный пресет. В пресетах содержится набор групп.
Preset Groups
- группы активного пресета .
Embedded Groups
- группы, встроенные в текущую карточку.
Редактор групп
Group Name
- имя группы, должно быть уникальным.
Input Schema
- шаблон поиска, согласно которому будет производиться поиск информации в сообщениях. В обычном режиме в шаблонах поиска могут (и должны) использоваться плейсхолдеры вида {{placeholder}}
, которые захватывают информацию, необходимую для дальнейшей обработки. В большинстве случаев при поиске плейсхолдер будет соответствовать регексовой группе вида ([\s\S]*?)
, то есть вбирать в себя любые символы, в том числе и переносы строк.
Пример шаблона поиска:
Такой шаблон будет соответствовать подобным по форматированию блокам, например:
Извлечение с помощью шаблона поиска можно воспринимать как запись переменных. В примере в переменную name
запишется "Baphometh", а в переменную age
- "NA".
Для шаблона поиска, помимо обычного режима, существует режим регекса, управляемый через Regex Mode
. В этом режиме введенный в Input Schema
текст будет восприниматься как регекс выражение, но плейсхолдеры продолжают использоваться как обычно. В таком режиме можно настроить более гибкие схемы, но нужно валидировать синтаксис и экранировать символы.
Шаблонов поиска для одной группы может быть несколько, все они будут использоваться одновременно. Таким образом можно настроить захват информации из разнородных записей в один вывод, например время захватывать из записи вида:
А локацию из записи вида:
Output Schema
- схема того, как будет выглядеть содержимое в лорбучной записи. Как и шаблоны поиска, поддерживает плейсхолдеры, которые из них и берет. Пример шаблона записи:
С учетом примера шаблонов поиска, приведенных выше, в записи будет захвачено время и название локации и отправлено в блок.
Конфиг записей
Entries Update Policy
- правила того, как будут обновляться существующие переменные в записях. Есть два типа:
Replace
- переменные в записях будут замещаться. То есть, например, если шаблоном поиска был найдено соответствие для[NEW LOCATION - {{location}}]
, то переменнаяlocation
в лорбучной записи будет заменена (при этомtime
останется неизменной). Это правило подходит для большинства юзкейсов.Append
- переменные в записях будут дополняться. Например, задан такой шаблон поиска:
И такой шаблон записи:
При правиле Append
при каждом объявлении нового акта в конец <acts list>
будет добавляться название нового акта. Правило полезно для ведения длинных списков.
Остальные настройки в конфиге записей соответствуют тому, что можно встретить в настройках лорбука. Эти настройки будут применены для каждой записи, созданной с помощью группы.
В полях Title
, Primary Keys
, Secondary Keys
, Automation ID
и Inclusion Group
можно использовать плейсхолдеры, полученные из Input Schema
. С помощью такого подхода можно с помощью одной группы создавать несколько записей и по-разному контролировать их активацию. Например, задан следующий шаблон поиска:
При таком шаблоне в поле Title
можно задать например {{name}}
или {{name}}, {{city}}
. Таким образом будут создаваться записи исходя из имени или имени и города.
Замечание: Title
подразумевается быть уникальным. Для избежания конфликта имен лучше указывать дополнительную и в некоторых случаях избыточную информацию, например Person {{name}}
или Profile {{name}}
.
Кнопки
В расширении предусмотрены дополнительные кнопки для ручного управления снапшотами лорбука. Снапшоты также создаются автоматически при каждом изменении лорбука внутри расширения и храняться внутри сообщений.
Load LoreBook Snapshot
- загрузить последний сохраненный в чате снапшот. Может быть полезным для отката лорбука. Заметка: поиск снапшота не учитывает скрытые сообщения.Save LoreBook Snapshot
- сохранить текущее состояние лорбука чата в последнее сообщение. Полезно, если были сделаны ручные изменения в лорбук, которые надо зафиксировать сейчас.
Макросы
Расширение предоставляет доступ к записям лорбука чата через макросы. Макросы расширения глобальные, т.е. применимы везде, где применимы стандартные макросы. Шаблон макроса:
{{LoreManager::имя записи}}
Кратко о принципах работы
При смене чата
- Загружаются группы, встроенные в карточку персонажа (если такие имеются)
- Загружается лорбук, встроенный в текущий чат, или создается новый и встраивается в чат
При получении нового сообщения
- Подгружается лорбук, встроенный в текущий чат
- К содержимому сообщения применяются шаблоны поиска из активных групп, которые ищут соответствия
- Если были найдены соответствия - захватываются переменные в соответствии с плейсхолдерами шаблонов поиска
- Переменные соединяются с переменными соответствующих
Title
записей в лорбуке на основе выбранного правила (Replace
илиAppend
) - Обновленная запись записывается в лорбук
Так же работает при получении новых сгенерированных блоков из ExtBlocks
При удалении сообщения
- Ищется последний снапшот лорбука в чате
- Загружается последний снапшот (если он есть)
При свайпе (до генерации)
- В свайпе (если он не новый) ищется встроенный снапшот лорбука. Если он найден - загружается он.
- Если снапшот не найден или свайп новый - ищется снапшот среди соседних свайпов
- Если снапшот найден среди соседних свайпов, то загружается последний снапшот до текущего сообщения (для избежания нелинейной модификации)
- Если не найден - текущий лорбук остается неизменным
Известные проблемы
- При переименовании лорбука чата могут происходить странные вещи. После переименования лорбука лучше обновить страницу