Скрипты регулярных выражений

Скрипт регулярного выражения – это правило поиска и замены, которое автоматически переписывает текст чата. С его помощью можно привести в порядок ответ ИИ, переделать собственное сообщение или изменить текст, который получает модель. Уметь программировать для этого не нужно.

Слово "regex" – сокращение от "regular expression", то есть "регулярное выражение": шаблон поиска, который находит текст, подходящий под заданное правило. Шаблон задается один раз и дальше срабатывает в каждом подходящем сообщении.

Пример: некоторые модели оборачивают описания действий в звездочки.

*She smiles* Hello there.

Скопируйте этот шаблон точно: \([^]+)\*. Замените его на $1, и звездочки исчезнут, а текст между ними останется:

She smiles Hello there.

$1 означает "текст, который захватила первая пара круглых скобок". Еще скрипты часто применяют, чтобы удалить пометки вне роли в скобках, зацензурить слово или исправить особенности форматирования одного персонажа.

Создание скрипта регулярного выражения

Глобальные скрипты хранятся в панели Presets (пресеты), в разделе Regexes (regex-скрипты). Откройте панель кнопкой Presets на верхней панели.

Как создать скрипт регулярного выражения

  1. Откройте Presets и найдите Regexes.
  2. Нажмите Create regex (создать regex-скрипт). Откроется полный редактор.
  3. Введите название сверху. Новый скрипт называется "New Regex Script".
  4. В поле Find Pattern (Regex) (шаблон поиска) введите \([^]+)\* (см. Поля редактора).
  5. В поле Replace With (текст замены) введите $1.
  6. В поле Apply To (где применять) оставьте выбранным AI Output. Режим применения по умолчанию Only Display – безопасный выбор (см. Где срабатывает скрипт).
  7. Вставьте She smiles Hello there. в Live Test (пробный запуск). В строке Result: должно быть She smiles Hello there.
  8. Нажмите Save (сохранить). На мгновение появится зеленая надпись Saved.
  9. Проверьте скрипт в чате: когда в ответе ИИ есть текст между звездочками, звездочки больше не видны.

Если не получилось: красная ошибка под 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.

ФлагЗначение
gGlobal: заменять каждое совпадение, а не только первое
iНе различать заглавные и строчные буквы
mMultiline: ^ и $ совпадают также на переносах строк
sdotAll: . совпадает и с символами перевода строки
u, y, dUnicode, sticky и match indices – для особых случаев

Trim Strings

Необязательный список простых строк, которые удаляются после замены. Нажмите Add trim string (добавить строку для удаления), чтобы добавить строку, и кнопку X, чтобы убрать ее. Так удобно удалять фиксированный фрагмент текста, который проще напечатать, чем описать шаблоном.

Live Test

Вставьте пример текста, и результат появится под надписью Result:. Live Test проверяет только поиск, замену и удаление строк. Место применения, включенное состояние, привязка к персонажу и глубина проверяются в настоящем чате. В шаблоне, тексте замены и строках для удаления можно использовать макросы, например {{user}} и {{char}}. В Live Test они получают примерные значения. См. Макросы промптов.

Где срабатывает скрипт

Apply To

Apply To определяет, за какой стороной чата следит скрипт. Хотя бы один вариант должен остаться выбранным. Можно выбрать оба.

Apply Mode

Apply Mode (режим применения) находится в блоке Advanced Options (дополнительные параметры). Он определяет, что именно меняет замена. Новый скрипт начинается с режима Only Display.

Для ваших собственных сообщений скрипт User Input в режиме Only Display или Both переписывает сообщение прямо перед отправкой. Меняется само сохраненное и отправленное сообщение, а не только его вид. Режима "только показ" для исходящих сообщений нет.

Execution Order и Depth Range

Обе настройки находятся в блоке Advanced Options.

Групповые чаты

Это относится к режимам Only Prompt и Both в чате Roleplay с групповым режимом Individual (отдельные ответы).

Привязка скрипта к одному персонажу

Скрипт может принадлежать конкретным персонажам, а не работать везде. Привязать его можно двумя способами.

Если открыть полный редактор из этого блока, вы выйдете из редактора персонажа. Если у персонажа есть несохраненные изменения, приложение сначала предупредит вас.

Настройка Scoped Regex Scripts для каждого чата

Привязанные к персонажу скрипты не запускаются во всех чатах сами. Ими управляет настройка каждого чата. Откройте Chat Settings (настройки чата). Раздел Scoped Regex Scripts (ограниченные regex-скрипты) появляется, только когда хотя бы у одного персонажа этого чата есть привязанные скрипты.

РежимЧто происходит
Disabled (по умолчанию)Привязанные скрипты выключены. Работают только глобальные.
ExclusiveКаждый привязанный скрипт меняет только сообщения своего персонажа.
ChatКаждый привязанный скрипт меняет все сообщения в чате.

Вариант Use preset default (использовать значение пресета) следует настройке Scoped regex default (ограниченный regex по умолчанию) пресета промпта. Выбранный режим переопределяет ее для этого чата. Чтобы новые чаты начинались с нужным режимом, сделайте одно из следующего:

Под режимами панель перечисляет привязанные скрипты каждого персонажа, и у каждого скрипта есть свой переключатель. Это переключатель самого скрипта, поэтому он меняет скрипт во всех чатах. Режим управляет скриптами со стороны показа. Скрипты для промпта всегда следуют за персонажем, который генерирует ответ.

Импорт и замена скриптов

Импорт из SillyTavern

Marinara читает скрипты регулярных выражений, вложенные в карточку персонажа SillyTavern. При импорте карточки появляется раздел Imported regex scripts (импортированные regex-скрипты) с двумя вариантами:

Этот выбор есть и в окне импорта одного персонажа, и в массовом импорте Import from SillyTavern Folder (импорт из папки SillyTavern). Скрипты с пустым шаблоном или с шаблоном, не прошедшим проверку безопасности, пропускаются. Чтобы импортировать обычный файл JSON со скриптами, используйте Import regexes from JSON в разделе Regexes. См. Импорт данных из SillyTavern.

Замена набора regex-скриптов

  1. В разделе Presets → Regexes выберите Select regex scripts (выбрать regex-скрипты).
  2. Отметьте записи старого набора или выберите Select all regex scripts (выбрать все regex-скрипты).
  3. Используйте Export (экспорт) или Delete (удалить) на панели действий. Удаление требует одного подтверждения и необратимо.
  4. Импортируйте обновленный набор.

Записи, которые не удалось удалить, остаются выбранными для повторной попытки. Невыбранные скрипты остаются на месте. Привязки к пресетам по-прежнему доступны в редакторе regex-скриптов.

Безопасность и производительность

Каждый шаблон проверяется перед сохранением и запуском. Шаблон, который, скорее всего, будет работать медленно и подвесит приложение, блокируется с таким сообщением, и сохранить его нельзя, пока вы его не исправите:

Regex pattern is unsafe: avoid nested quantifiers, ambiguous quantified alternatives, and oversized patterns.

Если вы видите это сообщение, сделайте шаблон короче и проще. Избегайте таких конструкций:

Одиночный повтор вида a+ или (a+), как и один широкий символ подстановки, например единственная .*, допустим.

Даже у безопасного шаблона есть ограничение по времени на одну замену в длинном сообщении. Если скрипт обрабатывает одно сообщение слишком долго, приложение пропускает этот скрипт только для этого сообщения. Скрипт остается включенным и попробует снова на следующем сообщении. Сначала проверяйте новый шаблон в Live Test на коротком примере текста.

Смежные руководства