Скрипты регулярных выражений
Скрипт регулярного выражения – это правило поиска и замены, которое автоматически переписывает текст чата. С его помощью можно привести в порядок ответ ИИ, переделать собственное сообщение или изменить текст, который получает модель. Уметь программировать для этого не нужно.
Слово "regex" – сокращение от "regular expression", то есть "регулярное выражение": шаблон поиска, который находит текст, подходящий под заданное правило. Шаблон задается один раз и дальше срабатывает в каждом подходящем сообщении.
Пример: некоторые модели оборачивают описания действий в звездочки.
*She smiles* Hello there.Скопируйте этот шаблон точно: \([^]+)\*. Замените его на $1, и звездочки исчезнут, а текст между ними останется:
She smiles Hello there.$1 означает "текст, который захватила первая пара круглых скобок". Еще скрипты часто применяют, чтобы удалить пометки вне роли в скобках, зацензурить слово или исправить особенности форматирования одного персонажа.
Создание скрипта регулярного выражения
Глобальные скрипты хранятся в панели Presets (пресеты), в разделе Regexes (regex-скрипты). Откройте панель кнопкой Presets на верхней панели.
Как создать скрипт регулярного выражения
- Откройте Presets и найдите Regexes.
- Нажмите Create regex (создать regex-скрипт). Откроется полный редактор.
- Введите название сверху. Новый скрипт называется "New Regex Script".
- В поле Find Pattern (Regex) (шаблон поиска) введите
\([^]+)\*(см. Поля редактора). - В поле Replace With (текст замены) введите
$1. - В поле Apply To (где применять) оставьте выбранным AI Output. Режим применения по умолчанию Only Display – безопасный выбор (см. Где срабатывает скрипт).
- Вставьте
She smiles Hello there.в Live Test (пробный запуск). В строке Result: должно бытьShe smiles Hello there. - Нажмите Save (сохранить). На мгновение появится зеленая надпись Saved.
- Проверьте скрипт в чате: когда в ответе ИИ есть текст между звездочками, звездочки больше не видны.
Если не получилось: красная ошибка под Find Pattern (Regex) блокирует сохранение. Шаблон недопустим или небезопасен; см. Безопасность и производительность.
Управление скриптами
Каждая строка списка Regexes показывает название скрипта, тег AI или User, шаблон в виде /pattern/flags, переключатель включения (действует сразу), кнопки Edit regex (изменить regex-скрипт; карандаш) и Delete regex (удалить regex-скрипт; корзина). Пока скриптов нет, в списке написано "No regexes yet". Перетащите строку за ручку, чтобы изменить порядок запуска.
В заголовке раздела три кнопки со значками: Create regex, Import regexes from JSON (импортировать regex-скрипты из JSON) и Export regexes to JSON (экспортировать regex-скрипты в JSON; сохраняет все глобальные скрипты в один файл). Скрипты, привязанные к одному персонажу, хранятся отдельно; см. Привязка скрипта к одному персонажу.
Поля редактора
Find Pattern (Regex)
Шаблон поиска. Пишите только сам шаблон, без косой черты в начале и в конце. Подсказка в поле показывает пример: \([^]+)\*.
Replace With
Текст, который встает вместо каждого совпадения. Оставьте поле пустым, чтобы совпадение удалялось. Захваченный текст можно использовать снова через $1, $2 и так далее. Перед захватом работают такие преобразования регистра:
| Запись | Результат |
\u$1 | Делает первую букву захвата заглавной |
\U$1\E | Переводит весь захват в верхний регистр |
\l$1 | Делает первую букву захвата строчной |
\L$1\E | Переводит весь захват в нижний регистр |
Буквальный текст с обратными косыми чертами, например путь Windows вида C:\Users, сохраняется как есть.
Regex Flags
Кнопки-переключатели, которые меняют то, как шаблон ищет совпадения. В новом скрипте включены g и i.
| Флаг | Значение |
g | Global: заменять каждое совпадение, а не только первое |
i | Не различать заглавные и строчные буквы |
m | Multiline: ^ и $ совпадают также на переносах строк |
s | dotAll: . совпадает и с символами перевода строки |
u, y, d | Unicode, sticky и match indices – для особых случаев |
Trim Strings
Необязательный список простых строк, которые удаляются после замены. Нажмите Add trim string (добавить строку для удаления), чтобы добавить строку, и кнопку X, чтобы убрать ее. Так удобно удалять фиксированный фрагмент текста, который проще напечатать, чем описать шаблоном.
Live Test
Вставьте пример текста, и результат появится под надписью Result:. Live Test проверяет только поиск, замену и удаление строк. Место применения, включенное состояние, привязка к персонажу и глубина проверяются в настоящем чате. В шаблоне, тексте замены и строках для удаления можно использовать макросы, например {{user}} и {{char}}. В Live Test они получают примерные значения. См. Макросы промптов.
Где срабатывает скрипт
Apply To
Apply To определяет, за какой стороной чата следит скрипт. Хотя бы один вариант должен остаться выбранным. Можно выбрать оба.
- AI Output: скрипт срабатывает на ответах ИИ до того, как они показаны.
- User Input: скрипт срабатывает на ваших сообщениях перед отправкой.
Apply Mode
Apply Mode (режим применения) находится в блоке Advanced Options (дополнительные параметры). Он определяет, что именно меняет замена. Новый скрипт начинается с режима Only Display.
- Only Display: меняется то, что вы видите в чате. Сохраненное сообщение и контекст модели в следующих ходах остаются прежними. Самый безопасный вариант, чтобы привести в порядок вид ответа.
- Only Prompt: меняется то, что получает модель; это видно и в предпросмотре промпта. Показ в чате и сохраненное сообщение не меняются. Используйте его, чтобы убрать то, что модель постоянно копирует.
- Both: меняются и показ в чате, и текст промпта.
Для ваших собственных сообщений скрипт User Input в режиме Only Display или Both переписывает сообщение прямо перед отправкой. Меняется само сохраненное и отправленное сообщение, а не только его вид. Режима "только показ" для исходящих сообщений нет.
Execution Order и Depth Range
Обе настройки находятся в блоке Advanced Options.
- Execution Order (порядок запуска) – это число. Чем меньше число, тем раньше срабатывает скрипт; это важно, когда один и тот же текст подходит нескольким скриптам. Новый скрипт начинается с 0, а при сохранении приложение выдает ему следующий свободный номер. Порядок можно менять и перетаскиванием строк в списке Regexes.
- Depth Range (диапазон глубины) ограничивает, насколько далеко назад работает скрипт, через поля Min и Max. У самого нового сообщения глубина 0, у предыдущего – 1, и так далее. Оставьте оба поля пустыми, чтобы скрипт работал на любой глубине. Если Min больше Max, сохранение блокируется.
Групповые чаты
Это относится к режимам Only Prompt и Both в чате Roleplay с групповым режимом Individual (отдельные ответы).
- Место применения определяется персонажем, который получает промпт.
- Ваши сообщения и сообщения других персонажей считаются User Input.
- Собственные ответы отвечающего персонажа считаются AI Output, в том числе его более ранние ответы в том же групповом ходе.
- Ограничения по персонажам по-прежнему определяют, кто получает измененный промпт. Рассказчик, исключенный из скрипта для скрытия мыслей, получает исходные мысли.
Привязка скрипта к одному персонажу
Скрипт может принадлежать конкретным персонажам, а не работать везде. Привязать его можно двумя способами.
- В редакторе: включите Specific Characters (конкретные персонажи) в блоке Apply To и выберите одного или нескольких персонажей. Пока переключатель выключен, скрипт "Applies to all characters". Когда он включен, выберите хотя бы одного персонажа.
- Со стороны персонажа: откройте персонажа, перейдите на вкладку Advanced (дополнительно) и найдите блок Regex Scripts (regex-скрипты). В нем видны только скрипты этого персонажа, и у него свои кнопки Create regex, импорта и экспорта. Сначала сохраните персонажа, иначе блок сообщит, что пока не может добавлять скрипты.
Если открыть полный редактор из этого блока, вы выйдете из редактора персонажа. Если у персонажа есть несохраненные изменения, приложение сначала предупредит вас.
Настройка Scoped Regex Scripts для каждого чата
Привязанные к персонажу скрипты не запускаются во всех чатах сами. Ими управляет настройка каждого чата. Откройте Chat Settings (настройки чата). Раздел Scoped Regex Scripts (ограниченные regex-скрипты) появляется, только когда хотя бы у одного персонажа этого чата есть привязанные скрипты.
| Режим | Что происходит |
| Disabled (по умолчанию) | Привязанные скрипты выключены. Работают только глобальные. |
| Exclusive | Каждый привязанный скрипт меняет только сообщения своего персонажа. |
| Chat | Каждый привязанный скрипт меняет все сообщения в чате. |
Вариант Use preset default (использовать значение пресета) следует настройке Scoped regex default (ограниченный regex по умолчанию) пресета промпта. Выбранный режим переопределяет ее для этого чата. Чтобы новые чаты начинались с нужным режимом, сделайте одно из следующего:
- Задайте его как значение по умолчанию в пресете.
- Сохраните его в профиле настроек по умолчанию.
- Выберите его, затем нажмите звезду избранного расположения рядом с Reset View (сбросить вид) (см. Выбор расположения для новых чатов).
Под режимами панель перечисляет привязанные скрипты каждого персонажа, и у каждого скрипта есть свой переключатель. Это переключатель самого скрипта, поэтому он меняет скрипт во всех чатах. Режим управляет скриптами со стороны показа. Скрипты для промпта всегда следуют за персонажем, который генерирует ответ.
Импорт и замена скриптов
Импорт из SillyTavern
Marinara читает скрипты регулярных выражений, вложенные в карточку персонажа SillyTavern. При импорте карточки появляется раздел Imported regex scripts (импортированные regex-скрипты) с двумя вариантами:
- Character only (только персонаж; по умолчанию): скрипты остаются привязанными к этому персонажу.
- Global (глобально): скрипты добавляются в Presets и работают во всех чатах.
Этот выбор есть и в окне импорта одного персонажа, и в массовом импорте Import from SillyTavern Folder (импорт из папки SillyTavern). Скрипты с пустым шаблоном или с шаблоном, не прошедшим проверку безопасности, пропускаются. Чтобы импортировать обычный файл JSON со скриптами, используйте Import regexes from JSON в разделе Regexes. См. Импорт данных из SillyTavern.
Замена набора regex-скриптов
- В разделе Presets → Regexes выберите Select regex scripts (выбрать regex-скрипты).
- Отметьте записи старого набора или выберите Select all regex scripts (выбрать все regex-скрипты).
- Используйте Export (экспорт) или Delete (удалить) на панели действий. Удаление требует одного подтверждения и необратимо.
- Импортируйте обновленный набор.
Записи, которые не удалось удалить, остаются выбранными для повторной попытки. Невыбранные скрипты остаются на месте. Привязки к пресетам по-прежнему доступны в редакторе regex-скриптов.
Безопасность и производительность
Каждый шаблон проверяется перед сохранением и запуском. Шаблон, который, скорее всего, будет работать медленно и подвесит приложение, блокируется с таким сообщением, и сохранить его нельзя, пока вы его не исправите:
Regex pattern is unsafe: avoid nested quantifiers, ambiguous quantified alternatives, and oversized patterns.Если вы видите это сообщение, сделайте шаблон короче и проще. Избегайте таких конструкций:
- Шаблоны длиннее 1000 символов.
- Повторяющаяся группа внутри другой повторяющейся группы, например
(a+)+. - Два широких символа подстановки подряд, например
..или\s\w. Широкий символ подстановки – это конструкция вида.,\sили\w+, которая может совпасть с текстом любой длины. - Три и больше широких символов подстановки в одном шаблоне, даже если между ними стоит другой текст.
Одиночный повтор вида a+ или (a+), как и один широкий символ подстановки, например единственная .*, допустим.
Даже у безопасного шаблона есть ограничение по времени на одну замену в длинном сообщении. Если скрипт обрабатывает одно сообщение слишком долго, приложение пропускает этот скрипт только для этого сообщения. Скрипт остается включенным и попробует снова на следующем сообщении. Сначала проверяйте новый шаблон в Live Test на коротком примере текста.
Смежные руководства
- Макросы промптов
- Создание и редактирование персонажей
- Импорт данных из SillyTavern