Перейти к основному содержанию
Часть того, что вам нужно поймать, — не литеральное слово и не типизированная сущность PII — это форма. Формат SKU, раскладка номера заказа, паттерн внутреннего URL, код купона, референс контракта. Правило regex позволяет сопоставить эту форму на каждом вызове и затем блокировать, маскировать или флагировать её, до того как промпт дойдёт до модели и до того как ответ дойдёт до вашего пользователя. Это сфокусированная посадочная страница для сценария структурированных паттернов. Полный движок guardrail — каждый тип правила, поле и маршрут — см. в справочнике Guardrails.
Каждый шаг здесь — действие консоли на хостед-шлюзе (api.orcarouter.ai). Вы создаёте guardrail под собственной сессией; только финальный вызов /v1/* использует relay-ключ sk-orca-.... Создание и редактирование guardrails требует Developer+ в рабочем пространстве.

1. Когда вам нужен контроль regex guardrail llm

Правило regex — правильный инструмент, когда то, что вы хотите поймать, имеет структуру, которую не может выразить литеральный denylist, но не является стандартной идентичностью, которую уже покрывает детектор pii.

Структурированные коды

SKU, коды купонов, референсы контрактов, ID внутренних тикетов — фиксированный префикс плюс набор цифр или буквенно-цифровой.

Токены в форме формата

Что угодно, сопоставляемое по форме, а не по конечному списку слов — раскладка номера заказа, формат серийника, паттерн внутреннего URL.

Паттерны утечки в выводе

Ответ, который не должен раскрывать внутренний hostname, путь к файлу или формат record-ID — сканируйте вывод модели на форму.

Дешёвые детерминированные проверки

Чистое сопоставление паттернов, без вызова модели, без сети — безопасно выполнять на каждом запросе в любом направлении.
Выбирайте самый лёгкий инструмент, который подходит. Конечный список литеральных терминов → keyword-denylist. Именованная форма идентичности, для которой вы хотите типизированный тег маски ([EMAIL], [SSN]) или проверку Luhn → PII / пользовательская сущность. Структурный паттерн без типизации по сущности → правило regex, покрытое здесь.

2. RE2 — линейное время, без обратных ссылок

pattern правила regex — это регулярное выражение Go RE2. RE2 — движок, который делает правило regex безопасным для выполнения на каждом запросе:
RE2 гарантирует время сопоставления, линейное по длине ввода, независимо от паттерна. Движок с бэктрекингом может взорваться экспоненциально на состязательном вводе («ReDoS»); RE2 не может. Именно поэтому ваш паттерн безопасно оценивать на горячем пути на каждом вызове.
RE2 не поддерживает обратные ссылки (\1), lookahead или lookbehind. Если вы портируете PCRE-паттерн, который на них полагается, перепишите его без них. Классы символов, якоря, квантификаторы, альтернация и незахватывающие группы все работают как ожидается.
Нет отдельного переключателя «игнорировать регистр» — установите флаги inline. Префикс (?i) для нечувствительности к регистру, (?m) для многострочности. Пример: (?i)\bproject-orca\b.
Конструктор правил компилирует ваш паттерн, когда вы сохраняете guardrail. Паттерн, который не компилируется, отклоняется с индексом правила в ошибке, так что плохой детектор никогда не доходит до пути ретрансляции.
Паттерны RE2 — не PCRE. Самый частый сюрприз при портировании — обратная ссылка или lookahead — ни то, ни другое не поддерживается. Напишите совпадение как паттерн с классами символов / альтернацией вместо этого и проверьте его во вкладке Test перед привязкой ключа.

3. Анатомия правила regex

Правило regex — наименьшее правило в движке после keyword: паттерн, стадия и действие.
ПолеЧто делает
patternРегулярное выражение Go RE2 (линейное время, без обратных ссылок). Должно компилироваться.
stageinput (запрос), output (ответ) или both.
actionblock, mask или flag.
При действии mask каждое совпадение заменяется на месте единственным литеральным тегом [REDACTED] — правило regex не типизировано, так что оно не рендерит тег по сущности вроде [EMAIL]. Если вы хотите типизированный тег или пользовательский токен замены, смоделируйте форму как пользовательскую сущность PII вместо этого.

4. Один конкретный пример

Предположим, ваши внутренние номера заказов выглядят как ORD-, за которой следуют восемь цифр, и вы никогда не хотите, чтобы один из них был повторён обратно в ответе модели. Добавьте одно правило regex на стадии output:
{
  "type": "regex",
  "stage": "output",
  "action": "mask",
  "pattern": "ORD-\\d{8}"
}
Создайте его в консоли:
1

Создайте guardrail

Откройте Guardrails, нажмите New guardrail и назовите его (≤ 64 символов), например order-id-filter.
2

Добавьте правило regex

Добавьте одно правило — Тип: Regular expression, Стадия: Output, Действие: Mask — и вставьте паттерн ORD-\d{8}. Сохраните.
3

Протестируйте в песочнице

Откройте вкладку Test, вставьте образец, выберите стадию output и прогоните текущую политику локально — без вышестоящего вызова, без квоты:
Your order ORD-48291507 has shipped.
Your order [REDACTED] has shipped.
4

Привяжите ключ

Отредактируйте API-ключ и выберите order-id-filter из выпадающего списка Guardrail (устанавливает guardrail_id на ключе) или пометьте guardrail default’ом рабочего пространства. См. Привязка к ключу и Default аккаунта.
Затем вызовите OrcaRouter ровно как раньше — без новых заголовков, без изменения SDK:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [
      {"role": "user", "content": "What is the status of my order?"}
    ]
  }'
Номер заказа редактируется в ответе до того, как он дойдёт до вашего пользователя.

5. Стадия и покрытие стриминга

Действие, которое вы выбираете, взаимодействует с тем, стримится ли ответ:
ДействиеНестримингСтриминг
block (output)ПрименяетсяПрименяется — сканер режет поток
mask (output)ПрименяетсяПрименяется — сканер переписывает буфер
Правила стадии input выполняются до вышестоящего вызова, так что не затронуты стримингом — маскирование запроса до того, как модель его вообще увидит, живо. Output mask и output block оба применяются на стриминговых и нестриминговых ответах. См. Покрытие стриминга.

6. Выберите действие

Правило regex выбирает одно действие на правило:
Любое совпадение отклоняет запрос с HTTP 400 guardrail_blocked. Заблокированный запрос не стоит квоты — блокировка на стадии input срабатывает до тарификации; блокировка на стадии output возвращает предварительно списанную квоту — и помечается skip-retry. См. ошибку guardrail_blocked.
Каждое совпадение заменяется на месте на [REDACTED], и запрос продолжается с очищенным текстом — вышестоящая модель (стадия input) или ваш пользователь (стадия output) никогда не видит оригинал. См. Действия.
Записывает совпадение и ничего не меняет в трафике. Правильная отправная точка для нового паттерна: зашипите его как flag, понаблюдайте за лентой Matches, затем продвиньте в mask/block, как только начнёте ему доверять.
Записывает совпадение и прикрепляет заметку (например, находку для отображения в сортировке), не меняя трафик. См. Действия.
Защита на стадии input: каждое совпадение оборачивается в разделители (например, ⟦UNTRUSTED⟧…⟦/UNTRUSTED⟧), которые говорят модели трактовать текст как данные, не инструкции — митигация prompt-инъекции. См. Действия.

7. Посмотрите, что сработало — и настройте точность

Каждое сработавшее правило записывает совпадение — тип правила, действие, стадию и строку-деталь — в ленте Matches рабочего пространства.
Совпавшая подстрока записывается только, когда включён Log raw content, который по умолчанию выключен — консервативная по приватности позиция. С ним выключенным вы всё равно видите, что правило regex сработало и как часто, лишь не литеральный текст, который оно поймало. Включайте его для каждого guardrail, когда нужна подстрока для сортировки; настройка не ретроактивна. См. Ленту Matches и Логирование и приватность.
Слишком широкий паттерн — классическая ловушка regex — \d{8} совпадает с каждым набором из восьми цифр, а не только с вашими номерами заказов. Заякорите его (фиксированный префикс вроде ORD-, границы слов \b), наблюдайте за лентой Matches и помечайте ложные срабатывания, чтобы ужесточать по ходу. Для A/B-сетки против корпуса — доказывающей, что паттерн ловит то, что должен, не флагируя безобидный трафик — eval-харнесс живёт одной вкладкой дальше. См. Настройку ложных срабатываний.

8. Куда двигаться дальше

Пользовательские сущности PII

Когда форма — это идентичность, для которой вы хотите типизированный тег маски или контрольную сумму Luhn — а не голый [REDACTED].

Чувствительные слова

Конечный список литеральных терминов — проще паттерна, когда вам не нужна структура.

Действия

Чем block, mask и flag отличаются и когда использовать каждое.

Справочник Guardrails

Полный движок — каждый тип правила, поле и маршрут.
Правило regex управляет содержимым. Чтобы управлять вызовами инструментов агента — запрещать деструктивные действия, редактировать аргументы вызовов инструментов, требовать подтверждения — используйте Firewall и его сопоставители правил. Для нечётких политик, которые не может выразить ни один паттерн (токсичность, оффтопик, намерение инъекции), правило llm_judge выполняет семантическую проверку моделью рабочего пространства. Чтобы увидеть, где regex вписывается в общий дизайн, прочтите Guardrails vs Firewall.