Перейти к основному содержанию
Когда guardrail отклоняет вызов, шлюз отвечает вашему приложению HTTP 400 и кодом ошибки guardrail_blocked. Эта страница — посадочный справочник по этой одной ошибке: как выглядит тело, почему оно ведёт себя так, как ведёт, и как обработать его в клиентском коде. Движок политик за ним см. в обзоре Guardrails и полном справочнике.

1. Когда вы видите guardrail_blocked

Guardrail — это упорядоченный список правил, которые шлюз прогоняет по входу запроса и выходу модели. Когда срабатывает правило, чьё действие — block, вызов отклоняется — вышестоящая модель никогда не вызывается (стадия input) или её ответ удерживается (стадия output). Клиент получает 400, несущий guardrail_blocked. Никакое другое действие не производит эту ошибку. mask редактирует совпадение и пропускает очищенный текст, flag записывает совпадение, не меняя трафик, а действия формирования промпта (annotate, spotlight) дают вызову продолжиться, добавляя заметку или оборачивая недоверенный текст. Из пяти действий только block отклоняет. См. Действия.
guardrail_blocked — это контентный отказ (текст на входе, текст на выходе). Сопутствующий отказ политики инструментов — firewall_blocked из Agent Firewall — другая ошибка с другой формой. См. guardrails vs. firewall.

2. Тело ответа

Блокировка возвращается в стандартном OpenAI-образном конверте ошибки шлюза. На эндпоинте OpenAI-стиля (/v1/chat/completions, /v1/responses):
{
  "error": {
    "message": "request blocked by guardrail \"pii-shield\": pii(ssn)",
    "type": "orcarouter_api_error",
    "param": "",
    "code": "guardrail_blocked"
  }
}
Поля, по которым вы ориентируетесь:
Стабильный машинный идентификатор. Ветвитесь на нём, а не на строке сообщения. Это одно и то же значение на каждом эндпоинте, и оно никогда не локализуется.
Человекочитаемое. Форма — request blocked by guardrail "<name>": <detail>, где <detail> суммирует сработавший(ие) тип(ы) правил как <type>(<rule-detail>) — например pii(pii: ssn) или keyword(matched 1 keyword(s)). Блокировка на стадии output читается как response blocked by guardrail "<name>": <detail>, так что глагол говорит вам, какая стадия отклонила вызов. Сообщение проходит через маскирование чувствительной информации до того, как покинет шлюз, так что не ждите сырой совпавшей подстроки здесь.
Общий тип ошибки шлюза на эндпоинтах OpenAI-стиля. Различающий сигнал — code, а не type.
На нативной поверхности Anthropic (/v1/messages) конверт Claude-образный — {"error": {"type": ..., "message": ...}} — и guardrail_blocked всплывает в поле type, так что нативный SDK Claude может отличить отказ политики от общего сбоя шлюза.
Хотите точный вердикт перед шипом правила? Вкладка Test в консоли оценивает текущую политику по образцу текста без вышестоящего вызова и без квоты — см. тестирование и eval.

3. Почему guardrail_blocked не стоит квоты

Заблокированный запрос бесплатен — он никогда не списывает с вашего кредитного баланса.
СтадияКогда срабатывает блокировкаЭффект на квоту
inputДо вышестоящего вызова, впереди тарификацииНичего не тарифицируется
outputПосле ответа модели, до возврата ответаПредварительно списанная квота возвращается
Так что блокировка input не тарифицируется ничем, потому что тарификация ещё не произошла, а блокировка output отменяет удержание, которое шлюз поставил до пересылки. В любом случае вызывающий платит за блокировку 400-м, а не кредитами. См. стадию input и стадию output.

4. Почему guardrail_blocked пропускает повтор

Ошибка помечена skip-retry. Собственная маршрутизация шлюза не переключит этот запрос на другой канал, потому что блокировка — это свойство вашего содержимого и вашей политики — повторный прогон идентичного промпта просто снова заблокировался бы на следующем канале и потратил попытку.
Не помещайте guardrail_blocked и в цикл повторов вашего клиента. Он детерминирован: тот же промпт против той же политики блокируется каждый раз. Повтор сжигает задержку ради исхода, который не может измениться. Трактуйте его как терминальный отказ — исправьте ввод или исправьте политику.

5. Обработка в клиентском коде

Ветвитесь на поле code и покажите полезное сообщение конечному пользователю вместо повтора.
import httpx

resp = httpx.post(
    "https://api.orcarouter.ai/v1/chat/completions",
    headers={"Authorization": "Bearer sk-orca-..."},
    json={
        "model": "openai/gpt-4o-mini",
        "messages": [{"role": "user", "content": "My SSN is 123-45-6789"}],
    },
)

if resp.status_code == 400:
    err = resp.json().get("error", {})
    if err.get("code") == "guardrail_blocked":
        # Terminal — do not retry. Tell the user what to change.
        raise ValueError(f"Blocked by policy: {err['message']}")

resp.raise_for_status()
Ключ sk-orca-... здесь — relay-ключ; он несёт только трафик /v1/*. Вы никогда не редактируете им guardrail; создание и привязка политики — действие консоли / management-API на вашей сессии, а создание или редактирование guardrail требует роли Developer+.

6. Подтверждение и настройка блокировки

Каждое сработавшее правило — включая block — попадает в ленту Matches рабочего пространства с его типом, действием, стадией и строкой-деталью. Именно там вы подтверждаете, какое правило отклонило данный вызов, и сортируете ложные срабатывания.

Лента Matches

Смотрите каждый block, mask и flag с типом, действием и стадией. Совпавшая подстрока появляется, только когда включён Log raw content.

Логирование и приватность

Сырое содержимое по умолчанию выключено — консервативная по приватности позиция. Включайте его для каждого guardrail, когда подстрока нужна для сортировки.

Настройка ложных срабатываний

Ложное срабатывание — это сигнал к настройке, а не причина отключить правило. Пометьте его и сузьте паттерн.

Версионирование

Изменили политику и хотите отменить? Сравните любые две версии и откатитесь как новой версией — история никогда не мутируется.
На стриминговом ответе output block всё равно применяется: сканер режет поток на лету, прежде чем заблокированный контент дойдёт до клиента. Output mask также применяется in-band на потоках — сканер переписывает совпадение в скользящем буфере прежде, чем выдан безопасный префикс. См. покрытие стриминга и stream-safe правила.

7. Связанное